イージング処理

アニメーションの中で、物の動きの加速度を調整すること(イージング)の練習。010307番をforkしてやってみる。イージング処理の部分を、スタート時と終了時に動作が遅くなるようにしてみた。つまり、中間地点で加速度の向きが逆になる。

// forked from Murai's #1 LikeATimeLine WonderflBook Interactive2
package {
	
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.filters.GlowFilter;
	
	/*
	@author Takashi Murai(KAYAC)
	*/
	
	[SWF(width="465",height="465",backgroundColor="0xAA55bb",frameRate="30")]
	public class WonderflBook extends Sprite {
		
		private var _ball:Sprite;
		private var _startX:Number=0;
		private var _endX:Number=stage.stageWidth;
		private var _frameCount:uint=0;
		private var _frameCountLimit:uint=50;
		private var _animationFrames:Array;
		
		public function WonderflBook(){
			init();
		}
		
		public function init():void{
			_animationFrames=generate_animationFrames();
			
			_ball=new Sprite();
			_ball.graphics.lineStyle(1,0x00FFFF);
			_ball.graphics.beginFill(0x00FFFF,0.2);
			_ball.graphics.drawCircle(0,stage.stageHeight/2,5);
			_ball.graphics.endFill();
			
			_ball.filters=[new GlowFilter(0x00FFFF,1,16,16,2,2)];
			addChild(_ball);
			
			start();
		}
		
		private function generate_animationFrames():Array{
			var tmp:Array=new Array();
			var easeRatio:Number=0.2;
			var tmpX:Number=_startX;
			for(var i:uint=0;i<_frameCountLimit;i++){
				if (tmpX >=stage.stageWidth*0.5) {
				  tmpX+=(_endX-tmpX)*easeRatio;  //最後を遅く
				}
				else {
				  tmpX+=(tmpX-_startX+1)*easeRatio;//最初は遅く
				}
				tmp.push(tmpX);
			}
			return tmp;
		}
		
		private function render(e:Event):void{
			if(_frameCount < _frameCountLimit){
				_ball.x=_animationFrames[_frameCount];
			}else{
				stop();
                //_frameCount=0;とすると無限ループ
			}
			_frameCount++;
		}
		
		public function start():void{addEventListener(Event.ENTER_FRAME,render);};
		public function stop():void{removeEventListener(Event.ENTER_FRAME,render);};
	}
}

背景色とコメントを付けた部分しか、オリジナルのコード(このコードはアニメーションの書き方がよく分る)から変更していない。再生すると円が移動していく。GlowFilterでグロー処理しているので、輪郭がボヤけているのだな。