我必须在处理中随机生成具有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;
}
}
答案 0 :(得分:1)
问题在于,您每个帧都会生成一个随机都市风景,但您永远不会清除旧帧。这意味着您的新框架只是在旧框架的顶部绘制。
为了更好地了解我正在谈论的内容,请在background()
函数的第一行添加draw()
调用来清除旧框架:
void draw() {
background(200);
for (int i = 0; i < 8; i++) {
building(boxX, boxY);
translate(150, 0);
}
}
你需要后退一步,问自己到底想要发生什么。你想在每一帧都产生一个新的城市景观吗?如果是,请将呼叫留在background()
中。您是否只想生成一个城市景观?如果是,请调用noLoop()
以防止多次调用draw()
函数,或将城市景观存储在每帧重绘而不是重新生成的数据结构中。