Я делаю очень простую версию старой игры Asteroids в javaFX, чтобы вернуться к программированию. При создании астероидов и пуль (которые являются объектами из классов) я сохраняю их в списке. Я пытаюсь заставить эти астероиды перемещаться по экрану, но я не могу найти способ вызова метода из объекта, только для последнего объекта в списке. Если я использую list.forEach (object :: method), я могу заставить астероиды двигаться, но каждый раз, когда вызывается метод forEach, он меняет скорость всех объектов, что, конечно, нежелательно. Я хотел бы вызвать метод скорости (floatSpeed) только для последнего элемента в списке, когда он генерируется. Какие могут быть мои возможные варианты здесь?
Итак, я попытался создать свой собственный цикл for для циклического перемещения по объектам и получения движущихся объектов со скоростью Point2D x: 0 y: 0 с помощью оператора IF, но это не работает, потому что он никогда не получает правда из утверждения if.
Метод getVelocity просто возвращает текущую скорость объекта в формате Point2D.
for (GameObject Asteroid : asteroids){
if(Asteroid.getVelocity() == new Point2D(0,0)){
Asteroid.floatSpeed();
System.out.println("asteroid moving");
}
Это то, что у меня есть, чтобы заставить астероиды двигаться, но они обновляют скорость каждый раз, когда вызывается цикл forEach.
private List<GameObject> bullets = new ArrayList<>();
private List<GameObject> asteroids = new ArrayList<>();
private void addAsteroid(GameObject Asteroid, double x, double y){
asteroids.add(Asteroid);
addGameObject(Asteroid,x,y);
}
private void addGameObject(GameObject object, double x, double y){
object.getView().setTranslateX(x);
object.getView().setTranslateY(y);
root.getChildren().add(object.getView());
}
if (Math.random() < 0.01){
addAsteroid(new Asteroid(), Math.random() * root.getPrefWidth(), Math.random() * root.getPrefHeight());
asteroids.forEach(GameObject::floatSpeed);
}