Почему мой код отображает неподвижные круги? - PullRequest
0 голосов
/ 18 мая 2018

Итак, вот мой код, довольно простые вещи:

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 голосов
/ 18 мая 2018

Вы можете изменить способ определения и работы с для петель:

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); 
  }
}
0 голосов
/ 18 мая 2018

Переменные, которые вы определяете внутри функции, имеют только в области действия внутри этой функции.Когда функция заканчивается, эти переменные выходят из области видимости и больше не существуют.В следующий раз, когда вы запустите функцию, вы заново создадите переменные с тем же значением, поэтому вы не видите никакого движения.

Я также немного озадачен тем, что вы пытаетесь сделать: почемуу вас есть переменные 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.Работайте вперёд небольшими шагами вместо того, чтобы пытаться взять всё на себя сразу.Удачи.

0 голосов
/ 18 мая 2018

Я думаю, вы можете достичь своей цели, определив xPos и ​​yPos как глобальные переменные и установив их только один раз на 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); 
  }
}
...