2013-04-14 2 views
0

Как можно добавить слушателей событий для нескольких нажатий клавиш, например, если нажаты кнопки вверх и вправо, игрок идет по диагонали в этом направлении.AS3 События на клавиатуре

ответ

3

Заканчивать следующий код, я хранить отжатый ключ в объекте, а затем анимированный спрайт с помощью объекта:

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.KeyboardEvent; 
    import flash.ui.Keyboard; 

    public class Main extends Sprite 
    { 
     private var _keys:Object = { }; 
     private var _sprite:Sprite = new Sprite; 

     public function Main():void 
     { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 
     } 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 
      // entry point 

      _sprite.graphics.beginFill(0xff0000, 1); 
      _sprite.graphics.drawRect(0, 0, 40, 40); 
      _sprite.graphics.endFill(); 
      _sprite.x = 100; 
      _sprite.y = 100; 
      addChild(_sprite); 

      stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); 
      stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp); 
      stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); 
     } 

     private function onKeyDown(e:KeyboardEvent):void 
     { 
      _keys[e.keyCode] = true; 
     } 

     private function onKeyUp(e:KeyboardEvent):void 
     { 
      _keys[e.keyCode] = false; 
     } 

     private function onEnterFrame(e:Event):void 
     { 

      if (_keys[Keyboard.UP]) 
      { 
       _sprite.y --; 
      } 

      if (_keys[Keyboard.DOWN]) 
      { 
       _sprite.y ++; 
      } 

      if (_keys[Keyboard.RIGHT]) 
      { 
       _sprite.x++; 
      } 

      if (_keys[Keyboard.LEFT]) 
      { 
       _sprite.x--; 
      } 
     } 

    } 

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