2016-11-04 64 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。 –