我这几天游玩观察下来,发现到处都是偷懒代码的痕迹,以下从程序的角度分析我在这款游戏上看到哪些问题:
1. 聊天室连接问题
每次打开聊天室,切换任何频道(例如世界频跟地区频互切),可以观察到聊天内容全部重新读取,也就是说本地没有对聊天内容做缓存,这会造成连接资源被浪费。
从这个地方可以观察到,开发团队的内部的code review机制也许有点问题,没有一个能力足够的资深工程师去检查程序的运行逻辑,也许只是简单手动测试一下功能,看起来没问题就过了。而这在测试环境几乎不会被看出来,在不受监督的情况下,程序品质只能看工程师良心了。
(而这个问题会延伸到后续的问题,我下面再分析)
从这个地方可以观察到,开发团队的内部的code review机制也许有点问题,没有一个能力足够的资深工程师去检查程序的运行逻辑,也许只是简单手动测试一下功能,看起来没问题就过了。而这在测试环境几乎不会被看出来,在不受监督的情况下,程序品质只能看工程师良心了。
(而这个问题会延伸到后续的问题,我下面再分析)
2. 获得道具提示消失问题
各位不知道有没有发现只要连续玩一段时间,画面上就不会再显示你获得了什么新道具,但是打开背包确认则是有获得金币跟道具的。我推测这是因为画面上显示获得道具的清单(List)爆表了,这个显示组件超出最大上限崩溃后,没有一个重启机制导致。
(或者说,根本就不该让它超出上限)
从这个例子中可以观察到,这款游戏有部分的资源回收机制是有问题的,延伸上一点说的,在这些「测试下看不出差别」的地方,到处可见工程师偷懒的细节,才会在上线后一个一个浮现。而我分析了一个课长直播抽卡的youtube的影片,发生不少次抽卡闪退的现象。可以看出过场动画中的宝箱的闪烁是每次不同的,说明这个动画很有可能是实时渲染的;然而可能因为没有正确的回收资源而导致程序崩溃的现象一直发生。
此外还有一个很明显是资源回收机制出问题的例子就是王国修练书的人物模型异常显示,还有持续挂机会越玩越卡都暗示了可能有这样的问题。(我看手机的内存消耗从一开始登录打怪0.8GB左右,一路增加到2GB+)
(或者说,根本就不该让它超出上限)
从这个例子中可以观察到,这款游戏有部分的资源回收机制是有问题的,延伸上一点说的,在这些「测试下看不出差别」的地方,到处可见工程师偷懒的细节,才会在上线后一个一个浮现。而我分析了一个课长直播抽卡的youtube的影片,发生不少次抽卡闪退的现象。可以看出过场动画中的宝箱的闪烁是每次不同的,说明这个动画很有可能是实时渲染的;然而可能因为没有正确的回收资源而导致程序崩溃的现象一直发生。
此外还有一个很明显是资源回收机制出问题的例子就是王国修练书的人物模型异常显示,还有持续挂机会越玩越卡都暗示了可能有这样的问题。(我看手机的内存消耗从一开始登录打怪0.8GB左右,一路增加到2GB+)
3. 五职业共用机制容易引发未预期的效果
其实共用这个功能很明显是一个代码偷懒的一个例子,不知道大家有没有发现每次切换角色进游戏的时候,生命值都会剩40%~50%左右,然后自动喝掉2~3瓶水回满。
(幸好这游戏水很便宜,不然…)
这很显然是因为角色在登录后才重新计算生命值的结果,推测多出来需要回复的血量是来自共用的防具、成就、宠物…等。
而共用可能导致的问题还不只这些,例如使用等级较低的职业接取燕子任务或讨伐任务,回到等级高的职业去解,可以「解低战力任务获得高战力所需经验」;又或者AI模式重新登录时,不论你开哪个职业挂的,中间的提示永远是写你等级最高的那个职业。
除此之外,游戏的伤害力计算也是偷懒做法,使武器切换功能形同虚设。
(或者说,那其实只是三个同属性武器的必杀技槽?)
(幸好这游戏水很便宜,不然…)
这很显然是因为角色在登录后才重新计算生命值的结果,推测多出来需要回复的血量是来自共用的防具、成就、宠物…等。
而共用可能导致的问题还不只这些,例如使用等级较低的职业接取燕子任务或讨伐任务,回到等级高的职业去解,可以「解低战力任务获得高战力所需经验」;又或者AI模式重新登录时,不论你开哪个职业挂的,中间的提示永远是写你等级最高的那个职业。
除此之外,游戏的伤害力计算也是偷懒做法,使武器切换功能形同虚设。
(或者说,那其实只是三个同属性武器的必杀技槽?)
正常来说攻击力的计算应该是:「角色数值 * 当前武器素质」,而这游戏却只是简单地将武器素质加到角色数值上再下去去计算伤害。
组队的掉落率除以人数也是一个很瞎的写法,一般游戏在组队的掉宝上,会做一个队伍的临时奖池,获得金币道具先放进这个奖池在按照机率(或者按序)去分配;这游戏倒好,没做!上线了发现组队平白得到了五倍打宝率,再赶紧暴力将掉落率除以人数。
(我不确定是不是遇到了浮点数除法精度丢失的问题,导致这个除下来的结果低于预期,所以低于了单人挂机的掉宝率)
上述说的这些问题,都是程序开发之初就确定的架构上的疏忽,而这又延伸到下一个问题:各功能系统缺乏一个架构性的规划。
组队的掉落率除以人数也是一个很瞎的写法,一般游戏在组队的掉宝上,会做一个队伍的临时奖池,获得金币道具先放进这个奖池在按照机率(或者按序)去分配;这游戏倒好,没做!上线了发现组队平白得到了五倍打宝率,再赶紧暴力将掉落率除以人数。
(我不确定是不是遇到了浮点数除法精度丢失的问题,导致这个除下来的结果低于预期,所以低于了单人挂机的掉宝率)
上述说的这些问题,都是程序开发之初就确定的架构上的疏忽,而这又延伸到下一个问题:各功能系统缺乏一个架构性的规划。
4. 各种系统架构性问题:
例如:
(1.) 地形系统:
某些需要靠跳跃才能通过的地形障碍,很显然并没有一个计算地形高低落差等相关函数库去处理,而是很单纯的对这个地形障碍物做判断角色状态决定是否让角色通过,所以才出现了用滚的通过原本要用跳的才能过去的地形,并且绝大多数的地形高低差是不能跳过去的,跳跃功能形同虚设,只是角色「看起来」跳而已。
(烂code的特色之一就是「看起来是这么回事,但实际逻辑根本不是那样」)
(2.) 锁定系统:
一样是个形同虚设的功能,因为技能按下去的时候是优先判断方向键的方向来决定施法/攻击方向的。
(3.) 地图系统:
像是混沌领域、下水道等地图无法从世界地图上找到,且世界地图就只有两层,我估计都是前端工程师写死的,并没有办法直接按照现有的地图结构直接创建树状数据来呈现。换句话说,未来如果出了任何一个新地点,只要工程师没有开code加,就不会显示;而不是只要有新地图,就可以自动显示在相对位置上。
(4.) 任务通知:
通知机制不是按照有没有可以接取的名声任务去做提示,而是通过了某个任务后就提示可接取新的名声任务,所以才导致玩其他职业的时候重复通知的问题。
(1.) 地形系统:
某些需要靠跳跃才能通过的地形障碍,很显然并没有一个计算地形高低落差等相关函数库去处理,而是很单纯的对这个地形障碍物做判断角色状态决定是否让角色通过,所以才出现了用滚的通过原本要用跳的才能过去的地形,并且绝大多数的地形高低差是不能跳过去的,跳跃功能形同虚设,只是角色「看起来」跳而已。
(烂code的特色之一就是「看起来是这么回事,但实际逻辑根本不是那样」)
(2.) 锁定系统:
一样是个形同虚设的功能,因为技能按下去的时候是优先判断方向键的方向来决定施法/攻击方向的。
(3.) 地图系统:
像是混沌领域、下水道等地图无法从世界地图上找到,且世界地图就只有两层,我估计都是前端工程师写死的,并没有办法直接按照现有的地图结构直接创建树状数据来呈现。换句话说,未来如果出了任何一个新地点,只要工程师没有开code加,就不会显示;而不是只要有新地图,就可以自动显示在相对位置上。
(4.) 任务通知:
通知机制不是按照有没有可以接取的名声任务去做提示,而是通过了某个任务后就提示可接取新的名声任务,所以才导致玩其他职业的时候重复通知的问题。
结论
一周体验下来,可以感受到这款游戏的代码到处飘着偷懒的味道,要改善似乎得大规模地去重写,并且得请资深一点的来改,但这感觉不太可能。
以上~
以上~
弃坑啰,大家掰掰~~~