forked from: forked from: flash on 2010-2-11

by sheep forked from forked from: flash on 2010-2-11 (diff: 5)
軌跡をたどる
♥0 | Line 86 | Modified 2010-02-11 19:07:01 | MIT License
play

ActionScript3 source code

/**
 * Copyright sheep ( http://wonderfl.net/user/sheep )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/kMid
 */

// forked from sheep's forked from: flash on 2010-2-11
//軌跡をたどる
// forked from sheep's flash on 2010-2-11
package{
	import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.filters.GlowFilter;
    import flash.geom.Point;
    
    
    [SWF(width="465",height="465",backgroundColor="0x000000",frameRate="30")]
    public class SheepBook extends Sprite{

    		private var _ball:Sprite;
    		private var _timeGage:Sprite;
    		private var _locus:Sprite;
    		
    		private var _startX:Number=0;//x軸のスタート
    		private var _endX:Number=stage.stageWidth;//xのエンド位置
    		private var _startY:Number=stage.stageHeight/2;//Yのスタート位置
    		private var _frameCount:uint=0;//再生ヘッド(フレーム数カウント用の変数)
    		private var _frameCountLimit:uint=150;//コマ数(最終フレームの位置)
    		private var _animationFrames:Array;//フレーム格納用の配列
    		
    		public function SheepBook(){
    			init();
    		}
    		
    		public function init():void{//初期化メソッド
    			_animationFrames=generateAnimationFrames();//アニメーションフレームの生成
    			
    			_ball=new Sprite();//このコードで唯一のグラフィックオブジェクト。画面に表示されるボールです。*************
    			_ball.graphics.lineStyle(1,0x00FFFF);
    			_ball.graphics.beginFill(0x00FFFF,0.2);
    			_ball.graphics.drawCircle(0,0,5);
    			_ball.graphics.endFill();
    			_ball.x=startX;
    			_ball.y=startY;

    			
    			_timeGage=new Sprite();//画面下部のゲージ用Sprite
    			_timeGage.graphics.beginFill(0xFFFFFF,0.5);
    			_timeGage.graphics.drawRect(0,0,stage.stageWidth,3);
    			_timeGage.graphics.endFill();
    			_timeGage.x=-1;
    			_timeGage.y=stage.stageHeight-3;
    			
    			_locus=new Sprite();//軌跡表示用Sprite
    			
    			_ball.filters=[new GlowFilter(0x00FFFF,1,16,16,2,2)];
    			
    			addChild(_locus);
    			addChild(_timeGage);
    			addChild(_ball);//ballを登録
    			
    			stage.addEventListener(MouseEvent.MOUSE_DOWN,startRec);
    			stage.addEventListener(MouseEvent.MOUSE_UP,stopRec);
    			
    			updateLocus();//軌跡の初期化
    			
    			start();//レンダリング開始
    		}
    		
    		private function generateAnimationFrames():Array{
    			var tmp:Array=new Array();//出力用の一時的な配列
    			var easeRatio:Number=0.1;//イージングの比率
    			var tmpX:Number=_startX;
    			var tmpY:Number=_startY;
    			for(var i:uint=0;i<_frameCountLimit;i++){
    				tmpX+=(_endX-tmpX)*easeRatio;
    				tmp.push(new Point(tmpX, tmpY));
    			}
    			return tmp;
    		}
    		
    		private function render(e:Event):void{
    			if(_frameCount < _frameCountLimit){
    				_ball.x+=(_animationFrames[_frameCount].x-_ball.x)/4;
    				_ball.y+=(_animationFrames[_frameCount].y-_ball.y)/4;
    			}else{
    				//stop();//アニメーション終了
    			_frameCount=0;
    			}
    			_timeGage.width=(_frameCount/_frameCountLimit)*stage.stageHeight;
    			_frameCount++;
    		}
    		
    		public function start():void{addEventListener(Event.ENTER_FRAME,render);};
    		public function stop():void{removeEventListener(Event.ENTER_FRAME,render);};
    		
    		private function startRec(e:Event):void{addEventListener(Event.ENTER_FRAME,recMouse);};
    		private function stopRec(e:Event):void{removeEventListener(Event.ENTER_FRAME,recMouse);};
    		
    		private function recMouse(e:Event):void{
    			if(_frameCount < _frameCountLimit){
    				_animationFrames[_frameCount].x=mouseX;
    				_animationFrames[_frameCount].y=mouseY;
    				updateLocus();
    			}
    		}
    		
    		private function updateLocus():void{
    			_locus.graphics.clear();
    			_locus.graphics.lineStyle(1,0xFFFFFF,0.2);
    			for(var i:uint=0;i<_frameCountLimit;i++){
    				_locus.graphics.drawCircle(_animationFrames[i].x,_animationFrames[i].y,2);
    			}
    		}
    }
}

Forked