簡體   English   中英

為 Sprite 捕獲鍵盤輸入的問題

[英]problem capturing keyboard input for Sprite

我試圖在我的 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 + ")");
}

即使 Sprite object 有焦點,我也從未見過 reportKeyDown 被執行。 知道問題是什么嗎? 謝謝,-V

我最近回答了一個類似的問題 正如 Flextras 所提到的,通常不接受鍵盤輸入的控件不會調度鍵盤事件。

正如 J_A_X 所提到的,您可以將 eventListener 添加到KeyboardEvent.KEY_DOWN事件的頂級應用程序,然后檢查那里的組合鍵。 這篇文章

<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>

鍵盤事件僅從接受用戶輸入的控件(例如 TextInput)分派。 這在文檔中有點令人困惑; 因為大多數 Flex 組件上都列出了這些事件。 您的方法看起來不錯,您只需要在 Sprite 中分配一些鍵盤事件即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM