Dengarkan Acara Khusus di Kelas Utama AS3

inilah masalah kecil saya dalam skrip tindakan. demi kesederhanaan saya mengumpulkan dua kelas kecil untuk menunjukkan masalah saya.

jadi dari RedState. Saat saya mengirimkan acara khusus, penyihir meneruskan string ke pendengar. Saya ingin mendengarkan acara ini dan mengambil string yang diteruskan di kelas root.

jika saya mendengarkan acara yang sama di kelas lain semuanya tampak baik-baik saja tetapi kelas utama tidak bereaksi :( :D

package 
{
    import assets.ButtonController;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;


    public class Main extends Sprite 
    {

        public var nameCollection:Array
        public var sManager:SceneManager
        public var cText:TempClass
        public var bManager:ButtonController;

        public var red:RedState
        public function Main():void 
        {   
            addEventListener(Event.ADDED_TO_STAGE, init);
        }
        public function init (e:Event):void {
            red = new RedState();
            addChild(red);
            addEventListener(TextDispatcher.SEND_TEXT, red_sendText);

        }

        public function red_sendText(e:TextDispatcher):void 
        {   trace ("Something")
            trace (e.url)
        }





    }

}


package  
{
    import flash.display.Sprite;

    public class RedState extends Sprite 
    {
        [Embed(source = "assets/states/red.png")]
        public var Red:Class;

        public var red:Sprite;

        public function RedState() 
        {
            red = new Sprite();
            red.addChild(new Red());
            addChild(red);
            dispatchEvent(new TextDispatcher(TextDispatcher.SEND_TEXT, "I wanna Sing!!"))

        }

    }

}

person lmetreveli    schedule 01.01.2014    source sumber


Jawaban (1)


Jika saya memahami Anda dengan benar, Anda mencoba mengirimkan TextDispatcher.SEND_TEXT dari kelas RedState. Dengan asumsi semuanya sudah diatur dengan benar, ada 2 alasan mengapa acara tersebut tidak dikirim. Yang pertama adalah Anda tidak menambahkan pendengar ke instance RedState. Itu adalah:

public function init (e:Event):void {
    red = new RedState();
    red.addEventListener(TextDispatcher.SEND_TEXT, red_sendText);
    addChild(red);
}

Menambahkan itu akan memungkinkan DispatchEvent bekerja dari RedState karena sekarang instance RedState akan mendengarkannya. Namun ada masalah lain di konstruktor RedState:

public function RedState() {
    red = new Sprite();
    red.addChild(new Red());
    addChild(red);
    //trying to dispatch here will not work
    dispatchEvent(new TextDispatcher(TextDispatcher.SEND_TEXT, "I wanna Sing!!"))
 }

Anda mencoba mengirimkan acara sebelum pendengar ditambahkan. Saat ini tidak ada objek dengan pendengar untuk acara ini sehingga tidak akan pernah dapat berjalan red_sendText().

Oleh karena itu, Anda sebaiknya melakukan sesuatu seperti ini:

public function init(e:Event):void {
    red = new RedState();
    red.addEventListener(TextDispatcher.SEND_TEXT, red_sendText);
    red.runText();
    addChild(red);
}

Dan kemudian di RedState Anda:

public function RedState() {
    red = new Sprite();
    red.addChild(new Red());
    addChild(red);
}

public function runText():void {
    dispatchEvent(new TextDispatcher(TextDispatcher.SEND_TEXT));
}

Sekarang instance RedState Anda akan mendengarkan acara tersebut sebelum Anda memanggil runText().

person Bennett Yeates    schedule 01.01.2014