我有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可以是任何你不能改變的數字。