2016-11-04 144 views
1

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

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

问题是,你正在每一帧生成一个随机的城市景观,但你永远不会清理旧的框架。这意味着你的新框架只是在你的旧框架上绘制出来的。

为了更好地明白我在说什么,清除掉旧的框架在你的draw()功能附加调用background()作为第一行:

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

你需要退后一步,并要求你自己正是你想要发生的事情。你想每个框架产生一个新的城市景观?如果是这样,请致电background()英寸。您是否想要生成一个单一的城市景观?如果是,则调用noLoop()以防止draw()函数被多次调用,或将您的城市景观存储在重绘每一帧而不是重新生成的数据结构中。

+0

非常感谢!我用noLoop。 –