1

我如何在一定时间后调用我的数组,以便它以特定间隔创建一个对象。我希望我的阵列每 3 秒创建一个球体。

Ball [] ball;

void setup()
{
  size(600,600,P3D);

  ball = new Ball[3];
  ball[0] = new Ball();
  ball[1] = new Ball();
  ball[2] = new Ball();
}

void draw()
{
  background(255);
  for (int i = 0; i < ball.length; i++) {
      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()
  {
    translate(sphereX, sphereY, sphereZ);
    sphere(sphereSize);
    sphereY +=1;
  }
}
4

1 回答 1

2

最简单的方法是使用类似millis()的计时函数将时间存储在变量中。

这个想法很简单:

  1. 存储先前的时间和延迟量
  2. 持续跟踪时间
  3. 如果当前时间大于先前存储的时间和延迟,则该延迟间隔已经过去。

这是一个简单的草图来说明这个想法:

    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();
  }
}
于 2013-02-16T22:12:45.583 回答