オブジェクトの動きを決定する 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;
ここで、 の値のみを変更できると仮定すると、正確に 0 になるacceleration
ようにするために必要な加速度を計算する方法はありますか? distance
上記のコードが実行されるフレームの 1 つの間に意味があります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
ループが永久に実行されないようにするには、どのような値を設定しますか? 距離/速度/最大は、変更できない任意の数値であると仮定します。