Вопрос:

Как мне вызвать функцию для всех элементов внутри моего ArrayList?

java arraylist processing

43 просмотра

2 ответа

1 Репутация автора

Я делаю программу, которая рисует узор / дизайн, используя шары, которые отскакивают по экрану, используя Processing. Мне удалось получить один мяч, двигаясь, рисуя и прыгая правильно. Однако, как только я создал ArrayList и нарисовал все свои шары на экране с помощью Итератора, они перестали двигаться.

Я не совсем уверен, что делать, я попытался вызвать move () в итераторах цикла while, и попытался вызвать его в конструкторе Ball () (не знаю, действительно ли это что-то делает). Я включил только тот код, с которым, по-моему, у меня были проблемы.

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();
 }
}


Inside Main Class:

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();
 }

Четыре шара, которые я нарисовал, просто сидят там, не двигаются и не делают никаких дурацких движений, они просто сидят там.

Автор: Xavier Lin Источник Размещён: 11.08.2019 04:53

Ответы (2)


0 плюса

39 Репутация автора

Обратите внимание, что я ваш цикл while, вы используете итератор только для рисования. При вызове метода «перемещение» функция не имеет ссылки на конкретный шар, который вы хотите переместить.

Я бы предложил что-то вроде:

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

Кстати, функция draw в главном классе использует метод move без необходимости (так как мяч уже делает это в «move»).

А также я бы предложил сделать функцию drawAll () статической. Так как он не действует ни на один экземпляр шара "b", это хорошая практика

Автор: BarSahar Размещён: 11.08.2019 05:24

0 плюса

19 Репутация автора

Как предполагает BarSahar, в вызове функции move нет ссылки на Ball. Вы также можете сделать приведенный ниже код в цикле while

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

Но я бы порекомендовал вам переместить метод draw All из класса Ball и поместить его в основной класс. Вы можете напрямую вызвать Draw All из основного класса. Внутри draw Все, что вы можете перебрать, используя цикл foreach и можете вызывать draw, move и connect`Wall.

Автор: Sujay Mohan Размещён: 11.08.2019 07:07
Вопросы из категории :
32x32