Проблемы с движением Pong Paddle - PullRequest
1 голос
/ 12 февраля 2012

Я сейчас работаю над игрой Pong для своего портфолио на Java, и у меня просто небольшая проблема с движением весла 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 голосов
/ 12 февраля 2012

Это, вероятно, потому, что вы не учитываете размер весла при проверке нижней части экрана.Поэтому, если весло больше размера скорости (5), оно будет отображаться ниже нижней части экрана.

Для решения проблемы задержки повтора клавиш вам, вероятно, придется оставить флажки, для которых клавиши не работают.Установите флажки для событий keyPressed () и очистите его для keyReleased (), а затем обновите весла с помощью таймера.

...