2010-05-31 56 views
0

我正在做一些新手测试,所以我决定捕获键盘事件来移动一个矩形。但我没有得到理想的结果。除非我点击TextArea框,否则我是 无法捕获事件密钥代码。之后,一切都很顺利。无法管理Flex/actionscript中的事件

我在Linux上使用Eclipse 3.3 + Flex 3.0。

这里是我的代码:

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

键盘事件,仅调度为DisplayObject当前焦点和所有的父母。获取KeyboardEvent最可靠的方法是将处理程序注册到舞台。然而,处理KeyboardEvents不知道焦点或任何其他形式的上下文往往会导致奇怪的行为,所以你将不得不考虑一下。

greetz
back2dos