2009-07-14 49 views
0

好吧,我已經嘗試了8種不同的方法來將一個關鍵事件寫入我的代碼中,並且它們都不起作用。有人可以請我告訴我,如果按shift鍵我可以移動這個球嗎?謝謝你在前進如何在ActionScript 3中編寫KEY_DOWN Handler?

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    styleName = "plain" 
    xmlns="cyanprime.*" 
    layout="absolute" 
    width="600" 
    height="400" 
    frameRate="100" 
    creationComplete="initApp()"> 

    <mx:Script> 
     <![CDATA[ 
      public function initApp():void 
      { 

       Mouse.hide(); 
       canvas.init(); 
       canvas.addEventListener(KeyboardEvent.KEY_DOWN, keyDown); 
      } 

      private function keyDown(event:KeyboardEvent):void 
      { 
       canvas.KeyDownHandler(event); 
      } 
     ]]> 
    </mx:Script> 

    <MyGameCanvas id="canvas" width="100%" height="100%" themeColor="#ff000000" /> 
</mx:Application> 

...

package cyanprime{ 

    import mx.core.UIComponent; 
    import mx.controls.Image; 
    import flash.events.*; 
    import flash.utils.*; 
    import flash.display.*; 
    import flash.ui.Keyboard; 

    public class MyGameCanvas extends UIComponent{ 
     [Embed(source="player.gif")] 
     private var playerImage:Class; 

     private var player:DisplayObject = new playerImage(); 
     private var player_x:Number; 
     private var player_y:Number; 
     private var ticker:Timer; 



     public function init():void{ 
      // set up player 
      addChild(player); 

      ticker = new Timer(10); 
      ticker.addEventListener(TimerEvent.TIMER, onTick); 
      ticker.start(); 

     } 

     public function KeyDownHandler(event:KeyboardEvent):void{ 
      if(event.keyCode == Keyboard.SHIFT) 
      player_x += 50; 
     } 

     public function onTick(evt:TimerEvent):void { 
     }  
    } 
} 

回答

3

您需要將監聽器添加到舞臺,並applicationComplete事件已發生之後,它的廣告(或在其處理)

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init()"> 
<mx:Script> 
    <![CDATA[ 

    public function init():void 
    { 
     trace('Initialization'); 
     stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);  
    } 

    private function keyDown(event:KeyboardEvent):void 
    { 
     trace(event.charCode); 
    }  
    ]]> 
</mx:Script> 
</mx:Application> 

ref