2016-11-04 4 views
1

나는 3 개의 계층화 된 함수가있는 도시를 무작위로 생성해야합니다. 나는 무작위 정수까지 실행되는 루프에서 각 층을 그리고 건물마다 층을 가지고 동일한 작업을 수행함으로써 그렇게합니다. 현재 바닥은 처음에 무작위로 생성되지만 결국에는 무작위 기능의 최대 값까지 채 웁니다. 그들이 무작위로 머무를 수 있도록 어떻게 얻을 수 있습니까? 고마워, 코드는 아래 있습니다.임의의 2D Cityscape 생성기, 어떻게 임의로 생성합니까?

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

문제는 매 프레임마다 임의의 도시 풍경을 생성하는 것이지만 오래된 프레임을 지우는 것이 아닙니다. 즉, 새 프레임이 이전 프레임 위에 바로 그려집니다. 당신은 다시 걸음을하고 요청해야

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

:

는 더 나은 draw() 기능의 첫 번째 라인으로 background()에 대한 호출을 추가하여 기존의 프레임을 취소, 내가 무슨 말 보려면 너 자신이 정확히 무엇을하고 싶은지. 매 프레임마다 새로운 도시 풍경을 생성하고 싶습니까? 그렇다면 전화를 background()으로 두십시오. 단일 도시만을 생성 하시겠습니까? 그렇다면 함수가 두 번 이상 호출되지 않게하려면 noLoop()으로 전화하거나 도시를 재생성하는 대신 모든 프레임을 다시 그리는 데이터 구조에 저장하십시오.

+0

대단히 감사합니다. 나는 아무 것도 사용하지 않았다. –

관련 문제