许多年前,我为预算伪3D游戏编写了一些AI。我从来没有真正计算出最好的方法,这是计算一次,如果敌人现在停下来了,那敌人会去哪里。例如:
- 敌人目前位于X = 540.0。
- 敌人以每帧10像素向右移动。
- 当敌人想要停止时,它的速度将每帧降低1像素,直到达到零。
有没有一个简单的公式可以让我知道敌人完全停止时其最终位置?我最终对可以满足我的需求的偏移量进行了预先计算和硬编码,但对于速度不同的敌人,则必须分别计算。
许多年前,我为预算伪3D游戏编写了一些AI。我从来没有真正计算出最好的方法,这是计算一次,如果敌人现在停下来了,那敌人会去哪里。例如:
有没有一个简单的公式可以让我知道敌人完全停止时其最终位置?我最终对可以满足我的需求的偏移量进行了预先计算和硬编码,但对于速度不同的敌人,则必须分别计算。
Answers:
我通常同意约翰的回答。我将提供一个经过稍微修改的公式(这将在他的值上增加一个额外的V / 2):
D = V / A * (V + A) / 2
与V = 10
和A = 1
,得到D = 55
。这正是
10 + 9 + 8 + 7 + .... + 3 + 2 + 1
这是敌人的逐帧运动。
这是您执行该步骤的方式。
在进行游戏时,我遇到了完全相同的问题,这花了我一辈子才能使数学正确(出错)。所以这里是:
minDistanceToStop = 0.5 * acceleration * Math.Pow(velocityLinear() / acceleration, 2.0);
重新编写为常规数学:
(Acceleration / 2) * (linearVelocity / Acceleration)^2
在您的情况下,加速度为1,而linearVelocity为10:
(1 / 2) * (10 / 1)^2
= 50 units to stop
编辑
吉米的结果和解释都是正确的。我的公式要求您还加一半速度。
minDistanceToStop = (0.5 * acceleration * Math.Pow(velocityLinear() / acceleration, 2.0)) + (velocityLinear() / 2);
要么
((Acceleration / 2) * (linearVelocity / Acceleration)^2) + (linearVelocity / 2)
((1 / 2) * (10 / 1)^2) + (10 / 2)
= 55