AS3 缓动加速动画

来源:互联网 发布:赛亚人网络 编辑:程序博客网 时间:2024/05/17 22:17

我们平时写的easing缓动系数,实现都是:缓动减速运动。


那么,要实现缓动加速动动,有位Q群朋友提出这个问题,一个星期前,还想着帮忙写出来。但当时发现写不出来。

一个星期后,突然在群里又看到这个问题的出现,突然灵感一来,写出了效果,但需要两个辅助变量:


package{import flash.display.Sprite;import flash.display.StageAlign;import flash.display.StageScaleMode;import flash.events.Event;import flash.events.KeyboardEvent;/** * [description] * @author Jave.Lin * @date 2013-11-14 **/[SWF(width="1000", height="600")]public class TestMotion extends Sprite{private var ball:Ball;private var targetX:Number = 600; // 目标位置private var easing:Number = .07; // 均减、加的缓存系数private var startDistance:Number; // start distance 记录下,刚开始距离值 private var curAddDistance:Number; // 记录当前已累加过的距离值public function TestMotion(){super();stage.frameRate = 60;stage.color = 0x88888888;stage.align = StageAlign.TOP_LEFT;stage.scaleMode = StageScaleMode.NO_SCALE;ball = new Ball();addChild(ball);addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);}private function onAddedToStage(e:Event):void{stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);}private function onKeyDown(e:KeyboardEvent):void{ball.x = 100;ball.y = 100;startDistance = targetX - ball.x;curAddDistance = 0;stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);}private function onEnterFrame(e:Event):void{var t:Number;var dx:Number = targetX - ball.x;var addX:Number;// 1、缓动减速//addX = easing * dx;//addX = addX > 0 ? (addX < .25 ? .25 : addX) : (addX > -.25 ? -.25 : addX); // flash as3 最小位移单位//ball.x += addX;//if(Math.abs(dx) <= .25) // flash as3 最小位移单位//{//ball.x = targetX;//stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame);//trace("onCom");//}// 2、均加addX = easing * dx;var dx1:Number = startDistance - (targetX - (ball.x + addX)); // 反向预计值距离,假设:总距离为:100,我动了,10,那么剩90,而我这个求的正这个是dx1 = 90addX = easing * dx1;addX = addX > 0 ? (addX < .25 ? .25 : addX) : (addX > -.25 ? -.25 : addX); // flash as3 最小位移单位curAddDistance += addX;ball.x += addX;trace("addX : " + addX);trace("Math.abs(dx) : " + Math.abs(dx));if(curAddDistance >= startDistance) // flash as3 最小位移单位{ball.x = targetX;stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame);trace("onCom");}}}}import flash.display.Sprite;class Ball extends Sprite{public function Ball(){graphics.clear();graphics.beginFill(0xff0000, .5);graphics.drawCircle(0, 0, 15);graphics.endFill();}}


该代码可直接运行。

原创粉丝点击