2015-01-15 67 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 非常有用 –