为什么我的代码显示不动圈?

时间:2018-05-18 06:47:50

标签: methods processing draw

所以,这是我的代码,非常简单的东西:

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循环逐渐创建圆圈?

3 个答案:

答案 0 :(得分:1)

您在函数内定义的变量在该函数内仅为范围。当函数结束时,这些变量超出范围并且不再存在。下次运行该函数时,您将重新创建具有相同值的变量,这就是您没有看到任何移动的原因。

我对你要做的事情也有点困惑:为什么你有xPosyPos个变量,以及xMyM个变量?你打算用它们做什么?如果你想显示一堆移动的圆圈,我的猜测是你可以摆脱xPosyPos而只使用数组。

此外,此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); 
  }
}