2009-07-28 5 views
0

J'ai un problème avec l'écoute d'un événement envoyé depuis une classe enfant, et je ne sais pas pourquoi?Problème Flash AS3 avec eventListener

je dois les classes: classe 1, sorcière dessine un rectangle et envoie un paquet événement personnalisé

{ import flash.display. ; import flash.events.; import 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)); 
    } 


} 

}

classe 2, sorcière dessine un autre rectangle et écoute l'événement

package

{ import flash.display. ; import flash.events.; import 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 "); 
    } 
} 

}

et sur le fla je

clase1 d'importation;

var c1: clase1 = nouvelle classe 1();

import clase2;

var c2: clase2 = nouvelle clase2();

addChild (c2);

c2.addChild (c1);

, ce qui rend c2 parent de C1, mais aucun message apparaît, pourquoi ??

thankyou

Répondre

0

Juste un rapide coup d'œil, il semble que c1 va tirer l'événement de son constructeur avant c2 est jamais créé et ajoute l'écouteur d'événement. Essayez de déclencher l'événement à partir d'une méthode différente dans c1, et vous pouvez appeler cette méthode après avoir appelé c2.addChild (c1).

Si je modifie votre code un peu, je suis en mesure de voir l'événement soit tiré

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)); 
    } 

Et puis dans l'application principale

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

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

Merci !!!!!! vraiment, j'ai lutté avec cette chose toute la journée –

0

J'ai un autre problème, mais je pense que c'est dans le même sens que ce fil. Pour quelle raison mon écouteur d'événement ne se déclenche pas. Je sais pertinemment que mon objet est créé car je peux voir "listener added" dans la sortie. Voici mon code.

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); 
     } 
    } 
} 

Merci pour l'aide!