0

我正在尝试使用 19 个图像在处理中创建定格动画。它显示的唯一图像是数组中的最后一个图像,然后我认为这一定是因为它会在一秒钟内加载所有 19 个帧速率,所以我尝试将帧速率设置为“1”,但没有运气。然后我添加了一个 if 语句来告诉计数器重新开始并重复动画。非常感谢任何帮助。

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;
    }
  }
}
4

1 回答 1

1

In Processingdraw()以调用中指定的帧速率frameRate()调用,只需要在您的setup()方法中调用一次。在您的代码中,从to 到的整个循环在每次绘制调用时都会完整运行。因此,您只能看到every之后的最后一张图像。i=0images.lengthdraw()

相反,在 draw 方法之外为要显示的图像编号创建一个全局变量,并在 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);
}

解释

  • 首次运行处理草图时,intframeNum设置为 0。
  • draw()每帧调用一次,每次调用我们递增frameNum.
  • 然后我们确保frameNum当它 > 时设置为images.length0frameNum %= images.length
于 2014-12-08T22:53:23.947 回答