最近在线上项目增加了一个赛车类小游戏,三条赛道,除了敌对的物品还有宝箱和buff。昨天开启之后今天就发现了一个严重的刷成绩的问题——玩家将客户端退到后台,过数分钟重新打开游戏,发现已经跑出很长的距离,并且没结束(一般很难跑到这么远的距离),玩家通过这样的方式一直刷游戏一直解释不了。
这个bug出现的原因有两个:一是游戏做了一个后台恢复机制,客户端退到后台之后游戏的定时器都会中止,等到重新打开客户端时一瞬间执行完后台期间需要执行的定时器;二是我在实现这个赛车类小游戏时用了两种计时模式,一种是定时器(一秒执行40次,用于刷新屏幕已经碰撞检测),一种是时间戳(buff类型的持续时间我用时间戳实现),导致了上述的刷成绩的问题。
解决方法也很简单,将时间戳替换成定时器的tick即可。