关于一个动作和碰撞判定的问题

正在实现一个STG游戏,遇到了这样一个问题
目前子弹大部分使用自带的MoveTo或者MoveBy动作进行移动,我看了一下关于动作实现的源码,动作的update和step是基于时间完成的,指定了duration之后,按照时间进行移动,每帧根据相隔帧的时间等信息计算出移动位置,保证在duration内移动到正确的位置。所以我的duration是使用距离除以时间的方法计算出来,使得每种子弹都能按照固定速度移动。

精灵的碰撞判定由存储精灵的相关Layer对象的update进行调用,分别处理玩家和子弹,敌人和子弹,地形和子弹等相关的具体判定算法。

但是这样似乎就出现了一个问题:今天测试的时候正好做了一个别的操作发生了很严重的掉帧,但是因为子弹的动作是每帧根据按时间决定移动距离,因为掉帧,导致时间延长,所以子弹错过了玩家,未和玩家发生碰撞,直接飞到了玩家后面,所以并没有发生判定。

不知大家是否遇到过这个问题,有何解决方案呢?谢谢各位。

目前想了如下几种:
重新实现自己需要的Action,按帧运动,指定距离和每帧的固定速度进行移动,我比较倾向一切操作都是按帧计算与相隔时间dt无关的运动,但是这样一来可能实现起来较为麻烦。
更新判定方式,做更精确的判定,在例如记录子弹上一帧的位置,连线,使用线段处理碰撞。

不知有没有更好的解决办法,再次谢谢各位了。

楼主碰撞是怎么处理的?简单的碰撞框判定吗?可以考虑自己重写update函数来更新子弹坐标,达成碰撞

恩 多谢了

关于碰撞
简单的碰撞就是使用包围盒,利用Rect类提供的方法。
复杂一点的是点和多边形位置的射线判定法与引擎自带的线段碰撞组合,比如和地形的精确判定。

现在是仿照库的ActionInterval,MoveBy和MoveTo自己重写了一组移动类
这组移动类的“update”、“step”方法的相关时间间隔是写死的值,每帧“间隔时间”永远是1/60s,duration是根据两点间的距离、具体子弹类指定的每帧运动速度以及假定FPS为60的情况算出来的,然后移动类对象由具体子弹的具体移动模块进行存储和调用,这样应该就不会出现跳跃的情况了,不过子弹速度如果太快可能还是有类似的问题,所以可能还是需要更精确的判定法。