如何在处理3.4中使用Java创建自定义延迟功能?

时间:2018-09-30 13:41:31

标签: java while-loop processing custom-function

float x = 0;

void setup() {
    size(200,200);
    frameRate(60);
    background(255);
}

int v = (int)random(0,width);
int b = (int)random(0,height);

void draw() {
    drawCar(v,b,50,0);
    secondDelay(5);
    v = (int)random(0,width);
    b = (int)random(0,height);
}

void drawCar(int x, int y, int thesize, int col) {
    int offset = thesize/4;

    //draw main car body
    rectMode (CENTER);
    stroke(200);
    fill(col);
    rect(x,y,thesize, thesize/2);

    //draw wheel relative to car body center
    fill(0);
    rect(x-offset,y-offset,offset,offset/2);
    rect(x+offset,y-offset,offset,offset/2);
    rect(x+offset,y+offset,offset,offset/2);
    rect(x-offset,y+offset,offset,offset/2);
}

void secondDelay(int aSecond){
    int aS;
    aS = aSecond * 60;
    while(aS > 0) {
        aS--;
    }
}

我想做的是使secondDelay()函数作为延迟draw函数(这是一个更新每一帧的循环)的方式来工作。而且frameRate本身是60,因此draw()的运行速度是每秒60帧。 这是通过将我想要的秒数作为secondDelay(amountofseconds)的参数来完成的。然后在该secondDelay()函数中 它将秒数乘以每秒的帧数(即60)。现在,我有了需要等待的帧数,并将其放入名为aS的变量中。然后,我在secondDelay()函数中执行的操作是创建一个while循环,该循环每次看到变量aS大于0时运行。然后我每次从aS减去1直到循环它不再大于0。那是您希望延迟的秒数被延迟,然后再次执行整个draw()循环。

这就是我解释自己编写的代码的方法,但是它不起作用。相反,它的作用就像不存在secondDelay(5);,所以它只是在每帧创建新车。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

对于您想做的事情,您必须计算帧数。如果帧数超过了一个等于延迟时间跨度的数字,那么您就必须画一辆新车。
您不需要延迟,等待或睡眠一会儿的功能,但是您需要一个告诉并发出一段时间的信号的功能。

创建一个全局帧计数器(frame_count)并在secondDelay函数中对帧进行计数。如果计数器超过60*aSecond,则函数将计数器重置为0。如果计数器为0,则通过返回boolean值true来发出信号。

int frame_count = 0; 
boolean secondDelay(int aSecond){

    boolean signal = frame_count==0;

    if ( frame_count >= 60*aSecond ) {
        frame_count = 0;
    } else { 
        frame_count ++;
    }
    return signal;
}

每次secondDelay返回true并向您发出信号时,您就必须在draw函数中绘制一辆新车:

void draw() {

    if ( secondDelay(5) ) {
        drawCar(v,b,50,0);
        v = (int)random(0,width);
        b = (int)random(0,height);
    }
}