在绑定循环中创建一行图像?

Create a row of images in a bound loop?

所以我有一排 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] [ ]

我知道我对模数运算符的使用并没有得到我想要的结果,但我无法确定我应该说什么。有什么建议吗?

我希望你现在已经找到答案了,不过我还是会回答的。

这是一个典型的错误编程习惯导致的错误案例。你可能是新手,我并不是说这个不好,但你可以从中学习 ;)

首先,'width'和'length'是Processing中的关键字,不应该赋值,只能读出。

其次,除非有特定原因,否则习惯从 0 开始 for 循环。这是因为计算机的工作方式以及它使其余代码中的逻辑更容易。例如模数。

这也是你的代码的错误。

  • 第一个杯子绘制在 x = width*(1%3) = width
  • 第二个杯子绘制在x = width*(2%3) = 2*width
  • 第三个杯子绘制在x = width*(3%3) = 0*width=0

使用的逻辑并没有错,而是基于从0开始的for循环。

此代码可以满足您的需求。它在 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));
    }
  }
}