Отслеживание столкновений в JavaFX игре

Отслеживание столкновений между объектами в JavaFX и реализация системы проигрыша осуществляется с помощью AnimationTimer.

Отслеживание столкновений

Для проверки столкновения игрока с врагом в цикле AnimationTimer используется функция getBoundsInParent() для получения ограничивающего прямоугольника объекта и функция intersects() для проверки пересечения.

// Пример кода
if (player.getBoundsInParent().intersects(enemy.getBoundsInParent())) {
    System.out.println("Collision!");
}

Выводимое сообщение о столкновении может повторяться, так как AnimationTimer срабатывает каждый кадр.

Реализация проигрыша

При столкновении отображается окно с сообщением о проигрыше, и игра останавливается. В Scene Builder добавлен лейбл с текстом «Lost» и ID «label_lost».

// Пример кода (фрагмент)
private Label label_lost; // ... в объявлении переменных
// ... внутри AnimationTimer
if (player.getBoundsInParent().intersects(enemy.getBoundsInParent())) {
    label_lost.setText("Lost");
    label_lost.setVisible(true);
    playerSpeed = 0;
    jumpDownSpeed = 0;
    // Остановка анимации
}

Текст лейбла устанавливается в «Lost», лейбл становится видимым, а скорости игрока обнуляются, останавливая анимацию.

Неточности обнаружения столкновений

Возможны ложные срабатывания из-за того, что ограничивающий прямоугольник объекта в Scene Builder больше, чем сам объект. Для точного обнаружения столкновений следует использовать непосредственно изображение объекта, что сложнее реализовать в JavaFX, чем в игровых движках, таких как Unity или Unreal Engine. Однако, при перепрыгивании врага, игра работает корректно.

Итоги

Разработка игр на JavaFX имеет ограничения. JavaFX лучше подходит для создания приложений, а для разработки полноценных игр предпочтительнее использовать игровые движки, такие как Unity. Созданная 2D-игра демонстрирует базовые элементы, но не является полноценной игрой. Java и JavaFX эффективны для разработки приложений с базами данных, анимацией и сложным дизайном.

Что будем искать? Например,программа