所以這很奇怪,我使用Kongregate.com在做他們的「Shootorials」時給你的完全相同的Key類。它適用於箭頭鍵,但在嘗試使用WASD控件時並不那麼重要。我無法識別keyCode,所以我開始輸入trace();在keyPressed事件處理程序中的語句。AS3 - 鍵盤事件不適用於某些鍵
事實證明,我的箭頭鍵以及其他一些按鍵(如「D」和「G」)會觸發事件。但其他鍵不起作用。 'A','S'。
爲什麼我的班級爲某些鍵而不是其他鍵工作?
源代碼
包 {
import flash.display.Stage;
import flash.events.Event;
import flash.events.KeyboardEvent;
public class Key {
private static var initialized:Boolean = false;
private static var keysDown:Object = new Object(); // stores key codes of all keys pressed
public static function initialize(stage:Stage) {
if (!initialized) {
// assign listeners for key presses and deactivation of the player
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
stage.addEventListener(Event.DEACTIVATE, clearKeys);
// mark initialization as true so redundant
// calls do not reassign the event handlers
initialized = true;
trace("Initialized [Keys]");
}
}
public static function isDown(keyCode:uint):Boolean
{
return Boolean(keyCode in keysDown);
}
private static function keyPressed(event:KeyboardEvent):void {
trace("Keyboard Event Trigger");
keysDown[event.keyCode] = true;
}
private static function keyReleased(event:KeyboardEvent):void {
if (event.keyCode in keysDown) {
delete keysDown[event.keyCode];
}
}
private static function clearKeys(event:Event):void {
// clear all keys in keysDown since the player cannot detect keys being pressed or released when not focused
keysDown = new Object();
}
}
}
你的代碼看起來應該可以工作。你怎麼調用你的Key類?爲了運行它,我將Key擴展爲Sprite,並將其設置爲Flash Builder中的應用程序文件...但是從您發佈的內容來看,似乎很清楚您還有其他一些類調用了'Key.initialize(stage);'。 – Brian
是的,先生,我的文檔類被稱爲'遊戲'。在Game構造函數中,它調用Key.initialize(stage);正如你所說。 – Nate
然後我有另一個叫做'Ship'的類,這是玩家控制的MovieClip。 Ship有一個enterFrame事件監聽器,並且在這個處理器中,它說if(Key.isDown(Keyboard.RIGHT)|| Key.isDown(68)){this.x + = xSpeed;}這個類有類似的'if'語句所有方向也是如此。它適用於箭頭鍵,它也適用於'D'鍵和'W'鍵。無論出於何種原因,它不適用於'A'或'S'。我看不出爲什麼我可以用'D'鍵移動到右邊,但是我不能用'A'鍵移動到左邊。 – Nate