2010-04-10 51 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