3

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

4

3 回答 3

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;
}
于 2010-04-12T19:50:52.517 回答
0

简短的回答是否定的 为什么你不想使用 KeyboardEvent 事件监听器?

于 2010-04-10T11:45:31.530 回答
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;
    }

}
于 2010-04-10T12:26:05.457 回答