2015-01-15 3 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

을 @majlik 감사/않습니다. 고마워요. –

+0

작동하는 경우 대답을 수락하십시오. –

1

당신은 당신의 코드 내부의 줄을 가지고 있기 때문에이 표시됩니다 이미지 영원히 당신은 단순히 이런 일에이 줄을 변경 NEX 이미지를 그리기 중지하려면

currentImage = currentImage % NUMBER_IMAGES 

:

if(currentImage == NUMBER_IMAGES) noLoop() 

noLoop() 것은 중지 전체 draw() 애니메이션이므로 마지막 이미지가 표시됩니다. 그런 다음 애니메이션을 종료하려는 경우 당신은 당신의 keyPressed()이를 추가 할 수 있습니다

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

exit() 제대로 프로그램을 종료합니다. noLoop 대신이 기능을 사용하여 마지막 이미지 다음에 끝낼 수 있습니다.

+0

당신이 그것을했다 매우 유용 –

관련 문제