最も簡単な方法は、 millis()のような時間管理関数を使用して変数に時間を格納することです。
アイデアは簡単です:
- 前の時間と遅延量を保存する
- 継続的に時間を追跡する
- 現在の時間が以前に保存された時間と遅延よりも大きい場合、その遅延間隔は過ぎています。
アイデアを説明するための簡単なスケッチを次に示します。
int now,delay = 1000;
void setup(){
now = millis();
}
void draw(){
if(millis() >= (now+delay)){//if the interval passed
//do something cool here
println((int)(frameCount/frameRate)%2==1 ? "tick":"tock");
background((int)(frameCount/frameRate)%2==1 ? 0 : 255);
//finally update the previously store time
now = millis();
}
}
そしてあなたのコードに統合されます:
int ballsAdded = 0;
int ballsTotal = 10;
Ball [] ball;
int now,delay = 1500;
void setup()
{
size(600,600,P3D);sphereDetail(6);noStroke();
ball = new Ball[ballsTotal];
now = millis();
}
void draw()
{
//update based on time
if(millis() >= (now+delay)){//if the current time is greater than the previous time+the delay, the delay has passed, therefore update at that interval
if(ballsAdded < ballsTotal) {
ball[ballsAdded] = new Ball();
ballsAdded++;
println("added new ball: " + ballsAdded +"/"+ballsTotal);
}
now = millis();
}
//render
background(255);
lights();
//quick'n'dirty scene rotation
translate(width * .5, height * .5, -1000);
rotateX(map(mouseY,0,height,-PI,PI));
rotateY(map(mouseX,0,width,PI,-PI));
//finally draw the spheres
for (int i = 0; i < ballsAdded; i++) {
fill(map(i,0,ballsAdded,0,255));//visual cue to sphere's 'age'
ball[i].drawBall();
}
}
class Ball
{
float sphereSize = random(30, 90);
float sphereX = random(-2200, 2800);
float sphereY = 0;
float sphereZ = random(-2200, 2800);
void drawBall()
{
pushMatrix();
translate(sphereX, sphereY, sphereZ);
sphere(sphereSize);
sphereY +=1;
popMatrix();
}
}