对于我正在研究的2D游戏,我想知道一个射弹何时到达其最接近目标的位置。
射弹是每帧移动一个常数dx,dy的点。 目标是另一个点,其相对于射弹的速度足够慢以至于被认为是静止的。 当它(大约)接近目标时,我希望抛射物爆炸。
计算这个的好方法是什么?
绝对精度并不重要,这是已在服务器上解析的事件的客户端模拟。我更喜欢一种像素完美的快速而简单的算法。
答案 0 :(得分:5)
答案 1 :(得分:2)
计算与目标相交的路径的法线。法线和路径的交点将是目标路径上的最近点。
答案 2 :(得分:2)
跟踪之前的距离,并检查距离开始增加的第一时刻。
if ((currentDistance==0) || (currentDistance > previousDistance)) Explode()
只是这很简单,因为路径几何是微不足道的(即一条直线),但它的工作正常。
当目标比你描述的更快时,这还有一个额外的好处,只要两个轨道都是直的(或者至少是轻微的弯曲)。
限制,与爆炸的“大小”相比,步长需要小,否则这将无法正常工作。在这种情况下,您需要预先计算 next 距离......
答案 3 :(得分:1)
好像你的'弹丸'基本上是直线移动。
可视化的一个简单方法是变换2D平面,使线变为x轴。这将涉及arctan(dy / dx)的旋转。
将相同的变换应用于相关点,并获取y坐标。
如果您愿意,可以手动完成并弄清楚,但游戏API应该已经非常适合这一点。
答案 4 :(得分:0)
你可以使用毕达哥拉斯定理,它只使用(a)2 +(b)2 =(c)2公式。因此,您的距离将等于产品的SQUARE ROOT。这是一篇关于如何使用网格上的点实现它的好文章。