开发者

Problems with listening for an event in child object in Actionscript

开发者 https://www.devze.com 2022-12-23 11:57 出处:网络
I have two classes. The first one (the starting class): package { import flash.display.Sprite; import flash.events.KeyboardEvent;

I have two classes. The first one (the starting class):

package
{
 import flash.display.Sprite;
 import flash.events.KeyboardEvent;
 import tetris.*;

 public class TetrisGame extends Sprite
 {

  private var _gameWell:Well;

  public function TetrisGame()
  {    
   _gameWell = new Well();
   addChild(_gameWell);
  } 
 }
}

The second:

package tetris
{
 import flash.display.Sprite;
 import flash.events.KeyboardEvent;

 public class Well extends Sprite
 {

  public function Well()
  {
   super();

   addEventListener(KeyboardEvent.KEY_DOWN, onKeyboard);
  }

  private function onKeyboard(event:KeyboardEvent):void
  {
   //some code开发者_如何学运维 is here
  }


 }
}

But when I press any buttons on my keyboard, the child class Well doesn't have any reaction. What's the problem?


OK, I get it! =))

I should set focus on the child sprite so it can listen for keyboard events.

package
{
    import flash.display.Sprite;
    import flash.events.KeyboardEvent;
    import tetris.*;

    public class TetrisGame extends Sprite
    {

        private var _gameWell:Well;

        public function TetrisGame()
        {    
            _gameWell = new Well();
            addChild(_gameWell);

            stage.focus = _gameWell;
        } 
    }

}


Or as an alternative; add the event listener to the stage, so it doesn't depend on the Well having focus.

package tetris
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;

    public class Well extends Sprite 
    {

        public function Well():void 
        {
            super();

            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyboard);
        }

        private function onKeyboard(event:KeyboardEvent):void
        {
            //some code is here
        }
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号