键盘事件as3无法正常工作

时间:2011-10-03 02:38:06

标签: flash actionscript-3 actionscript flash-builder flash-cs5

在我弄明白之前,这让我头疼了2个小时 我决定把它贴在这里,以帮助其他人不要拔掉头发:)。

基本上这个错误是我没有从我的Flash Builder环境中接收键盘事件(使用adobe flash cs5可以看到同样的错误/问题)。我设置了stage.focus = stage,没有帮助。我添加了其他事件监听器(mouse_down,frame_enter)工作正常,我添加了MovieClip子项并听取了这些孩子的事件,仍然是同样的问题。

package
{
  public class Test extends Sprite 
  {

    public function Test() 
    {
        this.addEventListener(Event.ADDED_TO_STAGE,init);
    }

    public function init(stage:Stage):void 
    {
        this.removeEventListener(Event.ADDED_TO_STAGE,init);
        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
        stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
    }


    private function keyPressed(e:KeyboardEvent):void 
    {
        trace("keyPressed");
    }

    private function keyReleased(e:KeyboardEvent):void 
    {
        trace("keyReleased");
    }
  }
}

3 个答案:

答案 0 :(得分:3)

使用键盘命令需要收听键盘事件。此过程与在AS3中侦听任何其他事件的过程相同。您需要使用 addEventListener()方法注册 KeyboardEvent 。但是,与其他对象不同,由于键盘不必附加到项目中的任何特定对象,因此键盘事件通常在阶段中注册。在下面的代码中,stage对象注册每次按下键盘键时触发的键盘事件。

与AS2不同,在AS3中,键盘事件不是全局的。它们被发布到舞台上,它们通过显示列表显示任何显示对象具有焦点。

package
{
import flash.display.*;
import flash.events.*;

  public class Test extends Sprite 
  {
   public function Test() 
   {
     init();
   }

   public function init():void 
   {
      stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
      stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
   }


   private function keyPressed(e:KeyboardEvent):void 
   {
      trace("keyPressed");
   }

   private function keyReleased(e:KeyboardEvent):void 
   {
    trace("keyReleased");
   }
  }
}

答案 1 :(得分:2)

public function init(stage:Stage):void 

ADDED_TO_STAGE is a `listener Event` not a stage instance. 

而不是stage:Stage使用event:Event

你需要导入所需的类。

答案 2 :(得分:1)

标记改变的行。你的代码没有编译btw,检查错误日志。

package  {

import flash.display.Sprite; /// changed line
import flash.events.Event; /// changed line
import flash.events.KeyboardEvent; /// changed line


public class Test extends Sprite 
{

public function Test() 
{
    this.addEventListener(Event.ADDED_TO_STAGE,init);
    /* i like it this way
    stage ? init(null) : addEventListener(Event.ADDED_TO_STAGE,init);
    */

}

public function init(e:Event):void  /// changed line
{
    this.removeEventListener(Event.ADDED_TO_STAGE,init);
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
    stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
}


private function keyPressed(e:KeyboardEvent):void 
{
    trace("keyPressed");
}

private function keyReleased(e:KeyboardEvent):void 
{
    trace("keyReleased");
}
}

}