2

私は現在、プラットフォーマー ゲーム用のエンジンを構築していますが、複数のキープレスが使用されている場合、ActionScript3 が流動性を維持するのに苦労していることに気付きました。例えば;

        function onKeyDown(event:KeyboardEvent):void {
        if (event.keyCode == Keyboard.UP || event.keyCode == Keyboard.W || event.keyCode == Keyboard.SPACE) {
            if (isTouchingGround()) {
                isJumping = true;
                yv = -100;
            }
        } else if (event.keyCode == Keyboard.DOWN || event.keyCode == Keyboard.D) {
            if (xv == 0) {
                player.gotoAndPlay(275);
            }
        } else if (event.keyCode == Keyboard.LEFT || event.keyCode == Keyboard.A) {
            if (xv == 0) {
                xv = -24;
            } else if (xv != -120) {
                xv-=2;
            }
        } else if (event.keyCode == Keyboard.RIGHT || event.keyCode == Keyboard.D) {
            if (xv == 0) {
                xv = 24;
            } else if (xv != 120) {
                xv+=2;
            }
        }
    }

したがって、上に示したように、UP (または W、または Space) キーを使用すると、プレイヤーがジャンプするようになります (別の onframe イベント ハンドラーが重力などを処理します)。RIGHT (または D..) キー トリガーを使用すると、プレーヤーの加速が増加し、別の onframe イベント ハンドラーで再びプレーヤーに適用されます。

それ自体はすべて正常に機能しますが、複数のキーストロークを使用すると問題が発生します。プレイヤーが右に移動し始めてジャンプすると、加速が止まります。同時に、Keyboard.UP メソッドで指示されているように、彼は減速しません。代わりに、RIGHT キーが再度押されるまで、現在の速度を一定に維持します。

つまり、Actionscript は、RIGHT または LEFT の移動キーが押されなくなるまで、keyboard.down メソッドと keyboard.up メソッドの両方を無視し始めるかのようです。これは明らかに非常に厳格なゲームプレイの原因となります - これについて私と共有してくれる解決策はありますか?

4

1 に答える 1