我正在javaFX中制作旧的Asteroids游戏的基本版本,以重新进入编程。当生成小行星和子弹(它们是类中的对象)时,我将它们保存在List中。我试图让这些小行星在屏幕上移动,但我似乎无法找到如何从对象调用方法,仅用于列表中的最后一个对象。如果我使用list.forEach(object :: method)我可以让小行星移动,但每次调用forEach方法时它都会改变所有对象的速度,这当然是不可取的。我想在生成时仅为列表中的最后一项调用velocity方法(floatSpeed)。这可能是我可能的选择吗?
所以我尝试使用自己的for循环遍历对象,并使用IF语句获取具有Point:D速度x:0 y:0的那些移动,但是这不起作用,因为它永远不会从如果声明。 getVelocity方法只返回Point2D格式的对象的当前速度。
for (GameObject Asteroid : asteroids){
if(Asteroid.getVelocity() == new Point2D(0,0)){
Asteroid.floatSpeed();
System.out.println("asteroid moving");
}
这是我到目前为止让小行星移动的原因,但是每次调用forEach循环时它们都会更新速度。
private List bullets = new ArrayList<>();
private List 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);
}