イージング処理
アニメーションの中で、物の動きの加速度を調整すること(イージング)の練習。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でグロー処理しているので、輪郭がボヤけているのだな。