0

我有这个代码。打印一个矩形 10 次,每次向右移动 60 张图片,每次打印前延迟 1000 毫秒。它没有,我不明白为什么。有人可以向我解释一下吗?

int time;
int wait =1000;

void setup()
{
  time = millis();
  size(800, 200);
  background(255);
}

void draw() {
int i=0;
  while (i<10){
    if(millis() - time >= wait){
      time = millis();
    }

  translate(60, 0);
  rect(0, 0, 10, 10);
  }
}
4

2 回答 2

1

发生这种情况是因为您正在阻止 draw() 函数完成。你可以通过设置一个整数 i = 0 然后说 while (i<10) {} 来做到这一点。同时,您永远不会更改 i,因此代码在 while() 内执行无限循环,并且永远不会到达 draw() 函数的末尾,该函数将使用您想要的矩形刷新画布。您不能设置自己的渲染循环,因为处理需要自己完成才能显示。因此,您必须“顺其自然”并定义其循环中的所有内容,即 draw() 函数。有点像这样:

int time;
int wait =1000;
int translateX;
void setup()
{
  time = millis();
  size(800, 200);
  background(255);
}

void draw() {
  if (millis() - time >= wait) {
    time = millis();
    translateX +=60;
    translate(translateX, 0);
    rect(0, 0, 10, 10);
  }
}
于 2013-11-05T21:50:17.163 回答
0

正如@Petros 提到的,你让自己陷入了无限循环,但更容易使用delay()函数和条件,只需要打印多少次。

int wait = 1000;
int translate = 0;
int count = 0;

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

void draw() {
  if(count < 10)
  {
    delay(wait);
    translate += 60;
    translate(translate, 0);
    rect(0, 0, 10, 10);
    count++;
  }  
}

编辑

升级版本,因此您可以更改MAX打印的记录。它还会根据记录的数量改变画布的大小。还在评论中根据需要将数据流添加到右侧并向下移动。

int wait = 100;
int translate = 0;
int count = 0;
static final int MAX = 10;

void setup()
{  
  size(60*MAX, 12*MAX);
  background(255);
}

void draw() {
  if(count < MAX)
  {
    delay(wait);
    translate(translate, count*11);
    translate += 60;
    rect(0, 0, 10, 10);
    fill(50);
    text("Data", 15, 10);
    noFill();
    count++;
  }  
}
于 2013-11-06T10:00:03.670 回答