私は現在、プラットフォーマー ゲーム用のエンジンを構築していますが、複数のキープレスが使用されている場合、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 メソッドの両方を無視し始めるかのようです。これは明らかに非常に厳格なゲームプレイの原因となります - これについて私と共有してくれる解決策はありますか?