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