Оновлення: виправлений алгоритм візуалізації карти, додано більше ілюстрацій, змінено форматування.
Можливо, перевагою техніки «зигзаг» для відображення плиток на екрані можна сказати, що плитки xта yкоординати розташовані на вертикальній та горизонтальній осях.
Підхід "малювання в ромбі":
Намалювавши ізометричну карту за допомогою "малювання в ромбі", що, на мою думку, стосується просто рендеринга карти за допомогою вкладеної forпетлі над двовимірним масивом, наприклад на цьому прикладі:
tile_map[][] = [[...],...]
for (cellY = 0; cellY < tile_map.size; cellY++):
for (cellX = 0; cellX < tile_map[cellY].size cellX++):
draw(
tile_map[cellX][cellY],
screenX = (cellX * tile_width / 2) + (cellY * tile_width / 2)
screenY = (cellY * tile_height / 2) - (cellX * tile_height / 2)
)
Перевага:
Перевага підходу полягає в тому, що це просте вкладене forколо з досить прямою логікою вперед, яке стабільно працює на всіх плитках.
Недолік:
Один недолік цього підходу полягає в тому, що xі yкоординати плитки на карті буде збільшуватися в діагональних ліній, які могли б зробити його більш важко візуально відобразити розташування на екрані на карті , представленої в вигляді масиву:

Однак реалізація вищевказаного коду має бути хиткою - наказ відтворення призведе до того, що плитки, які повинні бути за певними плитками, будуть намальовані зверху на плитках спереду:

Щоб виправити цю проблему, порядок внутрішнього forциклу необхідно змінити - починаючи з найвищого значення та переходячи до нижчого значення:
tile_map[][] = [[...],...]
for (i = 0; i < tile_map.size; i++):
for (j = tile_map[i].size; j >= 0; j--): // Changed loop condition here.
draw(
tile_map[i][j],
x = (j * tile_width / 2) + (i * tile_width / 2)
y = (i * tile_height / 2) - (j * tile_height / 2)
)
За допомогою наведеного вище виправлення відображення карти слід виправити:

"Зігзаг" підхід:
Перевага:
Можливо, перевага "зигзагу" підходу полягає в тому, що відображена карта може здатися трохи більш вертикально компактною, ніж "алмазний" підхід:

Недолік:
Не намагаючись реалізувати техніку zig-zag, недоліком може бути те, що писати код візуалізації трохи складніше, тому що він не може бути записаний так просто, як вкладений forцикл над кожним елементом масиву:
tile_map[][] = [[...],...]
for (i = 0; i < tile_map.size; i++):
if i is odd:
offset_x = tile_width / 2
else:
offset_x = 0
for (j = 0; j < tile_map[i].size; j++):
draw(
tile_map[i][j],
x = (j * tile_width) + offset_x,
y = i * tile_height / 2
)
Крім того, може бути дещо складно спробувати визначити координату плитки через поетапний характер порядку виведення:

Примітка. Ілюстрації, що містяться у цій відповіді, були створені з реалізацією Java коду подання плитки, представленого із таким intмасивом як карта:
tileMap = new int[][] {
{0, 1, 2, 3},
{3, 2, 1, 0},
{0, 0, 1, 1},
{2, 2, 3, 3}
};
Зображення плитки:
tileImage[0] -> Коробка з коробкою всередині.
tileImage[1] -> Чорний ящик.
tileImage[2] -> Біла коробка.
tileImage[3] -> Коробка з високим сірим предметом у ній.
Примітка про ширину та висоту плитки
Змінні tile_widthта tile_heightвикористовувані у наведених вище прикладах коду стосуються ширини та висоти основної плитки на зображенні, що представляє плитку:

Використання розмірів зображення буде працювати, доки розміри зображення та розміри плитки збігаються. В іншому випадку карта плитки може бути відображена з проміжками між плитками.