您当前的位置: 首页 >  动画

Jave.Lin

暂无认证

  • 1浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

AS3 缓动加速动画

Jave.Lin 发布时间:2013-11-08 17:15:04 ,浏览量:1

我们平时写的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)  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();
	}
}

该代码可直接运行。

关注
打赏
1664331872
查看更多评论
立即登录/注册

微信扫码登录

0.0390s