我目前正在创建一个基于2D平铺图的塔防游戏。
游戏循环基于HTML5-API requestAnimationFrame,因此我使用基于时间的动画。
现在,问题是,如何有效地检查碰撞?如果三角洲太高,子弹可能会跳到敌人身后而不会引发碰撞。 每个子弹和敌人都可以有不同的移动速度。
我到目前为止找到的唯一可能的解决方案是实施一个“固定时间步物理”,感觉有点笨拙。还有其他解决方案吗?
我想一些适合这种主题的关键字/算法已经有很多帮助了!
答案 0 :(得分:0)
在每个更新周期中绘制一条跟随子弹轨迹的线。同时为可能使用相同方法移动的任何目标绘制一条线,如果线相交则发生碰撞(也检查静止目标)。
即。将线条的向量设置为每个更新周期的项目符号lastPosition
的项目符号currentPosition
,测试此线段沿着其路径的每次碰撞更新。
答案 1 :(得分:0)
以Matthew Pigram的回答为基础:
除了画线as illustrated by Lizzaran92和测试交点外,还需要计算该帧内交点的“时间”,以避免错误碰撞。
例如,如果两条线都以线性速度运行,如果线A与线的50%相交而线B以20%相交,那么它们可能永远不会相撞。您可以设置阈值,例如相互之间的10%,以表示发生碰撞。
答案 2 :(得分:0)
其他答案指向正确的方向。您可以使用线交叉方法。在大多数情况下,它是enaugh,因为这种“错误的碰撞”和真正的碰撞之间的差异很小。但是,如果你看到它似乎没有现实。你可以使用交叉点。
你有2个物体,有速度,两者的起点和终点。有了这些信息,您可以:
如果差异小,那么您的容差就会发生碰撞 发生了。
请注意,这可能对性能有害,所以只有在真的有必要时才使用它!