Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在类位于列表中时调用该类的方法_Java_Javafx - Fatal编程技术网

Java 如何在类位于列表中时调用该类的方法

Java 如何在类位于列表中时调用该类的方法,java,javafx,Java,Javafx,我正在用javaFX制作一个非常基本的旧版小行星游戏,以便重新开始编程。当生成小行星和子弹(它们是类中的对象)时,我将它们保存在列表中。我试图让这些小行星在屏幕上移动,但我似乎找不到如何从该对象调用方法,只针对列表中的最后一个对象。如果我使用list.forEach(object::method),我可以让小行星移动,但是每次调用forEach方法时,它都会改变所有对象的速度,这显然是不可取的。我只想在生成列表中的最后一项时调用velocity方法(floatSpeed)。我在这里可能有什么选择

我正在用javaFX制作一个非常基本的旧版小行星游戏,以便重新开始编程。当生成小行星和子弹(它们是类中的对象)时,我将它们保存在列表中。我试图让这些小行星在屏幕上移动,但我似乎找不到如何从该对象调用方法,只针对列表中的最后一个对象。如果我使用list.forEach(object::method),我可以让小行星移动,但是每次调用forEach方法时,它都会改变所有对象的速度,这显然是不可取的。我只想在生成列表中的最后一项时调用velocity方法(floatSpeed)。我在这里可能有什么选择

所以我试着制作我自己的for循环,通过IF语句在对象中循环,得到那些以x:0y:0的点2d速度移动的对象,但是这不起作用,因为它从IF语句中永远不会得到true。 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);
        }
私有列表项目符号=新的ArrayList();
私有列表小行星=新ArrayList();
私人空间添加小行星(游戏对象小行星,双x,双y){
小行星。添加(小行星);
添加游戏对象(小行星,x,y);
}
私有void addGameObject(GameObject对象,双x,双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());
小行星。forEach(游戏对象::floatSpeed);
}

使用以下代码行对小行星阵列的最后一个对象调用floatSpeed():

asteroids.get()返回指定索引中的对象。
asteroids.size()返回列表的大小。
索引从0开始,因此需要从列表大小中删除1。
当您从列表中获取对象时,只需调用floatSpeed()方法。

您想要asteroids.get(asteroids.size()-1)我猜?
asteroids.get(asteroids.size()-1).floatSpeed();