移动带有翻译和延时的矩形?

时间:2013-11-05 20:19:10

标签: processing

我有这个代码。在每次打印之前,每次打印矩形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);
  }
}

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为您正在阻止draw()函数完成。你可以通过设置一个整数i = 0然后你说while(i <10){}来做到这一点。同时你永远不会改变我,因此代码在while()内部进行无限循环,并且永远不会到达draw()函数的末尾,该函数将使用您想要的矩形刷新画布。您无法设置自己的渲染循环,因为Processing需要自己完成才能显示。因此你必须“顺其自然”并沿着它的循环定义一切,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);
  }
}

答案 1 :(得分: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。它还会根据rec的数量改变画布的大小。还将数据流添加到右侧,并根据需要在评论中向下移动。

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++;
  }  
}