所以这很奇怪,我使用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