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 像素。我不明白。我什至使用了 Paint 并绘制了坐标并模拟了逻辑应该如何工作,它应该在距离屏幕底部边缘 5 个像素处停止。你能弄清楚为什么不是吗?

4

1 回答 1

0

这可能是因为您在检查屏幕底部时没有考虑桨的大小。因此,如果您的桨比您的速度大小 (5) 大,那么它将绘制在屏幕底部下方。

对于键重复延迟问题,您可能必须保留哪些键已关闭的标志。在 keyPressed() 事件上设置标志并在 keyReleased() 上清除它,然后使用计时器更新桨。

于 2012-02-12T17:20:57.490 回答