Обработка: Попытка создать анимацию остановки движения с массивом изображений

Я пытаюсь создать анимацию остановки движения при обработке с использованием 19 изображений. Единственное изображение, которое он показывает, - это последнее в массиве, которое, как я тогда думал, должно быть, из-за частоты кадров, которая будет загружать все 19 в одну секунду, поэтому я попытался установить частоту кадров в "1", но безуспешно. Затем я добавил оператор if, чтобы счетчик начал все сначала и повторил анимацию. Любая помощь с благодарностью.

PImage[] images = new PImage[20];

void setup() {
  size(280, 120);

  for ( int i = 0; i < images.length; i++ )
  {
    images[i] = loadImage(i + ".jpg" );
  }
}

void draw() {
  frameRate(1);
  for (int i = 0; i < images.length; i++)
  {
    image(images[i], 0, 0);
    if (i == images.length-1) {
      i = 0;
    }
  }
}

1 ответ

Решение

В процессе draw() вызывается с частотой кадров, указанной в frameRate() вызов, который нужно вызвать только один раз в вашем setup() метод. В вашем коде весь цикл от i=0 в images.length пробегает полностью на каждом вызове ничьей. Таким образом, вы видите только последнее изображение после каждого draw(),

Вместо этого создайте глобальную переменную вне метода draw для номера изображения, которое вы хотите показать, и увеличьте его в методе draw следующим образом:

PImage[] images = new PImage[20];
int frameNum = 0;

void setup() {
    size(280, 120);

    for ( int i = 0; i < images.length; i++ ) {
        images[i] = loadImage(i + ".jpg" );
    }

    frameRate(30);
}

void draw() {

    frameNum++;
    frameNum %= images.length;    
    image(images[frameNum], 0, 0);
}

объяснение

  • При первом запуске эскиза обработки frameNum установлен на 0.
  • draw() вызывается один раз за кадр, и при каждом вызове мы увеличиваем frameNum,
  • Тогда мы гарантируем frameNum устанавливается в 0, когда это> images.length с frameNum %= images.length
Другие вопросы по тегам