Как вызвать метод класса, когда он находится в списке - PullRequest
1 голос
/ 03 апреля 2019

Я делаю очень простую версию старой игры 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);
        }

1 Ответ

2 голосов
/ 03 апреля 2019

используйте следующую строку кода для вызова floatSpeed ​​() для последнего объекта вашего массива :

asteroids.get(asteroids.size()-1).floatSpeed();  

asteroids.get () возвращает объект с указанным индексом.
asteroids.size () возвращает размер вашего списка.
Индексирование начинается с 0, поэтому вам нужно удалить 1 из размера списка.
Когда вы получаете объект из списка, просто вызовите метод floatSpeed ​​() .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...