2011-06-01 33 views
1

在一个特定的画布中,我希望用户能够按下组合键来触发一个事件(有点像在旧的megadrive中作弊游戏)。不知道从哪里开始。任何人都知道这是否可能,如果可以的话,你能否告诉我如何开始?Flex 3:按键组合触发一个事件/功能

在此先感谢!

回答

2

可以将eventListener添加到KeyboardEvent.KEY_DOWN事件的顶级应用程序,并检查其中的组合键。从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> 
+0

非常好,我可以从这里得到很好的刺伤。感谢您的链接。 – 2011-06-02 07:29:10

+0

这是真的;然而正如我在我自己的回答中所述,仍然需要发送键盘事件;我的容器不这样做。 – JeffryHouser 2011-06-02 10:43:42

+0

@ www.Flextras.com确实如此。我只是为了分派KEY_UP或KEY_DOWN事件而不专注于隐藏组件。任何将光标控制或聚焦于用户控制之外或依赖于某些任意隐藏控件中的焦点的设计在我看来都不是好设计。 – 2011-06-02 15:08:08

2

画布不会调度关键事件或关键事件。你可以添加一个监听器给他们;因为关键事件将起泡;但它不会单独派发它们。不幸的是,输入组件(如textInput)需要关注按键事件才能发送。

而不是使用画布,组或其他容器,我会考虑使用Spark TextInput与定制的皮肤,使它,和键入的文本,基本上不可见。

+0

唯一的问题是,我使用的flex3不支持火花组件。无论如何感谢您的建议! – 2011-06-02 07:31:51

+0

@Michael Wilson你可以设计一个MX TextInput来做同样的事情,我只是觉得它会很难做到。 – JeffryHouser 2011-06-02 10:44:22