我的任务是绘制一个10 x 10轮的网格。每个都应该是一个随机的颜色,并有很多像真正的轮子一样的轮辐。我必须使用嵌套for循环来做到这一点。
我已经得到了下面的代码但由于某种原因它绘制了一个10 x无限网格。我不明白为什么外循环应该只运行10次。
float XPos = 25;
float YPos = 25;
float Radius = 20;
void setup() {
size(500, 500);
}
void draw() {
for (int h = 0; h < 10; h++) {
for (int i = 0; i < 10; i++) {
float RanR = random(250);
float RanG = random(250);
float RanB = random(250);
stroke(RanR, RanG, RanB);
ellipse(XPos, YPos, Radius * 2, Radius * 2);
for (int j = 0; j < 360; j += 10) {
stroke(RanR, RanG, RanB);
line(XPos,
YPos,
XPos + Radius * sin(radians(j)),
YPos + Radius * cos(radians(j))
);
}
XPos += Radius * 2;
}
XPos = 25;
YPos += Radius * 2;
}
}
答案 0 :(得分:2)
draw()
功能每秒自动调用60次。您已将XPos
和YPos
变量保存在draw()
函数之外,因此您在draw()
函数中对它们所做的任何更改都会在下次保留draw()
{1}}被调用。
您可以在for循环中创建它们,而不是将XPos
和YPos
变量保存在草图的顶层,而是将它们基于h
和{{1 }}:
i
请注意,这会导致您的圆圈以每秒60次的随机颜色重绘。您可以使用randomSeed()功能每次获取相同的随机数,也可以在float Radius = 20;
void setup() {
size(500, 500);
}
void draw() {
for (int h = 0; h < 10; h++) {
for (int i = 0; i < 10; i++) {
float XPos = 25+40*h;
float YPos = 25+40*i;
float RanR = random(250);
float RanG = random(250);
float RanB = random(250);
stroke(RanR, RanG, RanB);
ellipse(XPos, YPos, Radius * 2, Radius * 2);
for (int j = 0; j < 360; j += 10) {
stroke(RanR, RanG, RanB);
line(XPos,
YPos,
XPos + Radius * sin(radians(j)),
YPos + Radius * cos(radians(j))
);
}
}
}
}
结束时调用noLoop()
,以便不会再次自动调用它。
答案 1 :(得分:0)
您的代码看起来不错,但draw
必须可重入。
也就是说,在第二次被调用时,它应该开始在同一位置绘制。
所以(除了Radius),字段应该保持在draw方法的本地。
void draw() {
float XPos = 25;
float YPos = 25;
float Radius = 20;
在真实的GUI中,只要必须更新屏幕,就会调用draw或paint方法。
我的猜测:不止一次调用draw。
顺便说一句。 Java约定是对字段,局部变量和方法使用初始小写字母:xPos,yPos,radius。