【问题标题】:problem capturing keyboard input for Sprite为 Sprite 捕获键盘输入的问题
【发布时间】:2011-06-02 14:49:31
【问题描述】:

我试图在我的 UI 上捕获方形区域的键盘和鼠标事件,由 Sprite 表示。鼠标捕获有效,键盘捕获根本不起作用:

private var square:Sprite = new Sprite();
square.graphics.beginFill(0x000000, 1);
square.graphics.drawRect(0, 0, 1024, 720);
square.graphics.endFill(); 
square.buttonMode = true; 
...
square.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown);

private function reportKeyDown(event:KeyboardEvent):void 
{
trace("==>reportKeyDown: " + String.fromCharCode(event.charCode) + " (key code: " + 
event.keyCode + " character code: " +         event.charCode + ")");
}

我从来没有看到 reportKeyDown 被执行过,即使 Sprite 对象有一个焦点。 知道问题是什么吗? 谢谢, -V

【问题讨论】:

  • 您有机会尝试我建议的解决方案吗?如果有帮助,您可以通过单击我的答案旁边的 ^ 箭头来投票。如果它有助于解决您的问题,您可以通过单击我的答案旁边的复选标记图标将其标记为已接受的答案。

标签: flash apache-flex addeventlistener


【解决方案1】:

我最近回复了similar question。正如 Flextras 所提到的,通常不接受键盘输入的控件不会调度键盘事件。

正如 J_A_X 所提到的,您可以KeyboardEvent.KEY_DOWN 事件添加一个 eventListener 到顶级应用程序并在那里检查组合键。来自this article

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
 layout="absolute" creationComplete="init()">
 <mx:Script>
 <![CDATA[
    private function init():void{
     this.addEventListener(MouseEvent.CLICK, clickHandler);
     this.addEventListener(KeyboardEvent.KEY_DOWN,keyPressed);
    }
    private function clickHandler(event:MouseEvent):void {
      stage.focus = this;
    }
    private function keyPressed(evt:KeyboardEvent):void{
       if(evt.ctrlKey && evt.keyCode == 65)
             trace("CTRL A is pressed");
       if(evt.ctrlKey && evt.keyCode == 66)
             trace("CTRL B is pressed");
   }
 ]]>
 </mx:Script>
</mx:Application>

【讨论】:

    【解决方案2】:

    键盘事件仅从接受用户输入的控件(例如 TextInput)分派。这在文档中有点令人困惑;因为大多数 Flex 组件上都列出了这些事件。您的方法看起来是正确的,您只需要在 Sprite 中分配一些键盘事件即可。

    【讨论】:

    • 或者只是在舞台上听:square.stage.addEventListener(KeyboardEvent.KEY_DOWN, ...);
    • @J_A_X 如果我明白你的意思,Stage 将调度键盘事件,对吗?我不知道;这似乎是一种优越的方法。
    • Stage 将总是调度键盘事件,只要 Flash(或 Air)应用程序处于焦点 :)
    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2013-12-31
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多