我数学不是最好的,我有点想猜测如何为我的动画实现这个。但目前它不起作用,我相信我误解了如何为我的动画做缓动功能。
我有一个表示平面的对象,在我的画布上具有以下属性:
Current Velocity = obj.velocity
Braking Distance = obj.stopDist
Current Position = obj.posX & obj.posY
Destination = obj.destX & obj.destY
所以我然后结合数学来尝试让飞机降落在带有缓动功能的跑道上,这样即使它不是像这样的现实世界物理,它在视觉上看起来也不错:
function ease(easeDelta,accelerateBool){
if(accelerateBool){
// accelerating
return (easeDelta * easeDelta * easeDelta);
} else {
//decelerating
return ((easeDelta--) * easeDelta * easeDelta + 1);
}
}
function InRange(delta, minValue, maxValue){
var range = (maxValue - minValue);
var valueInRange = (range * delta);
var finalValue = (valueInRange + minValue);
return finalValue;
}
function landing(){ //part of animation loop
var delta = new Date().getTime() - obj.timer, //ms since previous frame
vectorX = obj.destX - obj.posX,
vectorY = obj.destY - obj.posY,
normal = Math.sqrt(vectorX*vectorX + vectorY*vectorY), //distance to destination
targetSpeed = 20,
easeDelta = (normal / obj.stopDist),
newSpeed = InRange(ease(easeDelta,false), obj.velocity, targetSpeed),
distance = delta * newSpeed;
obj.posX += (distance * vectorX);
obj.posY += (distance * vectorY);
obj.timer = new Date().getTime(); //ready for next frame
}
问题是这架飞机在驶向目的地的跑道上并没有减速。它只是保持非常缓慢。
我是否将我的数学与缓动函数的工作方式混淆了?