2010-04-10 22 views
3

是否可以在不使用KeyboardEvent的情况下检查按下的按键?在AS3中检查键盘状态而不使用KeyboardEvent

我有一个名为enterFrameHandler的ENTER_FRAME事件设置,我想在功能enterFrameHandler中检查是否有任何按键被按下。

通常当使用KeyboardEvent时,我可以使用检查事件的KeyCode的开关轻松检查键,但在ENTER_FRAME事件中,这对我来说是不可能的。

是否有任何其他方式检查ENTER_FRAME事件中的键盘状态?

更新: 我发现这个AS2脚本:

onClipEvent (enterFrame) { 
    if (Key.isDown(Key.LEFT)) { 
     _x -= power; 
    } 
    if (Key.isDown(Key.RIGHT)) { 
     _x += power; 
    } 
    if (Key.isDown(Key.UP)) { 
     _y -=power; 
    } 
    if (Key.isDown(Key.DOWN)) { 
     _y +=power; 
    } 
} 

这似乎是在做我想要的,但它在AS2,没有人知道如何“翻译”到这个AS3?

+0

看我为一个相关的问题的答案在这里:http://stackoverflow.com/questions/2501424/what-is-the-most - 有效的方式来测试组合键盘箭头方向在一个/ 2502380#2502380 – Cameron 2010-04-10 16:03:32

回答

5

商店关键州:

stage.addEventListener(KeyboardEvent.KEY_UP, keyHandleUp); 
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandleDown); 

private var hash:Object = {}; 

private function keyHandleUp(event:KeyboardEvent):void { 
    delete hash[event.keyCode]; 
} 

private function keyHandleDown(event:KeyboardEvent):void { 
    hash[event.keyCode] = 1; 
} 

private function isKeyDown(code:int):Boolean { 
    return hash[code] !== undefined; 
} 
+0

上面的代码不会编译,因为event.keycode缺少大写字母“keyCode” – Craig 2014-12-27 13:40:32

0

简短的回答是否 为什么你不想使用KeyboardEvent事件侦听器?

+0

我可以,但我很好奇,现在我知道这是可能的与AS2 – Pieter888 2010-04-10 12:02:05

+1

@just_a_dude。能够在特定时间检查特定按键是否关闭是非常方便的。例如,在游戏的主循环中,您可以在集中点检查用户输入。这是该课程可让你做的事:http://code.google.com/p/bigroom/source/browse/trunk/src/uk/co/bigroom/input/KeyPoll.as。有可能在AS 2本地执行它。不知道为什么现在你被迫在Actionscript中实现它,但我离题了。 – 2010-04-11 16:08:08

+0

@JuanPabloCalifano你不需要离开胡安。保持gressing。一切你想要的。另外,感谢您的链接,但它给了404。你有一个它在做什么的例子吗? – 2015-07-31 08:33:32

0

随着一个KeyboardEvent.KEY_DOWN监听器添加到舞台上,保持按键工作得很好,所以不需要ENTER_FRAME。在词典或对象

private function keyDownHandler(evt:KeyboardEvent):void 
{ 
    switch(evt.keyCode) 
    { 
     case 37: //left key 
       trace("Move left"); 
      break; 
     case 38: //up key 
      trace("Move up"); 
      break; 
     case 39: //right key 
      trace("Move right"); 
      break; 
     case 40: //down key 
      trace("Move down"); 
      break; 
    } 

} 
+0

或者你可以在ENTER_FRAME上使用EventDispatcher,但是我确定它会比使用KeyboardEvent运行得慢。 – 2010-04-10 12:47:46