Search code examples
actionscript-3

How to use event Dispatch in actionscript 3.0


I tried using the event dispatch but unable to get clear view of this one, so tell me if anyone know this.

This is Sample Code but i can't understand could you explain elaborate.

  var ball:Shape = new Shape();
  ball.graphics.beginFill(0xFF0000);
  ball.graphics.drawCircle(0, 0, 30);
  ball.graphics.endFill();
  addChild(ball);

  stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
  addEventListener("myCustomEvent", myCustomEventListener);

  function mouseMoveListener(event:MouseEvent):void
  {
     dispatchEvent(new Event("myCustomEvent"));
  }

  function myCustomEventListener(event:Event):void
  {
    ball.x = stage.mouseX;
    ball.y = stage.mouseY;
 } 

Solution

  • Think about stage as a big box where magic happens. Stage knows when you resize it, when you press keyboard buttons or when you move mouse on top of it. It does extend EventDispatcher which means it can broadcast stuff (and it does!). You usually don't pay attention to it, but in this particular piece of code you have:

    stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
    
    function mouseMoveListener(event:MouseEvent):void
    {
        dispatchEvent(new Event("myCustomEvent"));
    }
    

    What's going on in here? You're curious about MOUSE_MOVE event and that's why you add listener. Now every time you move your mouse over the stage, stage is going to broadcast (dispatch) event (like : "HEY! Mouse just moved!"). And every time that happens your mouseMoveListener would be called. You can add trace(stage.mouseX, stage.mouseY); inside it and it would trace your mouse position as you move it. You could also move this code

    ball.x = stage.mouseX;
    ball.y = stage.mouseY;
    

    to that function and your ball would follow mouse cursor.



    However what you're doing is:

    dispatchEvent(new Event("myCustomEvent"));
    

    Which basically means that you're broadcasting (dispatching) an event now. What event? "myCustomEvent". Now anyone who is interested might listen for it. And somebody is indeed:

    addEventListener("myCustomEvent", myCustomEventListener);
    
    function myCustomEventListener(event:Event):void
    {
        ball.x = stage.mouseX;
        ball.y = stage.mouseY;
    }
    

    So you're basically listening for this even in the same class and when this even it being dispatched you execute myCustomEventListener function.

    Hope that's gonna make it a bit more clearer for you :)