2009-07-28 4 views
0

У меня возникла проблема с прослушиванием события, отправленного из дочернего класса, и я не знаю почему?Проблема Flash AS3 с eventListener

У меня есть к классам: класс 1, ведьма рисует прямоугольник и отправляет пользовательское событие

пакет { импорт flash.display. ; импорт flash.events.; импорт flash.text. *;

public class clase1 extends Sprite 
{ 
    private var labelField:TextField; 
    public function clase1(label:String = "buttono") { 
     // draw the background for the button. 
     graphics.beginFill(0x3366CC); 
     graphics.drawRect(0, 0, 100, 30); 
     // store the label as the button’s name. 
     name=label; 
     // create a TextField to display the button label. 
     labelField = new TextField(); 
     // ensure clicks are sent from labelField rather than the button. 
     labelField.mouseEnabled=false; 
     labelField.selectable=false; 
     labelField.text=label; 
     labelField.x=10; 
     labelField.y=10; 
     labelField.width=80; 
     labelField.height=20; 
     addChild(labelField); 
     dispatchEvent(new Event("Hello",true)); 
    } 


} 

}

класс 2, ведьма рисует еще один прямоугольник и прослушивает событие

пакет { импорт flash.display. ; импорт flash.events.; импорт flash.text. *;

public class clase2 extends Sprite { 
    private var labelField:TextField; 
    public function clase2(label:String = "buttono") { 
     // draw the background for the button. 
     graphics.beginFill(0xFFFCCC); 
     graphics.drawRect(200, 0, 100, 30); 
     // store the label as the button’s name. 
     name=label; 
     // create a TextField to display the button label. 
     labelField = new TextField(); 
     // ensure clicks are sent from labelField rather than the button. 
     labelField.mouseEnabled=false; 
     labelField.selectable=false; 
     labelField.text=label; 
     labelField.x=210; 
     labelField.y=10; 
     labelField.width=80; 
     labelField.height=20; 
     addChild(labelField); 
     addEventListener("Hello",eventHandler,true); 

    } 
    function eventHandler(event: Event) 
    { 
     trace("event received "); 
    } 
} 

}

и на FLA У меня есть

импорта clase1;

var c1: clase1 = new clase1();

импорт clase2;

var c2: clase2 = new clase2();

addChild (c2);

c2.addChild (c1);

, что делает c2 родителем c1, но не появляется сообщение, почему?

Thankyou

ответ

0

Только быстрый взгляд, это выглядит как c1 собирается уволить событие от его конструктора, прежде чем с2 когда-либо созданных и добавляет прослушиватель событий. Попробуйте запустить событие из другого метода в c1, и вы можете вызвать этот метод после вызова c2.addChild (c1).

Если я изменить код только немного, я могу видеть это событие уволят

public function clase1(label:String = "buttono") { 
     name=label; 
     labelField = new TextField(); 
     labelField.text=label; 
    } 

    public function drawRect():void { 
     // draw the background for the button. 
     graphics.beginFill(0x3366CC); 
     graphics.drawRect(0, 0, 100, 30); 
     labelField.mouseEnabled=false; 
     labelField.selectable=false; 
     labelField.x=10; 
     labelField.y=10; 
     labelField.width=80; 
     labelField.height=20; 
     addChild(labelField); 
    dispatchEvent(new Event("Hello",true)); 
    } 

А затем в главном приложении

public function test():void { 
    var c1:clase1 = new clase1(); 
    var c2:clase2 = new clase2(); 

    c2.addChild(c1); 
    c1.drawRect(); 
    } 
+0

Спасибо !!!!!! действительно, я изо всех сил пытался справиться с этим делом весь день – 2009-07-28 20:12:28

0

я с другой проблемой, но я думайте, что он идет по тем же линиям, что и эта нить. По какой причине мой прослушиватель событий не срабатывает. Я знаю, что мой объект создается, потому что я могу видеть «добавление слушателя» в выход. Вот мой код.

package com.wsh.savage.world { 

import com.wsh.savage.world.WorldManager; 

import flash.events.Event; 
import flash.events.EventDispatcher; 

public class WorldState extends EventDispatcher{ 

    //constants defining worlds state 
    private const STATE_STARTING:uint = 0; 
    private const STATE_RUNNING:uint = 1; 
    private const STATE_PAUSED:uint = 2; 
    private const STATE_DESTROYING:uint = 3; 

    //an instance of the manager of all world states 
    private var m_worldManager:WorldManager;  

    //keeps track of what state the WorldState is in 
    private var m_stateStatus:uint; 


    /** 
    * Constructor starts the state up 
    */ 
    public function WorldState(manager:WorldManager) { 
     //set flag that we are creating a world state 
     m_stateStatus = STATE_STARTING; 

     m_worldManager = manager; 
     this.addEventListener(Event.ENTER_FRAME,enterFrameListener,false,1,true); 
     trace('listener added'); 

     //set the flag that the state is now running 
     m_stateStatus = STATE_RUNNING; 
    } 

    protected function enterFrameListener(event:Event){ 
     trace('event fired'); 
     if(m_stateStatus == STATE_RUNNING){ 
      trace('running'); 
      m_worldManager.getKeyboardManager().getKeyStatus(40); 
     } 
    } 
} 

Спасибо за помощь!

Смежные вопросы