每40毫秒处理一次saveFrame

时间:2020-05-22 11:18:20

标签: processing

我正在尝试创建与视频以25帧/秒同步的图形。我试图每40毫秒保存一帧,但是我无法每秒获得25帧,只能保存一张图像。 有人可以帮我吗?

int t1;
int count;

void setup(){
  size(400,100);
  background(0);
  stroke(255);
  fill(250);
  line(10,0,10,100);
  line(260,0,260,100);

  for (int i=10;i<251;i+=10){

    t1=millis();
    while(millis()-t1 < 40) {
      count++;
    }
    rect(10,50,i,10);
    //saveFrame("line-####.png");
  }
}

void draw(){}

1 个答案:

答案 0 :(得分:2)

您的代码中的问题是画布仅在帧结束后才更新,这意味着您的矩形确实存在,但是直到 setup()结束才显示。这就是为什么即使您的代码在绘制一个新矩形之前正确等待40毫秒,在for循环结束之前也不会显示任何内容:在结束帧之前,Processing正在等待完成for循环。

但是,在每秒处理 draw()的过程中被调用了一定的次数,该次数由函数 frameRate()指定(默认值为60 )。
因此,您只需将frameRate设置为25,并在每次调用 draw()时保存图像。
noLoop()用于停止调用 draw(),在这种情况下,一旦全部绘制矩形。

int count;

void setup()
{
  frameRate(25);
  size(400,100);
  background(0);
  stroke(255);
  fill(250);
  line(10,0,10,100);
  line(260,0,260,100);
}

void draw()
{
  rect(10,50,count,10);
  saveFrame("line-####.png");
  count += 10;
  if(count > 251)
  {
    noLoop();
  }
}