В настоящее время я пытаюсь создать игру «Уклоняйся от астероида», в которой пользователь управляет космическим кораблем и старается избегать астероидов (3 вида, маленький средний большой).В настоящее время у меня есть все анимации (перемещение космического корабля, падение астероидов).Когда пользователь нажимает кнопку запуска, начинается анимация случайной вставки астероидов:
public void startGame()
{
Timeline asteroids = new Timeline(new KeyFrame(Duration.seconds(.5), e -> displayAsteroid()));
asteroids.setCycleCount(Timeline.INDEFINITE);
asteroids.play();
}
Вот код для создания астероидов при каждом запуске временной шкалы:
public void displayAsteroid()
{
// creates an asteroid object (constructor randomly creates one of 3 sizes)
Asteroid asteroid = new Asteroid();
getChildren().add(asteroid);
// randomly generates x coordinate from the board size
Random rand = new Random();
int randomNum = rand.nextInt((int) (getWidth() - asteroid.getWidth()));
//sets the x and y (y is -200 so that the asteroid doesn't just appear at top
// x is set to the random number
asteroid.setY(-200);
asteroid.setX(randomNum);
asteroid.setTranslateY(asteroid.getY());
asteroid.setTranslateX(randomNum);
// animation to move the asteroid down the screen
Timeline timeline = new Timeline();
KeyFrame keyFrame = new KeyFrame(Duration.millis(50), event -> {
// checks if the asteroid leaves the screen or if collision happens
if(asteroid.getY() > getHeight() || spaceShip.intersects(asteroid.getBoundsInParent()))
{
timeline.stop();
getChildren().remove(asteroid);
}
else
{
// getSpeed is the speed of the asteroid (small is fastest, large is slowest)
asteroid.setY(asteroid.getY()+asteroid.getSpeed());
asteroid.setTranslateY(asteroid.getY());
}
});
timeline.setCycleCount(Animation.INDEFINITE);
timeline.getKeyFrames().add(keyFrame);
timeline.play();
}
Космический корабль - это панель(группа прямоугольников / эллипсов), уложенные друг на друга, а астероиды также представляют собой панели со случайными эллипсами, уложенными поверх большого эллипса (чтобы он выглядел как астероид).
На данный момент столкновение не работает, поскольку время от времени оно случайным образом удаляет по одному, и у меня исчезла связка, когда я ударил одного из них - несколько раз.Как я могу изменить этот код так, чтобы он обнаруживал, когда астероид вступает в контакт с кораблем?
Да, я смотрел на другие вопросы, но они были обычными объектами, такими как круги, поэтому я не имеюне смог заставить мою работать.Я могу предоставить дополнительный код (классы астероидов / космических кораблей), чтобы помочь вам проверить это при необходимости
Я чувствую, что логика неверна в моем коде, и любая помощь очень ценится!Спасибо, хорошего дня !:)