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 に答える