我的动画的缓动功能不起作用

Easing functions for my animation not working

我不是最擅长数学的,我有点想猜测如何为我的动画实现它。但目前它不起作用,我相信我误解了如何为我的动画执行缓动功能。

我有一个对象代表一个平面,在我的 canvas 上它具有以下属性:

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    
}

问题是飞机在跑道上飞向目的地时没有减速。它只是保持非常缓慢。

我是否将我的数学与缓动函数的工作原理混淆了?

这里有一些非常简单的缓入缓出公式,你可能会觉得有用。

  // accelerating from zero velocity
  function easeIn(t)
  {
    return t*t
  }

  // decelerating to zero velocity
  function easeOut(t) 
  { 
    return t*(2-t) 
  }

所以你可以像这样使用它们:

function ease(easeDelta,accelerateBool){
    if(accelerateBool){
          // accelerating
          return (easeDelta * easeDelta);
    } else {
         //decelerating
          return ((easeDelta*(easeDelta - 2)));
        }

}