2015-11-18 5 views
-1

Я пытаюсь сделать игру в понг, и я застрял в обнаружении столкновения. Проблема исходит из приведенного ниже метода. Я не могу понять свою логическую ошибку. Примечание: player1 и Circle - оба объекта прямоугольника, которые я использую, чтобы они могли взаимодействовать друг с другом. Спасибо.Ошибка логики столкновений

public void moveBall(){ 
    ball.x += speed; 

    //checks if the ball intersects with the paddle Player 1 
    if (ball.intersects(player2) && ball.getY() >= player2.getY() && ball.getY() <= player2.getY() + 70){ 
     speed *= (-1); 
    } 


} 
+0

Что делает ваш 'intersects()' метод? – azurefrog

+1

Я предполагаю, что это ошибка копирования/вставки, но в вашем комментарии говорится, что вы проверяете пересечение игрока 1, и код выглядит так, как будто вы проверяете Player 2. –

+1

@azurefrog Похоже, что 'ball' может быть прямоугольником, что трудно сказать в этом случае без остальной части кода/объяснения – phflack

ответ

0

ваша проблема может быть, что, как только мяч касается игрока, скорость умножается на -1, то, мяч движется Однако мяч не двигается достаточно далеко, так, столкновение может быть зарегистрирован снова заставляя скорость снова умножаться на -1. Чтобы решить эту проблему просто переместить мяч после изменения значения «скорости»

Решение:

public void moveBall(){ 
ball.x += speed; 

//checks if the ball intersects with the paddle Player 1 
if (ball.intersects(player2)){ 
    speed *= (-1); 
    ball.x += 3*speed; 
} 

}

Кроме того, вам не нужна строка ball.getY() >= player2.getY() && ball.getY() <= player2.y как метод Rectangle.intersects также проверяет, координаты y совпадают.

Надеюсь, это помогло.

+0

Я пробовал то, что вы сказали выше, но он все еще не работает. По какой-то причине мяч просто отклоняется, когда он попадает на ту же ось X, но не на Y. – yj2000

+0

Просто изменил имена переменных и нашел свою проблему. Благодаря! – yj2000

+0

Ваш прием :) – Paul

Смежные вопросы