随机2D城市景观生成器,我该如何随机生成?

时间:2016-11-04 06:57:43

标签: java random 2d processing

我必须在处理中随机生成具有3个分层功能的城市景观。我这样做是通过在循环中绘制每个楼层直到一个随机整数,并对每个建筑物的楼层做同样的事情。目前,楼层最初是随机生成的,但随后它们最终填写到随机函数的最大值。我如何得到它以保持随机?谢谢,代码如下。

int boxX = 0;
int boxY = 479;
void setup() {
  size(1000, 500);
  background(255); 
  frameRate(10);
}

void draw() {
  for (int i = 0; i < 8; i++) {
    building(boxX, boxY);
    translate(150, 0);
  }
}
void room(int boxX, int boxY) {
  rect(boxX, boxY, 20, 20);
}

void floor(int boxX, int boxY) {
  int randomNum = (int)random(3, 5);
  for (int i=0; i<= randomNum; i++) {
    room(boxX, boxY);
    boxX += 20;
  }
}

void building(int boxX, int boxY) {
  int randomNum = int(random(10, 20));
  for (int i = 0; i < randomNum; i++) {
    floor(boxX, boxY);
    boxY -= 20;
  }
}

1 个答案:

答案 0 :(得分:1)

问题在于,您每个帧都会生成一个随机都市风景,但您永远不会清除旧帧。这意味着您的新框架只是在旧框架的顶部绘制。

为了更好地了解我正在谈论的内容,请在background()函数的第一行添加draw()调用来清除旧框架:

void draw() {
  background(200);
  for (int i = 0; i < 8; i++) {
    building(boxX, boxY);
    translate(150, 0);
  }
}

你需要后退一步,问自己到底想要发生什么。你想在每一帧都产生一个新的城市景观吗?如果是,请将呼叫留在background()中。您是否只想生成一个城市景观?如果是,请调用noLoop()以防止多次调用draw()函数,或将城市景观存储在每帧重绘而不是重新生成的数据结构中。