假設您的單元格具有3個條目的「大小」,則應在內部循環上使用* 3
。否則,你會錯過每行三分之二的細胞。 您還需要將width
乘以3才能得到正確的行。
for (int y = 0; y < height; y++) {
for (int x = 0; x < width * 3; x+=3) {
arr[x + width * 3 * y] = 1;
}
}
一般來說,你需要這樣的情況下,結構如下:
for (int y = 0; y < height; y++) {
for (int x = 0; x < width * cellWidth; x+= cellWidth) {
arr[x + width * cellWidth * y] = 1;
}
}
(分別爲cellWidth
是3你的情況)
要稍微簡化這一點,你可以在循環假設您的單元格的寬度爲1(與正常情況類似),並在實際分配值時乘以cellWidth
:
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int index = (x + width * y) * cellWidth;
arr[index + 0] = 1; // First 'cell entry'
arr[index + 1] = 1; // Second
...
arr[index + cellWidth - 1] = 1; // Last
}
}
另一種解決方案是創建「大項目」使用struct
例如:
typedef struct { int r, int g, int b } t_rgb;
t_rgb* arr = new t_rgb[height * width];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
arr[x + width * y].r = 1;
}
}
,你可以使用它作爲一個普通陣列(編譯器完成所有的計算你)。這也使得它更清楚你的代碼中發生了什麼。
是,紅色通道 – rluks