在Processing sketch中插入延迟

时间:2013-06-10 20:59:50

标签: drawing processing

我试图在Processing草图中插入延迟。我试过Thread.sleep(),但我想它不会起作用,因为在Java中,它会阻止渲染图形。

基本上,我必须绘制一个三角形的三角形延迟。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

  

处理程序可以读取计算机时钟的值。使用 second()函数读取当前秒,该函数返回0到59之间的值。使用分钟()函数读取当前分钟,该函数也返回值从0到59. - Processing: A Programming Handbook

其他时钟相关功能: millis() day()月()年()

这些数字可用于触发事件并计算时间的流逝,如下文所述的处理草图中所述:

// Uses millis() to start a line in motion three seconds 
// after the program starts

int x = 0;

void setup() { 
  size(100, 100);
}

void draw() {
  if (millis() > 3000) {
    x++;
    line(x, 0, x, 100);
  }
}

这是一个三角形的例子,它的边在3秒后被绘制出来(三角形每分钟重置一次):

int i = second();

void draw () {
  background(255);
  beginShape();
  if (second()-i>=3) {
    vertex(50,0);
    vertex(99,99);
  }
  if (second()-i>=6) vertex(0,99);
  if (second()-i>=9) vertex(50,0);
  endShape();
}

答案 1 :(得分:2)

如@ user2468700所示,请使用计时功能。我喜欢millis()

如果您有值以跟踪特定时间间隔和当前时间(持续更新)的时间,您可以根据延迟/等待检查一个计时器(手动更新的计时器)是否落后于另一个计时器(连续计时器)值。如果是,请更新您的数据(在这种情况下绘制的点数),最后是本地秒表值。

这是一个基本的评论示例。 渲染与数据更新分开,以便于理解。

//render related
PVector[] points = new PVector[]{new PVector(10,10),//a list of points
                                 new PVector(90,10),
                                 new PVector(90,90)};
int pointsToDraw = 0;//the number of points to draw on the screen
//time keeping related
int now;//keeps track of time only when we update, not continuously
int wait = 1000;//a delay value to check against

void setup(){
  now = millis();//update the 'stop-watch'
}
void draw(){
  //update
  if(millis()-now >= wait){//if the difference between the last 'stop-watch' update and the current time in millis is greater than the wait time
    if(pointsToDraw < points.length) pointsToDraw++;//if there are points to render, increment that
    now = millis();//update the 'stop-watch'
  }
  //render
  background(255);
  beginShape();
  for(int i = 0 ; i < pointsToDraw; i++) {
    vertex(points[i].x,points[i].y);
  }
  endShape(CLOSE);
}