如何结束动画? (加工)
How to end animation? (processing)
我写了这段代码来创建速写本。
我敢肯定这是一个简单的错误,但为什么它不会在图像结束时停止播放?
这是代码
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 --;
}
}
虽然有人告诉我我不能post,但我想不出要添加的更多细节,因为它主要是代码。
因为代码中有这一行,所以它会永远显示图像
currentImage = currentImage % NUMBER_IMAGES
如果您想停止绘制下一张图片,只需将此行更改为如下所示:
if(currentImage == NUMBER_IMAGES) noLoop()
noLoop() 将停止整个 draw()
动画,以便显示您的最后一张图像。如果你想退出动画,你可以将它添加到你的 keyPressed()
:
if (keyCode == ESC){
exit();
}
exit() 将正确退出您的程序。您可以使用此函数代替 noLoop
在最后一张图像后结束。
这一行就是实现循环数循环的那一行。
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++;
}
}
希望这对您有所帮助。
问候
何塞
我写了这段代码来创建速写本。
我敢肯定这是一个简单的错误,但为什么它不会在图像结束时停止播放?
这是代码
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 --;
}
}
虽然有人告诉我我不能post,但我想不出要添加的更多细节,因为它主要是代码。
因为代码中有这一行,所以它会永远显示图像
currentImage = currentImage % NUMBER_IMAGES
如果您想停止绘制下一张图片,只需将此行更改为如下所示:
if(currentImage == NUMBER_IMAGES) noLoop()
noLoop() 将停止整个 draw()
动画,以便显示您的最后一张图像。如果你想退出动画,你可以将它添加到你的 keyPressed()
:
if (keyCode == ESC){
exit();
}
exit() 将正确退出您的程序。您可以使用此函数代替 noLoop
在最后一张图像后结束。
这一行就是实现循环数循环的那一行。
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++;
}
}
希望这对您有所帮助。 问候 何塞