Мой движок плиток идет вперед.Он может рисовать квадратные, шестиугольные и изометрические ступенчатые точки обзора.Где я борюсь, так это с изометрической повернутой (или ромбовидной) точкой зрения.Ниже приведено изображение карты 10х10 с бриллиантами и (упрощенный) код, используемый для ее построения.Плитки имеют размер 128x64.
http://garrypettet.com/images/forum_images/5%20col%20x%205%20rows.png
for row = 0 to rowLimit
for column = 0 to columnLimit
x = column * (TileWidth/2) + (row * (TileWidth/2)) + Origin.X
y = (column * (TileHeight/2)) - (row * (TileHeight/2)) + Origin.Y
// Draw the tile's image
buffer.Graphics.DrawPicture(Tiles(column, row).Image, x, y)
next column
next row
// Draw the buffer to the canvas
g.DrawPicture(buffer, 0, 0)
Я знаю, что это будет рисовать содержимое всех плиток (), а не только те, которые видны на экране, но я пытаюсьчтобы сначала получить основы.
То, что я не могу понять, - это простой способ преобразования координат x, y на карте в столбец мозаики, координаты строки.Я попытался повернуть вспять:
x = column * (TileWidth/2) + (row * (TileWidth/2)) + Origin.X
y = (column * (TileHeight/2)) - (row * (TileHeight/2)) + Origin.Y
Чтобы вычислить столбец и строку, заданные x и y, и придумал следующее:
column = ((x/2) - (Origin.X/2) + y + Origin.Y) / TileHeight
row = ((x/2) - (Origin.X/2) - y - Origin.Y) / TileHeight
Но, похоже, это не работает.Кто-нибудь может придумать лучший способ сделать это?Есть ли лучший способ превратить сетку прямоугольников в ромб и обратно (учитывая, что я очень мало знаю о матрицах ....).
Спасибо,