2009-01-11 70 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