2014-11-10 2 views
0

Я пытаюсь сделать звезды в ночном небе. Проблема в том, что по какой-то причине, когда звезды продолжают мигать бесконечно и не остаются там, где они есть. Сейчас мой код выглядит следующим образом:Могу ли я сделать часть моего кода неактивной в обработке?

float r1 = 14; 
float r2 = 59; 
float g1 = 4; 
float g2 = 136; 
float b1 = 77; 
float b2 = 237; 
int smX = 350; 
int smY = 310; 
void setup() { 
    size(500, 600); 
    smooth(); 
    noStroke(); 
} 
void draw() { 

    //sky&background stuff 
    for(float i = 0; i <= 600; i++) { 
    float r = lerp(r1, r2, i/600); 
    float g = lerp(g1, g2, i/600); 
    float b = lerp(b1, b2, i/600); 
    stroke(r, g, b); 
    line(0, i, width, i); 
} 

    for (int s = 0; s < 40; s++) { 
    stroke(255); 
    float starX = random(0, 500); 
    float starY = random(0, 600); 
    if (s < 40) { 
    line(starX, starY,starX, starY); 
    } 
} 
} 

В идеале, после того, как появляются звезды, Id, как им оставаться там, где они есть. Любая помощь действительно ценится.

ответ

0

Вместо того, чтобы пересчитывать новые случайные значения каждый раз, когда вызывается draw(), вы можете рассчитать случайные значения только один раз, внутри setup(), а затем сохранить их в пару массивов и просто нажать draw() draw stars используя значения из массива? Таким образом, позиции звезд будут одинаковыми при каждом вызове draw().

+0

Это будет работать, но на самом деле это именно то, для чего нужен метод noLoop. – Fraser

1

Вы можете просто добавить функцию noLoop в конец вашего метода настройки.

void setup() { 
//rest of your code 
noLoop(); 
} 

Это прекращает обработку от непрерывного выполнения кода в пределах draw().

Смежные вопросы