正在实现一个STG游戏,遇到了这样一个问题
目前子弹大部分使用自带的MoveTo或者MoveBy动作进行移动,我看了一下关于动作实现的源码,动作的update和step是基于时间完成的,指定了duration之后,按照时间进行移动,每帧根据相隔帧的时间等信息计算出移动位置,保证在duration内移动到正确的位置。所以我的duration是使用距离除以时间的方法计算出来,使得每种子弹都能按照固定速度移动。
精灵的碰撞判定由存储精灵的相关Layer对象的update进行调用,分别处理玩家和子弹,敌人和子弹,地形和子弹等相关的具体判定算法。
但是这样似乎就出现了一个问题:今天测试的时候正好做了一个别的操作发生了很严重的掉帧,但是因为子弹的动作是每帧根据按时间决定移动距离,因为掉帧,导致时间延长,所以子弹错过了玩家,未和玩家发生碰撞,直接飞到了玩家后面,所以并没有发生判定。
不知大家是否遇到过这个问题,有何解决方案呢?谢谢各位。
目前想了如下几种:
重新实现自己需要的Action,按帧运动,指定距离和每帧的固定速度进行移动,我比较倾向一切操作都是按帧计算与相隔时间dt无关的运动,但是这样一来可能实现起来较为麻烦。
更新判定方式,做更精确的判定,在例如记录子弹上一帧的位置,连线,使用线段处理碰撞。
不知有没有更好的解决办法,再次谢谢各位了。