我正在制作一个程序,该程序使用处理在屏幕周围反弹的球来绘制图案/设计。我设法使一个球正确地移动,绘画和弹跳。但是,一旦我创建了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();
}
我画的四个球只是坐在那里,不动也不做任何古怪的动作,它们只是坐在那里。
答案 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”的单个实例上运行,所以作为一个好习惯