2014-12-08 2 views
0

19 개의 이미지를 사용하여 처리 할 때 정지 모션 애니메이션을 만들려고합니다. 그것이 보여 주는 유일한 이미지는 배열의 마지막 하나입니다. 프레임 수를 사용하기 때문에 1 초 안에 19를 모두로드해야하므로 프레임 수를 "1"로 설정하려고했습니다. 그런 다음 if 문을 추가하여 카운터가 애니메이션을 다시 시작하고 반복하도록 지시합니다. 어떤 도움이라도 대단히 감사합니다. 처리 draw()에서처리 중 : 이미지 배열로 정지 모션 애니메이션을 만들려고합니다.

PImage[] images = new PImage[20]; 

void setup() { 
    size(280, 120); 

    for (int i = 0; i < images.length; i++) 
    { 
    images[i] = loadImage(i + ".jpg"); 
    } 
} 

void draw() { 
    frameRate(1); 
    for (int i = 0; i < images.length; i++) 
    { 
    image(images[i], 0, 0); 
    if (i == images.length-1) { 
     i = 0; 
    } 
    } 
} 
+0

frameNum %= images.length로>이 때 frameNum 0으로 설정되어 있는지 확인합니다. 가장 기본적인, 빠른 테스트를 위해 권하고 싶습니다. 그냥 Thread.sleep()을 루프에 추가하십시오. 그 후에 더 나은 접근 방법을 찾고 싶을 수 있습니다. 관련된 그래픽 및 UI 툴셋에 대해 알지 못해서 나는 추측을하지 않을 것입니다. 애니메이션 지원을 찾으십시오. – ash

+0

@ash 처리에는 시각화를위한 Java 프레임 워크이기 때문에 애니메이션 지원 기능이 내장되어 있습니다. https://www.processing.org/ –

답변

1

는 귀하의 setup() 방법에 한 번 호출 할 필요가 frameRate() 호출에 지정된 프레임 속도에서라고합니다. 코드에서 전체 루프i=0에서 images.length까지입니다. 의 모든 코드는입니다. 따라서 이후에만 인 모든 draw() 뒤에 마지막 이미지 만 표시됩니다.

대신, 표시 등 등의 그리기 방법을 증가 할 이미지 번호를 추첨 방식 외부 전역 변수를 만들 :

PImage[] images = new PImage[20]; 
int frameNum = 0; 

void setup() { 
    size(280, 120); 

    for (int i = 0; i < images.length; i++) { 
     images[i] = loadImage(i + ".jpg"); 
    } 

    frameRate(30); 
} 

void draw() { 

    frameNum++; 
    frameNum %= images.length;  
    image(images[frameNum], 0, 0); 
} 

설명

  • 때 처리 스케치가 처음 실행되면 int frameNum은 0으로 설정됩니다.
  • draw()은 프레임 당 한 번 호출되며 각 호출에서 frameNum.
  • 그런 다음 우리는 images.length 현재 어떤 형태의 타이밍을 추가해야합니다
+0

또는 간단하게 [frameCount] (https://www.processing.org) 시스템을 사용할 수 있습니다. /reference/frameCount.html) 다음과 같이 사용하십시오 :'image (images [images [framesCount % images.length]) ' – Majlik

+0

@Majlik 좋은 지적 - 독립 변수를 가지고있어 나중에 애니메이션 등을 멈추기로 결정하면 더 많은 제어권을 갖습니다. . –