Day5(23年11月22日周三)
来到新项目已经是第五天了,要是还不认识为数不多的几个服务器程序员就有点说不过去了。不过为了保护个人隐私,我以每个人的代称来称呼。
服务器程序员一共六个人。按照工位划分,五个人横向坐成了一排。从西向东分别是雄雄(男)、邹邹(女)、光哥(男)、老梁(男)和我。在我和老梁之间,纵向还有一排,离我们最近的是最后一个服务器程序侯主任(女)。细琢磨一下,我们的位置有点像中国古代兵器拐。
![](https://img.haomeiwen.com/i10205302/007e33ba4878abea.png)
光哥这一天找到我,意味深长地说:“我们不定时都会有分享的习惯,我认为你呢,也应该分享一些你的见解。比如刚来咱们项目,看代码的时候遇到了哪些困惑?可以把这些困惑和你是怎么解决的困惑给大家讲出来。这也可以给后来人一些经验,让后来人少走弯路。”
“好的,没问题。我现在就开始准备。”我很喜欢这样的领导,感觉自己受到了重视,也能在进入新项目之初有所发挥。在经历了一天的总结,归纳如下:
1.找不到日志?
光哥在我的电脑上,带我完成了坐标收藏的简化功能。在此基础上,我打算完善好这个功能。于是我在玩家属性注册的文件中,找到坐标收藏属性,在其后又增加了一条motify_time,并在消息回调处理的函数内,将这个值赋值为当时的时间,作为数据添加和修改时的时间戳。在模拟客户端窗口,我想查看处理得对不对,但发现找不到日志。难道是日志没起作用,或者是我写的代码有问题?这样的疑惑困扰了我。搞了好久没搞定,于是我找老梁帮我看我的问题出现在哪?最后发现,日志正常输出,只是出现在游戏服务器的控制台窗口,而不是我期待的模拟客户端控制台窗口。因为所有进程都用gameLog这个函数,让我忽略了进程这一概念,不同进程的日志肯定不能在一个地方输出。
2.字符串分隔逗号的问题
在用模拟客户端输入带空格的字符串后,我发现打出来的表中,字符串之间用逗号分隔开了,这不是我想要的。我不禁怀疑,难道是设计漏洞,亦或是有意为之?不过显然这种情况不会发生在真实游戏中,因此我打算利用查看这个问题的机会,顺便看看ConsoleClient的代码。最后发现是模拟客户端在处理这块逻辑时,用了模式匹配"([\"\']*[%w_{}]+[\"\']*)[%s]+", "%1, "处理的字符串,将符合条件的带空格的字符串之间加了逗号。因为不知道这么设计的目的,第二天早上问了光哥。光哥说这是模拟客户端,输入的是指令,在lua中加空格导致loadstring执行错误,因此需要在两个字符串之间加逗号。而且这是模拟客户端,游戏中是不会出现这种问题。如果有闲工夫,未来可以考虑加一些处理,解决这一问题。
3.知其然不知其所以然
在查看模拟客户端时,对于传入参数有所了解,但没有将它与实际结合,知其然不知其所以然。比如p是用于标识日志名称的,b代表模拟客户端的id,c代表模拟客户端的数量,我只是知道了表面的意思,没有了解更深层的意思。比如虚拟客户端工程配置了c为300,那么启动虚拟客户端会开300个玩家,这是我未曾考虑到的。还有对于lua的运行,我也是表面知道。比如Release中的批处理模拟客户端,实际上是运行同级目录下的ConsoleClient.exe,但因为我工程启动的是Debug的ConsoleClient,以为修改lua代码,批处理执行不会起作用。但因为lua不需要编译,是直接加载,无论debug还是release都是加载同一份lua文件,所以效果是一样的。
这些内容还比较少,打算再增加一些,下周找个时间给大家分享一下。
网友评论