所以,这是我的代码,非常简单的东西:
void setup(){
size(200,200);
background(255);
}
void draw(){
ac();
}
void ac(){
int xPos = 10;
int yPos = 20;
int sizeXY = 40;
int xInt = 10;
int yInt = 20;
int[] xM = new int[5];
int[] yM = new int[5];
for(int x:xM){
xM[x] = xPos;
xPos += xInt;
}
for(int y:yM){
yM[y] = yPos;
yPos += yInt;
}
for(int z = 0;z<5;z++){
ellipse(xM[z],yM[z],sizeXY,sizeXY);
}
}
然而,当我测试它时,我只得到2个不动圈,一个在左上角,一个在中心。可能导致这种情况的原因以及如何修复它以便在X轴和Y轴逐渐增加的情况下使用for循环逐渐创建圆圈?
答案 0 :(得分:1)
您在函数内定义的变量在该函数内仅为范围。当函数结束时,这些变量超出范围并且不再存在。下次运行该函数时,您将重新创建具有相同值的变量,这就是您没有看到任何移动的原因。
我对你要做的事情也有点困惑:为什么你有xPos
和yPos
个变量,以及xM
和yM
个变量?你打算用它们做什么?如果你想显示一堆移动的圆圈,我的猜测是你可以摆脱xPos
和yPos
而只使用数组。
此外,此for
循环未按预期执行:
for(int x:xM){
xM[x] = xPos;
xPos += xInt;
}
您可以在此处循环xM
中的值,然后将它们用作索引。你可能只是想这样做:
for(int i = 0; i < xM.length; i++){
xM[i] += xInt;
}
请注意,我已经删除了xPos
变量,因为我认为您不需要它。第二个for
循环也会出现同样的问题。
我建议你退一步,先从更简单的事情开始。使用包含单个值的数组,然后像使用0
索引的任何其他变量一样处理它,例如xM[0] += xInt
。让它先工作一个圆圈。然后添加第二个圆圈并尝试添加for
循环。以小步骤向前迈进,而不是试图一次性完成所有事情。祝你好运。
答案 1 :(得分:-1)
我认为,您可以通过将xPos和yPos定义为全局变量并在setup-function中将它们设置为10或20来实现您的目标。
所以你的代码看起来像这样:
int xPos;
int yPos;
void setup(){
size(200,200);
background(255);
xPos=10;
yPos=20;
}
void draw(){
ac();
}
void ac(){
//int xPos = 10;
//int yPos = 20;
int sizeXY = 40;
int xInt = 10;
int yInt = 20;
int[] xM = new int[5];
int[] yM = new int[5];
for(int x:xM){
xM[x] = xPos;
xPos += xInt;
}
for(int y:yM){
yM[y] = yPos;
yPos += yInt;
}
for(int z = 0;z<5;z++){
ellipse(xM[z],yM[z],sizeXY,sizeXY);
}
}
答案 2 :(得分:-1)
您可以更改定义和使用 for 循环的方式:
void setup(){
size(200,200);
background(255);
}
void draw(){
ac();
}
void ac(){
int xPos = 10;
int yPos = 20;
int sizeXY = 40;
int xInt = 10;
int yInt = 20;
int[] xM = new int[5];
int[] yM = new int[5];
for(int z = 0;z<xM.length;z++){
xM[z] = xPos;
xPos += xInt;
}
for(int z = 0;z<yM.length;z++){
yM[z] = yPos;
yPos += yInt;
}
for(int z = 0;z<5;z++){
ellipse(xM[z],yM[z],sizeXY,sizeXY);
}
}