Hi Mike,
You can easily achieve this with the EventDispatcher & Delegate classes like this:



import mx.events.EventDispatcher;
class cMyMenu{

  // let's declare static vars for menu states/options
  public static var OPTION1_EVENT:String = "onOption1";
  public static var OPTION2_EVENT:String = "onOption2";

  // mix-ins functions of EventDispatcher
  private function dispatchEvent:Function;
  private function removeEventListener:Function;
  public function addEventListener:Function;

  // menu buttons
  private var button1:MovieClip;
  private var button2:MovieClip;

  // constructor
  public function cMyMenu(){
    // do the mix-in
    EventDispatcher.initialize(this);
    init();
  }

  public function onLoad():Void {
    // let's wire buttons events with functions and proper scope
    button1.onRelease = Delegate.create(this, this.onButton1Click);
    button2.onRelease = Delegate.create(this, this.onButton2Click);
  }

  private function onButton1Click():Void {
    // do some menu graphic things like disabling button1, etc...
    button1.enabled = false;
    button2.enabled = true;
    dispatchEvent({type:OPTION1_EVENT, target:this});
  }
  private function onButton2Click():Void {
    // do some menu graphic things..
    button2.enabled = false;
    button1.enabled = true;
    dispatchEvent({type:OPTION2_EVENT, target:this});
  }
}


import mx.utils.Delegate;
class cMyGame {
  private var menu:cMyMenu;

  public function cMyMenu(){
    // let's listen to menu events
    menu.addEventListener(cMyMenu.OPTION1_EVENT, this);
    menu.addEventListener(cMyMenu.OPTION2_EVENT, this);
  }

  // implements the default event handler called by EventDispatcher
  // but we could have create 2 functions named :
  // onOption1() for button1 menu event...
  // onOption2() for button2 menu event...
  private function handleEvent(event:Object):Void {
    var type:String = event.type;
    switch(type) {
      case cMyMenu.OPTION1_EVENT:
        // do some stuff here (disable or load a movie...)
      break;
      case cMyMenu.OPTION2_EVENT:
        // do some other stuff (play sound...)
      break;
    }
  }
}

For more options & understandings :
http://www.gskinner.com/blog/archives/000023.html
http://www.osflash.org/flashcoders/as2
http://www.person13.com/articles/proxy/Proxy.htm
http://www.adobe.com/devnet/flash/articles/eventproxy.html
http://www.actionscript.org/tutorials/beginner/the_delegate_class/index.shtml


mike cann a écrit :
Hi all,

Im kinda new to the whole event dispatching and listening way of doing
things that the v2 components have introduced me to and would like some
advice on how to go about coding this situation:

Suppose i have a game which is represented by a class cMyGame and within
there i have have my main menu system called cMyMenu. Some code:


class cMyGame
{
   private var myMenu;

   function cMyGame()
   {
       myMenu = new cMyMenu();
   }
}


class cMyMenu
{
   function cMyMenu()
   {
   {
}


Okay now suppose that inside my menu class i have a load of button
componants to represent the different menu options. When a user clicks one
of the menu options i would like the game to then destroy the main menu (or
atleast hide it) and then go to the option that the user clicked on.

What i would like to know if how the menu system should tell the cMyGame
what to do if the user clicked a button. As i see it there are a coupple of
ways, i could pass a reference to the cMyGame into the constructor then just
call it like so:

class cMyMenu
{

   private var myParent:cMyGame;

   function cMyMenu(parent:cMyGame)
   {
       myParent = parent;
   {

   function onMenuOption1Released()
   {
       myParent.doSomething();
   }
}

Or the alternative is to use events and listeners so that the game can
listen to events fired by the menu class.

I know this seems like a very basic problem but it is at the core of my
fundemental understanding of how you should scope your project. So if anyone
could advise me on the best programming practice i should be using it would
be greatly appreciated, thanks :)

Mike
_______________________________________________
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com

_______________________________________________
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com

Reply via email to