是否可以在不使用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吗?

最佳答案

将关键状态存储在字典或对象中:

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;
}

10-02 06:42