1

現在 Java でポートフォリオ用の Pong ゲームに取り組んでいますが、Pong パドルの動きに少し問題があります。明らかに、パドルが画面外に移動したくないので、Y 軸上の特定のポイントに到達すると、それ以上移動しないようにしようとしています。画面の上部では機能するようになりましたが、下部では機能しませんでした。その理由がわかりません。私が使用している条件付きは機能する必要がありますが、十分に遠くまで移動すると、画面の下部からすぐに移動します。各パドルの動きの条件は次のとおりです。私のコードがさらに必要な場合は、お問い合わせください。

// Check for Left Paddle movement.
if( ( wKey ) && ( paddle_left.getY() >= ( paddle_speed * 2 ) ) )
    paddle_left.setY( paddle_left.getY() - paddle_speed ); 
else if( ( sKey ) && ( paddle_left.getY() <= ( boardHeight - 10 ) ) )
    paddle_left.setY( paddle_left.getY() + paddle_speed );

// Check for Right Paddle movement
if( ( upKey ) && ( paddle_right.getY() >= ( paddle_speed * 2 ) ) )
    paddle_right.setY( paddle_right.getY() - paddle_speed );
else if( ( downKey ) && ( paddle_right.getY() <= ( boardHeight - 10 ) ) )
    paddle_right.setY( paddle_right.getY() + paddle_speed );

変数paddle_speedは 5 に等しい定数です。また、boardHeightすべてが描画される画面の高さは 480 です。

また、これはそれほど重要ではありませんが、キーを押し始めてからパドルが動き始めるまでにわずかな遅れがあることに気付きました. ユーザーのコンピューターに設定された初期キー押下遅延が原因であることはわかっていますが、これをどのように補正できますか?

編集:わかりました、あなたの答えを反映するようにコードを変更しました。

// Check for Left Paddle movement.
if( ( wKey ) && ( paddle_left.getY() >= ( paddle_speed * 2 ) ) ) paddle_left.setY( paddle_left.getY() - paddle_speed );
else if( ( sKey ) && ( paddle_left.getY() <= ( boardHeight - ((paddle_speed * 2) + paddleHeight) ) ) ) paddle_left.setY( paddle_left.getY() + paddle_speed );

// Check for Right Paddle movement.
if( ( upKey ) && ( paddle_right.getY() >= ( paddle_speed * 2 ) ) ) paddle_right.setY( paddle_right.getY() - paddle_speed );
else if( ( downKey ) && ( paddle_right.getY() <= ( boardHeight - ((paddle_speed * 2) + paddleHeight) ) ) ) paddle_right.setY( paddle_right.getY() + paddle_speed );

ただし、それでも画面より少し下に移動します。今は止まりますが、まだ画面から 20 ピクセルほど離れています。理解できません。ペイントを使用して座標を描画し、ロジックがどのように機能するかをシミュレートしたところ、画面の下部の端から 5 ピクセルで停止するはずです。なぜそうではないのか分かりますか?

4

1 に答える 1

0

おそらく、画面の下部を確認するときにパドルのサイズを考慮していないためです. したがって、パドルが速度サイズ (5) よりも大きい場合は、画面の下部に描画されます。

キーの繰り返しの遅延の問題については、おそらくどのキーが押されているかのフラグを保持する必要があります。keyPressed() イベントでフラグを設定し、keyReleased() でフラグをクリアしてから、タイマーを使用してパドルを更新します。

于 2012-02-12T17:20:57.490 に答える