我有 3 个值来确定对象的运动:velocity
、acceleration
和maxVelocity
。我还有一个distance
值来确定它们与目标的接近程度(基本上是 X)。此代码运行每一帧以确定基于 3 个值的实际移动:
var velocityDelta = (Math.max(Math.min(velocity + (acceleration * 0.016), maxVelocity), -maxVelocity) - velocity) / 2;
velocity += velocityDelta;
var delta = velocity*0.016;
velocity += velocityDelta;
distance -= delta;
如果这velocityDelta
有点令人困惑,那基本上是这样的:
velocityDelta = velocity + (acceleration * 0.016);
if (velocityDelta > maxVelocity) velocityDelta = maxVelocity;
else if (velocityDelta < -maxVelocity) velocityDelta = -maxVelocity;
velocityDelta = (velocityDelta - velocity) / 2;
现在,假设您只能更改 的值acceleration
,有没有办法计算您需要的加速度以确保distance
最终准确为 0?在运行上述代码的其中一个帧中的含义,distance - delta == 0
. 所以假设代码如下所示:
var distance = 300.5;
var velocity = 125.86;
var maxVelocity = 300;
while (distance != 0) {
acceleration = ?
var velocityDelta = (Math.max(Math.min(velocity + (acceleration * 0.016), maxVelocity), -maxVelocity) - velocity) / 2;
velocity += velocityDelta;
var delta = velocity*0.016;
velocity += velocityDelta;
distance -= delta;
}
你会投入什么价值acceleration
来确保循环不会永远运行?假设距离/速度/最大值可以是您无法更改的任何数字。