2016-11-24 3 views
0

Я должен представить клон Breakout, и я борюсь с обнаружением столкновения шара и кирпичей. В принципе, обнаружение столкновения работает, но мяч разрушает кирпич примерно на 10 пикселей от визуального объекта. Я проверяю границы обоих объектов, но я думаю, проблема в том, что мяч является движущимся объектом, а кирпич является статическим.Обнаружение столкновений работает неправильно

for (int i = 0; i < n; i++) { 
    for (int j = 0; j < m; j++) { 
     brick = brickArray[i][j]; 
     if (brick == null) 
      continue; 
      areBricksLeft = true; 
      Bounds brickBounds = brick.getBoundsInParent(); 
      Bounds ballBounds = ball.getBoundsInParent(); 

     if (brickBounds.intersects(ballBounds)) { 
      brick.removeBrickAt(i, j, brick, brickArray, brickPane); 
      didHitBrick = true; 
     } 
    } 
} 
+1

Я думаю, что это из-за круглой формы шара. Положение x круга начинается от центра, в то время как прямоугольник или квадрат имеют положение x в начале. –

ответ

0

Спасибо за подсказку Я нашел ошибку. Я заменил мое состояние с этим:

double ballX = ball.getLayoutX() + ball.getRadius(); 
double ballY = ball.getLayoutY() + ball.getRadius(); 

if ((ballX <= brickBounds.getMaxX() - 10 && ballX >= brickBounds.getMinX() -10) && 
    (ballY <= brickBounds.getMaxY() - 10 && ballY >= brickBounds.getMinY() - 10)) { 
    brick.removeBrickAt(i, j, brick, brickArray, brickPane); 
    didHitBrick = true; 
} 

Теперь можно регулировать коллизию путем вычитания и добавления значения в пределах.

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