我有一个关卡,其中包含 2D 点,一个由用户控制,其余由所需的 AI 控制。这些点通过每秒施加一定量的力来移动,该力被推入速度并除以它们的质量,然后每秒被推入位置。速度在计算之间保持(动量)。我想要找到一种施加力的方法,以便我可以朝着特定目标移动并发生碰撞。
我尝试将指向目标的归一化向量乘以设定的力,如果两者在开始时的速度都为零,则此方法有效。不幸的是,这些点需要一个接一个地攻击多个目标,最终发生的情况是,掠食者会绕着目标盘旋,每次旋转都更靠近一些。谢谢。
总结:我需要 AI 通过在 2D 中施加力来朝着目标移动。谢谢。
回答:
设 v'
为你希望搜索者具有的速度向量。最简单的情况是,如果目标在没有加速度的情况下移动,并且你的搜索者以 v'
继续前进,它们将会相遇。(*)
现在不要仅仅以 v'
的形式添加一些动量!设 v
为你的搜索者当前的 velocity。你需要沿着 v' - v
的方向施加一个力,以将你的搜索者的速度改变为 v'
。
*) 好的,事情并没有那么简单。存在无限多个相遇点(除非目标静止不动)。确定一个相遇点可以通过选择在给定动量作用于搜索者的情况下,可以到达的最早的点来完成。
补充说明
也许你的游戏(?)如果每轮应用固定量的能量而不是固定量的动量,会变得更加真实。但这只是一个猜测。
关于质量
为了使其更真实,你可能应该让质量与半径的平方(假设一个带有圆的 2D 世界)或半径的立方(假设一个 3D 世界和一个球体)成正比。
动量 vs. 能量
动量是 v m
,而能量是 1/2 v^2 m
。当应用固定量的能量时,进一步加速快速移动的物体会变得更加困难。
实际上,为了保持固定的加速度 [m/s 每秒],你需要每单位时间不断增加的能量;而你需要每单位时间恒定的动量才能做同样的事情。
警告
如果你使其更紧密地遵循物理定律,这不一定使其看起来更真实。我的观点是,你应该两种方式都尝试一下,然后决定哪种“感觉”最好。或者,如果你对现状感到满意,就保持原样。