Обработка: Попытка создать анимацию остановки движения с массивом изображений
Я пытаюсь создать анимацию остановки движения при обработке с использованием 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