Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Processing:Примеры/Объекты, хранящиеся в ArrayList

Материал из Онлайн справочника
Перейти к: навигация, поиск


Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Описание[1]

Этот скетч-пример демонстрирует, как использовать класс ArrayList для хранения меняющегося количества объектов. Класс ArrayList позволяет добавлять и удалять из него объекты.

Кликните по экрану, чтобы добавить новый прыгающий шарик.


Пример

  1. ArrayList<Ball> balls;
  2. int ballWidth = 48;
  3.  
  4. void setup() {
  5.   size(640, 360);
  6.   noStroke();
  7.  
  8.   // создаем пустой ArrayList (в нем будут храниться объекты Ball):
  9.   balls = new ArrayList<Ball>();
  10.  
  11.   // начинаем, добавляя один элемент:
  12.   balls.add(new Ball(width/2, 0, ballWidth));
  13. }
  14.  
  15. void draw() {
  16.   background(255);
  17.  
  18.   // При работе с массивом используется конструкция «balls.length»,
  19.   // а при работе с ArrayList – конструкция «balls.size()»;
  20.   // Размер объекта ArrayList может меняться.
  21.   // Обратите внимание, что мы начинаем проходить
  22.   // через элементы ArrayList с конца.
  23.   // Это из-за того, что нам нужно удалять элементы из ArrayList.
  24.   for (int i = balls.size()-1; i >= 0; i--) {
  25.     // Объект ArrayList не знает, что в нем хранится,
  26.     // поэтому нам приходится менять тип объекта, когда он выходит:
  27.     Ball ball = balls.get(i);
  28.     ball.move();
  29.     ball.display();
  30.     if (ball.finished()) {
  31.       // удалять элементы можно при помощи remove():
  32.       balls.remove(i);
  33.     }
  34.    
  35.   }  
  36.  
  37. }
  38.  
  39. void mousePressed() {
  40.   // добавляем в ArrayList новый шарик (по умолчанию в конец):
  41.   balls.add(new Ball(mouseX, mouseY, ballWidth));
  42. }
  43.  
  44. // простой класс для прыгающего шарика:
  45.  
  46. class Ball {
  47.  
  48.   float x;
  49.   float y;
  50.   float speed;
  51.   float gravity;
  52.   float w;
  53.   float life = 255;
  54.  
  55.   Ball(float tempX, float tempY, float tempW) {
  56.     x = tempX;
  57.     y = tempY;
  58.     w = tempW;
  59.     speed = 0;
  60.     gravity = 0.1;
  61.   }
  62.  
  63.     void move() {
  64.     // складываем гравитацию и скорость:
  65.     speed = speed + gravity;
  66.     // складываем скорость и координату Y:
  67.     y = y + speed;
  68.     // если шарик достигает земли, инвертируем скорость:
  69.     if (y > height) {
  70.       // заглушаем скорость:
  71.       speed = speed * -0.8;
  72.       y = height;
  73.     }
  74.   }
  75.  
  76.   boolean finished() {
  77.     // шарик начинает таять в воздухе:
  78.     life--;
  79.     if (life < 0) {
  80.       return true;
  81.     } else {
  82.       return false;
  83.     }
  84.   }
  85.  
  86.   void display() {
  87.     // показываем шарик:
  88.     fill(0,life);
  89.     //stroke(0,life);
  90.     ellipse(x,y,w,w);
  91.   }
  92. }

См.также

Внешние ссылки

  1. processing.org - ArrayList of objects by Daniel Shiffman.