2016-11-24 14 views
0

ブレイクアウトクローンを提出する必要があり、ボールとレンガの衝突検出に苦労しています。基本的に衝突検出は機能しますが、ボールはビジュアルオブジェクトから約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; 
} 

ここで、境界を差し引いて値を加算することで、衝突を調整することができます。

関連する問題