2011-06-01 35 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