проблема захвата ввода с клавиатуры для Sprite - PullRequest
0 голосов
/ 02 июня 2011

Я пытаюсь захватить события клавиатуры и мыши для квадратной области в моем пользовательском интерфейсе, представленном 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

Ответы [ 2 ]

1 голос
/ 02 июня 2011

Я недавно ответил на похожий вопрос . Как упомянул 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>
0 голосов
/ 02 июня 2011

События клавиатуры отправляются только от элементов управления, которые принимают пользовательский ввод, например TextInput. Это немного сбивает с толку в документах; потому что события перечислены в большинстве компонентов Flex. Ваш подход выглядит правильно, вам просто нужно что-то внутри Sprite, которое будет отправлять эти события клавиатуры.

...