flash - 键盘事件 as3 不工作

标签 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");
    }
  }
}

最佳答案

使用键盘命令需要监听键盘事件。此过程与在 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");
   }
  }
}

关于flash - 键盘事件 as3 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7630620/

相关文章:

actionscript-3 - 安全错误 : Error #2152: Full screen mode is not allowed.

actionscript-3 - 场景结束后停止音乐

c++ - 如何将 Crypto++ 库移植到 AIR Native Extension for Windows?

flash - 用最大的 "zoom"将固定大小的矩形包装在一个圆内

ios - 在影片剪辑中嵌入 StageText?

apache-flex - Flash Builder 4 - Flash Player 无法连接到调试器

actionscript-3 - 为什么不导入此类? AS3

Flash AS2 (CS4) - setInterval 导致 for 循环不起作用

apache-flex - 摆脱 mx : in your Flex code? 是不是一个坏主意

apache-flex - 该函数在评估之前会被垃圾收集吗?