2009-01-11 69 views
2

我有一個需要對「長按鍵」做出反應的界面。這意味着,基於對相同的鍵2個不同的動作多久的關鍵已經下來了:AS3:檢測長按鍵

向左按CURSOR:動作A

PRESS & HOLD左光標:動作B處

那麼,它證明更難我想。主要問題在於,如果您按住該鍵,Keyboard.KEY-DOWN和Keyboard.KEY-UP將不斷閃光。這對我來說看起來很奇怪,但如果你考慮輸入文本(如果你輸入文本並按住一個鍵開始填充空格)可能會有意義。

當我試圖解決這個問題時,我想到了在KEY-DOWN上啓動計數器並在KEY-UP上重置它。然後,如果它達到一定的閾值發生事件。問題是計數器會立即重置,因爲它們會一直觸發KEY-UP事件。

我知道鍵盤民意調查班,如BigRoom的和Senocular的,但他們不能解決問題,因爲他們的基礎上他們的地位相同的事件。

我可以讓定時器在KEY-DOWN上啓動一個定時器,並在x毫秒後檢查鍵是否仍然關閉,但假設鍵一直處於關閉狀態。我不認爲這是可靠的。

這就是我開始用盡想法的一點。有沒有更簡單的方法,我忽略了?我希望有!

感謝,

胡安

回答

1

對不起,我花了這麼長時間纔回來,但是在項目的中間,真的沒有時間深入研究。現在我已經發現並沒有這樣的問題。閱讀下面的長答案。

這只是在非常具體的情況下發生的,可能沒有人會責怪Adobe。

我有一臺運行Ubuntu的iMac,並在運行Windows XP的虛擬機上開發Flash。此問題僅出現在虛擬XP上,在Ubuntu上運行的本機應用程序(可能還有其他系統)不會顯示問題。

而且由於使用虛擬機時我還有一些其他的鍵盤怪癖,我認爲問題在於VirtualBox的鍵盤驅動程序。

感謝大家花時間研究這一點。我希望這有助於其他人!

胡安

0

確定KEY_UP火災時,你按一個鍵下來。這聽起來很詭異!我的Flex試用版已過期,並且我沒有設置一個只能使用SDK進行編譯的環境,因此我無法對此進行試驗。但this actionscript.org forum thread about missing KEY_UP:s似乎表明它可能是Flash播放器的設置問題。這不是你遇到的同樣的問題,但他們肯定會抱怨,如果他們有你的問題,似乎...

1

只是想知道你是否曾經找到過這個解決方案。我沒有經歷過相同的經歷,所以我繼續前進並快速測試,看看我是否得到了相同的結果,但我沒有 - 當我真正放開關鍵時,我只獲得了KEY_UP事件:

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

    <mx:Script> 
     <![CDATA[ 

      private function app_applicationComplete():void 
      { 
       stage.addEventListener(KeyboardEvent.KEY_DOWN, app_keyDown); 
       stage.addEventListener(KeyboardEvent.KEY_UP, app_keyUp); 

       setFocus(); 
      }  

      private function app_keyDown(event:KeyboardEvent):void 
      { 
       trace("Down..."); 
      } 

      private function app_keyUp(event:KeyboardEvent):void 
      { 
       trace("UP!"); 
      } 

     ]]> 
    </mx:Script> 

</mx:Application> 

我的結果看起來更像這一點 - 三個水龍頭:

Down... 
UP! 
Down... 
UP! 
Down... 
UP! 

...和 ​​「按住並釋放」:

Down... 
Down... 
Down... 
Down... 
Down... 
Down... 
Down... 
Down... 
Down... 
Down... 
Down... 
Down... 
UP! 

只是想我會分享;我猜這也可能,儘管不太可能,但當不應該的時候,鍵盤會向操作系統發送「up」消息。但假設你可以完成這項工作,你可能只需計算通過連續KEY_DOWN通知的次數,當你得到一個KEY_UP時重置計數器,推斷出該按鍵被按下而不是輕按並放開。希望能幫助到你!

+0

您好, 「鍵盤上的發送‘向上’消息到OS時,它不應該是」 這可把我的道路,找出問題。 Ta:) – 2009-02-01 19:58:49

+0

太棒了,我想知道這是怎麼發生的。讓我知道事情的後續! – 2009-02-01 20:30:53