Создать ряд изображений в связанном цикле? - PullRequest
0 голосов
/ 22 ноября 2018

Итак, у меня есть ряд из 3 чайных чашек, которые я хочу сгенерировать за один цикл for.В зависимости от значения 'count' будет отображаться PImage "emptyCup" или "fullCup".Код в основном работает, но графический порядок строк не тот, который мне нужен.

Вот цикл в двух словах.

int count = 2;
int width = 210;
int length = 180;

for (int i = 1; i <= 3; i++) {
  if (i <= 3) {
    length = length1;
  } else if ((3 <= i) && (i <= 6)) {
    length = length2;
  } else {
    length = length3;
  }
   if ((i <= count)) {
     image(fullCup, (width * (i % 3)), length);
     println("FULL CUP: Count = " + count + ", i = " + i);
   } else {
     println("EMPTY CUP: Count = " + count + ", i = " + i);
     image(emptyCup, (width * (i % 3)), length);
   }
}

Следующий вывод должен дать мне следующий вывод:где [o] - полная чашка, а [] - пустая:

[o] [o] [ ] 

вместо этого она дает мне следующее:

[ ] [o] [o]

Аналогично, если я изменю «count» на 4и продолжайте цикл for до 6, тогда я получу это:

[o] [o] [o]
[ ] [o] [ ]

Я знаю, что мое использование оператора модуля не дает мне то, что я хочу, но я не могу поставитьмой палец на то, что я должен сказать вместо этогоЛюбой совет?

1 Ответ

0 голосов
/ 04 декабря 2018

Надеюсь, вы уже нашли ответ, но я все равно на него отвечу.

Это классический случай ошибки, вызванной плохими привычками программирования.Вы можете быть новичком в этом, и я не имею в виду это плохо, но вы можете извлечь из этого урок;)

Во-первых, «ширина» и «длина» - это ключевые слова в обработке, которые должныне присваивается, только считывается.

Во-вторых, цикл запускается с 0, если только для этого нет особой причины.Это из-за того, как работает компьютер, и потому, что это облегчает логику в остальной части кода.Например, модуль.

Это также ошибка вашего кода.

  • Первая чашка рисуется при x = ширина * (1% 3) = ширина
  • Вторая чашка рисуется при x = ширина * (2% 3) = 2 * ширина
  • Третья чашка рисуется при x = ширина * (3% 3) = 0 * ширина = 0

Используемая логика не является неправильной, но основана на цикле for, который начинается с 0.

Этот код выполняет то, что вы хотите.Он рисует первое изображение при x = 0 и y = 0.При необходимости вы можете добавить смещение.

void setup() {
  PImage fullCup = loadImage("fullCup.jpg");
  PImage emptyCup = loadImage("emptyCup.jpg");
  size(800, 800);

  int count = 4;
  int numberOfCups = 6;
  int img_width = 210;
  int img_length = 180;

  for (int i = 0; i < numberOfCups; i++) {
    if (i < count) {
      image(fullCup, img_width * (i % 3), img_length*(i/3));
    } else {
      image(emptyCup, img_width * (i % 3), img_length*(i/3));
    }
  }
}
...