Aクラスで自作イベントが発生したとき、 Bクラスの関数を呼びたい。 そんな時の処理。
Main.as
package { import flash.display.Bitmap; import flash.events.Event; import flash.display.Shape; import flash.display.Sprite; import flash.text.TextFieldType; import flash.events.MouseEvent; [SWF(width = "465", height = "465", backgroundColor = "0x000000", frameRate = "30")] public class Main extends Sprite { ///class //private var ai:AI; //private var voice:Voice; //private var canvas:Canvas; private var temp:Temp; public function Main() { init(); } private function init():void { //ai = new AI(); //voice = new Voice(); //canvas = new Canvas(); //addChild(canvas); addEventListener(Event.ENTER_FRAME, onEnterFrame); addEventListener('twit', onEvent); temp = new Temp(); temp.addEventListener('twit', temp.onTwit); } public function onEvent(e:Event):void { trace('eventが聞こえました'); } private function onEnterFrame(e:Event):void { dispatchEvent(new Event('twit')); } } }
Temp.as
package { import flash.display.MovieClip; import flash.events.Event; public class Temp extends MovieClip { public function Temp() { addEventListener('twit', onTwit); } public function onTwit(e:Event):void { trace('きこえますTEMP'); } } }
実行結果
eventが聞こえました eventが聞こえました eventが聞こえました eventが聞こえました eventが聞こえました eventが聞こえました eventが聞こえました ...
解決策
上記のコードではTempクラス側の関数が呼ばれていない。 どうすればよいのかというと、 temp.addEventListener('twit', temp.onTwit); を addEventListener('twit', temp.onTwit); とすればいい。 AS3のイベントの渡し方は ★★★『AS3.0「関数渡しておくからなんかあったら実行して」』★★★ なのですね! @MineAP さんに助けられて解決できました!Thanks!