我试图在Processing
草图中插入延迟。我试过Thread.sleep()
,但我想它不会起作用,因为在Java中,它会阻止渲染图形。
基本上,我必须绘制一个三角形的三角形延迟。
我该怎么做?
答案 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);
}