我有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
,以确保循环不会永远运行?假设distance/velocity/max可以是任何你不能改变的数字。