Actionscript 3 AS3-键盘事件对某些键不起作用

Actionscript 3 AS3-键盘事件对某些键不起作用,actionscript-3,keyboard,addeventlistener,Actionscript 3,Keyboard,Addeventlistener,所以这很奇怪,我使用的是Kongregate.com在你做“Shootorials”时提供给你的完全相同的键类。它对箭头键很有效,但当你尝试使用WASD控件时就没有那么多了。我无法让它识别键码,所以我开始键入trace();按键事件处理程序中的语句 结果是,我的箭头键和其他一些键,如“D”和“G”将触发事件。但是其他的钥匙不起作用A、S 为什么我的班级只为一些钥匙而不是其他钥匙工作 源代码 包装 { }曾经有过同样的问题。我的浏览器与我正在运行的浏览器绑定。一些浏览器似乎会突出一些键盘事件,而不

所以这很奇怪,我使用的是Kongregate.com在你做“Shootorials”时提供给你的完全相同的键类。它对箭头键很有效,但当你尝试使用WASD控件时就没有那么多了。我无法让它识别键码,所以我开始键入trace();按键事件处理程序中的语句

结果是,我的箭头键和其他一些键,如“D”和“G”将触发事件。但是其他的钥匙不起作用A、S

为什么我的班级只为一些钥匙而不是其他钥匙工作

源代码

包装 {


}曾经有过同样的问题。我的浏览器与我正在运行的浏览器绑定。一些浏览器似乎会突出一些键盘事件,而不会让它们在flash player上冒泡


在其他浏览器中检查相同的问题可能会给你一个解决问题的切入点。

Akos说要检查浏览器是否劫持了键盘事件。经过调查,我知道是我的flash播放器本身劫持了我的钥匙。下面是我如何修复它的

  • 在任意flash播放器中运行.swf
  • 单击窗口菜单中的“控制”
  • 选中“禁用键盘快捷键”

  • 容易解决。谢谢您的帮助。

    您的代码看起来应该可以工作。如何调用
    类?为了运行它,我让Key extend Sprite并将其设置为flashbuilder中的应用程序文件……但是从您发布的内容来看,似乎很明显您还有其他类调用了
    Key.initialize(stage)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();
        }
    }