Я создаю игру, в частности pacman, как часть моей курсовой работы, и у меня возникают проблемы, когда дело доходит до обнаружения столкновений с помощью прямоугольников.
Проблема, с которой я сталкиваюсь, заключается в том, что, хотя на экране ясно видно, что символы не сталкиваются, проверка пересечения практически всегда возвращает истину.Вывод ниже объясняет, что я имею в виду:
Детали Пакмана: x 17,0 y 16,0 Детали Inky: x 22,0 y 13,0 Столкновение после вызова intersects (): true Детали Pacman: x 18,0 y 16,0 Детали Inky: x23,0 y 13,0 Столкновение после вызова intersects (): true
У меня есть прямоугольники, настроенные следующим образом:
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;
}
На данный момент у меня практически не осталось идейо том, как решить эту проблему, так что любой совет, который вы, ребята, можете дать, будет принята с благодарностью!