リプタクのもう覚えられません
Google
Web サイト内
topmemo ▶ dispatchでイベント送信サンプル

ActionScript

dispatchでイベント送信サンプル

Adobe Flash CS3 詳細!ActionScript3.0入門ノート2 大重美幸 著のサンプルを参考にしたサンプル。
dispatchEvent()メソッドでイベント発生を送信させるサンプル。

リンケージシンボルのアニメーションタイムラインの最後にdispatchEvent()メソッドを記述し、アニメーション再生が終わると次のイベントを発生させるサンプル。

JavaScriptを有効にし、最新のFlashPlayerをインストールお願いしますGet Adobe Flash player


リンケージシンボルの最終アクションフレーム

stop();
dispatchEvent(new Event("footDone"));


Main.as(カスタムクラス)

package{
	import flash.display.MovieClip;
	import flash.geom.Rectangle;
	import flash.geom.Point;
	import flash.events.Event;
	
	public class Main extends MovieClip{
		
		//プロパティ
		var stageRect:Rectangle;//矩形領域
		var center:Point;
		
		//コンストラクタ
		public function Main(){
			stageRect = new Rectangle(0,0,stage.stageWidth,stage.stageHeight);
			center = new Point(stage.stageWidth/2,stage.stageHeight/2);
			make1stMc();
		}
		
		//最初の1つ
		function make1stMc(){
		
			//リンケージシンボルからインスタンスを作成
			var foot_mc:Foot = new Foot();
			foot_mc.rotation = Math.random()*360;
			foot_mc.x = center.x;
			foot_mc.y = center.y;
			addChild(foot_mc);
			
			//mcに仕込んであるイベント
			foot_mc.addEventListener("footDone",onFootDone);
		}
		
		//アニメーションが終了したら
		function onFootDone(e:Event):void{
			var my_mc:MovieClip = e.target as MovieClip;//mcの代入
			my_mc.removeEventListener("footDone",onFootDone);//リスナー解除
			nextMc(my_mc);//MCを引数として渡す
			my_mc.addEventListener(Event.ENTER_FRAME,onFadeOut);
		}
		
		//次のMC
		function nextMc(now_mc:MovieClip):void{
			var angle:int;
			var pt:Point = new Point(60,0);
			
			//MCの前方位置をグローバル座標に変換する
			var gPt:Point = now_mc.localToGlobal(pt);//★★★★★★★★★★
			
			//座標がステージ領域にあるか?
			if(stageRect.containsPoint(gPt)){//★★★★★★★★★★
				angle = Math.random()*180-90 + now_mc.rotation;
			}else{
				//ステージ中心座標への角度
				angle = Math.atan2(center.y-gPt.y,center.x-gPt.x)*360/2/Math.PI;
			}
			
			//リンケージシンボルからインスタンスを作成
			var foot_mc:Foot = new Foot();
			foot_mc.x = gPt.x;
			foot_mc.y = gPt.y;
			foot_mc.rotation = angle;
			addChild(foot_mc);
			
			//mcに仕込んであるイベント
			foot_mc.addEventListener("footDone",onFootDone);
		}
		
		//フェードアウト処理
		function onFadeOut(e:Event):void{
			var my_mc:MovieClip = e.target as MovieClip;
			
			if(my_mc.alpha > 0){
				my_mc.alpha -=0.02;
			}else{
				my_mc.removeEventListener(Event.ENTER_FRAME,onFadeOut);//メソッド終了
				removeChild(my_mc);//ステージから削除
				my_mc = null;//メモリ削除
			}
		}
	}
}


/*
メモ

全体の流れ
ステージ中央にインスタンス配置
↓
リンケージシンボルのアニメーション終了を受信→フェードアウトと消去処理
↓↑
次のインスタンス配置

その他
ステージ領域(矩形領域)からはみ出した場合は中央へ向かって配置させる
*/


サンプルをダウンロード

last update 2009.8.12
参考・出典等
「Adobe Flash CS3 詳細!ActionScript3.0入門ノート2 大重美幸 著」

▲page top

topmemogalleryblogtestaboutlinksmail
Copylight(C)2008-2009 Riptac. All Rights Reserved.