Проблемы с управлением событиями во Flex / actionscript - PullRequest
0 голосов
/ 31 мая 2010

Я делаю несколько тестов для новичков, поэтому я решил записать события клавиатуры, чтобы переместить прямоугольник. Но я не получаю желаемого результата. Если я не нажму на поле TextArea, я не удалось захватить код ключа события. После этого все идет очень хорошо.

Я использую Eclipse 3.3 + Flex 3.0 в Linux.

Вот мой код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
 xmlns:mx="http://www.adobe.com/2006/mxml" 
 layout="absolute"
 enterFrame="enterFrame(event)"
 keyDown="onKeyDown(event)">

 <mx:TextArea id="myText" x="200" y="200" width="100" height="100" />

 <mx:Canvas id="myCanvas" x="0" y="0" width="100" height="100" />

 <mx:Script>
  <![CDATA[
   public var clearColor : uint = 0xFF456798;
   public var myPoint : Point = new Point(0,0);

   public function enterFrame(event:Event):void
   {
    myCanvas.graphics.clear();
    myCanvas.graphics.beginFill(0xFF344ff0);
    myCanvas.graphics.drawRect(myPoint.x,myPoint.y,40,40);
    myCanvas.graphics.endFill();
   }

   public function onKeyDown(event:KeyboardEvent):void
   {
    myText.text = "Keycode is: " + event.keyCode + "\n";

    switch(event.keyCode)
    {
     case 37: //Left
      myPoint.x -= 1;
      break;
     case 38: //Up
      myPoint.y -= 1;
      break;
     case 39: //Right
      myPoint.x += 1;
      break;
     case 40: //Down
      myPoint.y += 1;
      break;
    }
   }
  ]]>
 </mx:Script>

</mx:Application>

1 Ответ

1 голос
/ 31 мая 2010

События клавиатуры отправляются только в DisplayObject с текущим фокусом и всеми его родителями. Самый надежный способ получить KeyboardEvent - зарегистрировать обработчик на сцене. Однако обработка KeyboardEvents, не зная о фокусе или любой другой форме контекста, обычно приводит к странному поведению, поэтому вам придется подумать над этим.

Greetz
back2dos

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...