特にコースワークの一環としてパックマンというゲームを作成していますが、長方形を使用した衝突検出に関して問題があります。
私が経験している問題は、画面上ではキャラクターが衝突していないことは明らかですが、交差をチェックすると、事実上常に true が返されることです。以下の出力は、私が何を意味するかを説明しています。
Pacman の詳細: x 17.0 y 16.0 Inky の詳細: x 22.0 y 13.0 intersects() 呼び出し後の衝突: true Pacman の詳細: x 18.0 y 16.0 Inky の詳細: x 23.0 y 13.0 intersects() の呼び出し後の衝突: true
Rectangles を次のように設定しました。
public Rectangle pacmanBounds(){
return new Rectangle(pacRow, pacColumn, 22, 22);
}
public Rectangle ghostBounds(){
return new Rectangle(ghostRow, ghostColumn, 22, 22);
}
高さと幅はテスト目的でハードコーディングされていますが、これらは実際の画像サイズです。
JPanel が再描画されるたびに、次のように衝突をチェックしています。
public boolean checkCollision(){
Rectangle pacmanBounds = pacman.pacmanBounds();
//currently commented out for testing
/*if(pacmanBounds.intersects(inky.ghostBounds()) || pacmanBounds.intersects(blinky.ghostBounds())
|| pacmanBounds.intersects(pinky.ghostBounds()) || pacmanBounds.intersects(clyde.ghostBounds())){
System.out.println("Oh no!");
return true;
}*/
System.out.println("Pacman details: x " + pacmanBounds.getX() + " y " + pacmanBounds.getY() + " ");
System.out.println("Inky details: x " + inky.ghostBounds().getX() + " y " + inky.ghostBounds().getY());
System.out.println("Collision after calling intersects(): " + pacmanBounds.intersects(inky.ghostBounds()));
return false;
}
この時点で、この問題を解決する方法についてのアイデアがほとんどなくなったので、アドバイスをいただければ幸いです。