随机 2D Cityscape 生成器,我如何随机生成?
Random 2D Cityscape generator, how do I randomly generate?
我必须在处理过程中随机生成具有 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;
}
}
问题是您每帧都会生成随机的城市景观,但您永远不会清除旧帧。这意味着您的新框架恰好绘制在旧框架之上。
为了更好地了解我在说什么,通过在 draw()
函数的第一行添加对 background()
的调用来清除旧框架:
void draw() {
background(200);
for (int i = 0; i < 8; i++) {
building(boxX, boxY);
translate(150, 0);
}
}
你需要退后一步,问问自己到底想要发生什么。你想每一帧都生成一个新的城市景观吗?如果是这样,请将呼叫留在 background()
中。您只想生成一个城市景观吗?如果是这样,则调用 noLoop()
以防止 draw()
函数被多次调用,或者将您的城市景观存储在您重绘每一帧而不是重新生成的数据结构中。
我必须在处理过程中随机生成具有 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;
}
}
问题是您每帧都会生成随机的城市景观,但您永远不会清除旧帧。这意味着您的新框架恰好绘制在旧框架之上。
为了更好地了解我在说什么,通过在 draw()
函数的第一行添加对 background()
的调用来清除旧框架:
void draw() {
background(200);
for (int i = 0; i < 8; i++) {
building(boxX, boxY);
translate(150, 0);
}
}
你需要退后一步,问问自己到底想要发生什么。你想每一帧都生成一个新的城市景观吗?如果是这样,请将呼叫留在 background()
中。您只想生成一个城市景观吗?如果是这样,则调用 noLoop()
以防止 draw()
函数被多次调用,或者将您的城市景观存储在您重绘每一帧而不是重新生成的数据结构中。