乒乓球运动问题

时间:2012-02-12 16:59:44

标签: java pong

我现在正在使用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个像素。你能弄明白为什么不是吗?

1 个答案:

答案 0 :(得分:0)

这可能是因为您在检查屏幕底部时没有考虑到球拍的大小。因此,如果您的球拍大于您的速度尺寸(5),那么它将被绘制在屏幕底部以下。

对于密钥重复延迟问题,您可能需要保留按键关闭的标记。在keyPressed()事件上设置标志并在keyReleased()上清除它,然后使用计时器更新拨片。