我想在夜空中制造星星。问题在于,由于某种原因,当恒星不停地闪烁并且不会停留在它们所在的位置时。现在,我的代码看起来像这样:
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);
}
}
}
理想情况下,在明星出现之后,我喜欢他们留在原地。任何帮助都非常感谢。
答案 0 :(得分:1)
您只需将noLoop功能添加到设置方法的末尾即可。
void setup() {
//rest of your code
noLoop();
}
这使得Processing不再继续执行draw()
内的代码。
答案 1 :(得分:0)
不是每次调用draw()时都重新计算新的随机值,你可以在setup()中只计算一次随机值,然后将它们存储到几个数组中,然后使用draw()绘制星形数组中的值?那样的星星&#39;每次调用draw()时,位置都是相同的。