Advertisement

Decelerate a sprite

Started by January 08, 2015 03:45 AM
9 comments, last by CelticSir 10 years ago

Okay so I think i understand now.

I have set it up like this where by i can use a simple boolean to change from one ease function to the other when needs be.


{ //game loop
var delta = new Date().getTime() - obj.timer; //ms since previous frame

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;
}
		
var 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(CubicEase(easeDelta,false), obj.velocity, targetSpeed),
    distance     = delta * newSpeed;
		
obj.posX        += (distance * obj.vectorX);
obj.posY        += (distance * obj.vectorY);
obj.timer        = new Date().getTime(); //ready for next frame

}

This topic is closed to new replies.

Advertisement