如何对ArrayList中的所有元素调用函数?

时间:2019-08-11 04:53:23

标签: java arraylist processing

我正在制作一个程序,该程序使用处理在屏幕周围反弹的球来绘制图案/设计。我设法使一个球正确地移动,绘画和弹跳。但是,一旦我创建了ArrayList,并使用Iterator在屏幕上绘制了所有球,它们便停止移动。

我不太确定该怎么做,我曾尝试在iters的while循环中调用move(),并尝试在Ball()的构造函数中调用它(不知道是否有任何作用)。我只包含了我认为有问题的代码。

import java.util.ArrayList;
import java.util.Iterator;

class Ball {
    float x;
    float y;
    float directionDegree;
    float speed = 8;

    Ball() {
        x = random(0, 600);
        y = random(0, 600);
        directionDegree = random(60, 120);
    }

    void move() {
        x += speed * Math.cos(direction);
        y += speed * Math.sin(direction);
    }

    void drawAll(ArrayList<Ball> balls) {
        Iterator<Ball> iter = balls.iterator();

        while (iter.hasNext()) {
            iter.next().draw();
            move();
        }
    }
}
  

内部主班:

Ball b;
ArrayList<Ball> balls = new ArrayList<Ball>();
int amountOfBalls;

void setup() {
    size(600, 600);
    b = new Ball();
    amountOfBalls = 4;
    for (int i = 0; i < amountOfBalls; i++) {
        balls.add(new Ball());
    }
}

void draw() {
    b.drawAll(balls);
    b.contactWall();
    b.move();
}

我画的四个球只是坐在那里,不动也不做任何古怪的动作,它们只是坐在那里。

2 个答案:

答案 0 :(得分:1)

如BarSahar所建议,在移动函数调用中没有Ball的引用。您还可以在while循环中执行以下代码

Ball ball = iter.next(); ball.draw(); ball.move();

但是我建议您将Ball类的draw All方法移到主类中。您可以直接从主类调用draw All。内部绘制所有您可以使用foreach循环进行迭代,并且可以调用绘制,移动和连接Wall。

答案 1 :(得分:0)

请注意,我是您的“ while”循环,您仅使用迭代器进行绘制。调用方法“ move”时,该函数没有要移动的特定球的引用。

我建议采取以下措施:

For (Ball ball : balls) {
    ball.move();
    ball.draw();
}

通过主类中的draw函数的方式不必要地使用move方法(因为球已经在“ move”中执行了此操作)。

我也建议使“ drawAll()”函数成为静态函数。由于它不能在球“ b”的单个实例上运行,所以作为一个好习惯