Как мне вызвать функцию для всех элементов внутри моего ArrayList?
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:240 плюса
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Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- java Почему я не могу объявить статические методы в интерфейсе?
- arraylist ArrayList в Java и ввод
- arraylist Создать ArrayList из массива
- arraylist Как удалить повторяющиеся элементы из ArrayList?
- arraylist Когда использовать LinkedList поверх ArrayList в Java?
- arraylist Как посчитать количество вхождений элемента в список
- arraylist Java: Обнаружить дубликаты в ArrayList?
- processing Как связать PImage с текстурой в обработке с использованием jogl (прямой OpenGL)
- processing Эквивалент C # анонимных методов в Java?
- processing Pac-Man Game: Обработка языка программирования и ActionScript
- processing Очистить массив в Java / обработка
- processing Remap или функция карты в Javascript
- processing Как просто распечатать страницу в разделе «Обработка»?