2015-01-15 4 views
0

Я написал этот код, который создает альбом.Как закончить анимацию? (обработка)

Я уверен, что есть простая ошибка, но почему бы не остановить воспроизведение в конце изображений?

Вот код

import ddf.minim.spi.*; 
import ddf.minim.signals.*; 
import ddf.minim.*; 
import ddf.minim.analysis.*; 
import ddf.minim.ugens.*; 
import ddf.minim.effects.*; 

Minim minim; 
AudioPlayer sou; //variable name; 


final int NUMBER_IMAGES = 27; 
PImage[] images; //sets PImage array 
int framerate = 10; 
int currentImage = 0; 
String getImageName(int image_number) { 
    if (image_number == 0) { // == double equals checks for equality 
     return "title.gif"; //missing k0.gif and k26.gif until this line //added 
    } else if (image_number == 26) { 
     return "title2.gif"; 
    } else { 
     return "data/K" + image_number + ".gif"; 
    } 
} 
void setup() { 
    minim = new Minim(this); //define construction 
    sou = minim.loadFile("ambience.mp3"); 
    sou.loop(); 


    size (300, 300); 
    background (255); 
    frameRate(framerate); 
    imageMode (CENTER); // Tells the images to display relative to CENTRE 
    images = new PImage[NUMBER_IMAGES]; // initialises the array (not images) 

    for (int image_number = 0; image_number < NUMBER_IMAGES; image_number++) { 
    String filename; // Declared a String called filename 
    filename = getImageName(image_number); 
    images[image_number] = loadImage(filename); 
    } 

} 
void draw() { 
    // Set framerate 
    frameRate(framerate); 
    // Draws first image 
    image(images[currentImage], width/2.0, height/2.0); 
    currentImage++; 
    currentImage = currentImage % NUMBER_IMAGES; 

} 
void keyPressed() { 
    if (keyCode == UP) { // up arrow increases frame rate by one 
    framerate ++; 
    } 
    if (keyCode == DOWN) { //down arrow decreases framerate by one 
    framerate --; 
    } 
} 

Я не могу думать о более подробной информации, чтобы добавить хотя я говорю, я не могу отправить это как в основном это код.

ответ

1

Эта линия является той, которая достигает цикла повторяющихся чисел.

currentImage = currentImage % NUMBER_IMAGES 

Что означает (Модульное) оператор % должен вычисляет остаток, когда одно число делится на другое. Так что скажем, например, что ваш NUMBER_IMAGES равен 10, сначала вы получите 1 & 10, а значение, хранящееся в currentImage, будет равно 1. Это продолжается до тех пор, пока вы не достигнете 10 % 10. Значение будет 0, и вы начнете все заново.

Здесь вы можете найти больше о (модуля) в обработке: https://www.processing.org/reference/modulo.html

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

void draw() { 
    // Set framerate 
    frameRate(framerate); 
    // Draws images 
    image(images[currentImage], width/2.0, height/2.0); 
    if(currentImage < NUMBER_IMAGES){   
     currentImage++; 
    } 
} 

Надеюсь, что это поможет. С уважением Хосе

+0

это делал/делает. Большое спасибо –

+0

Если это сработало, пожалуйста, примите ответ. –

1

Потому что у вас есть эта линия внутри вашего кода будет показывать изображения навсегда

currentImage = currentImage % NUMBER_IMAGES 

Если вы хотите прекратить рисовать NEX изображение просто изменить эту строку в нечто вроде этого:

if(currentImage == NUMBER_IMAGES) noLoop() 

noLoop() остановится весь draw() анимация, поэтому он отобразит ваше последнее изображение. Если вы хотите, то выйти из анимации вы можете добавить к вашей keyPressed():

if (keyCode == ESC){ 
    exit(); 
} 

exit() правильно выйти из программы. Вы можете использовать эту функцию вместо noLoop, чтобы закончить после последнего изображения.

+0

Спасибо @majlik очень полезный –

Смежные вопросы