Я знаю, что это старый пост, но я хочу обновить его, поскольку некоторые люди все еще могут искать ответы на этот вопрос, как я делал это сегодня. Тем не менее, я понял это сам. Существует также гораздо лучший способ визуализации, чтобы избежать проблем с наложением плиток.
Код так же прост:
mouse_grid_x = floor((mouse_y / tile_height) + (mouse_x / tile_width));
mouse_grid_y = floor((-mouse_x / tile_width) + (mouse_y / tile_height));
mouse_x
и mouse_y
- координаты экрана мыши.
tile_height
и tile_width
- это фактический размер плитки, а не само изображение. Как вы видите на моем примере изображения, я добавил грязь под плитку, это просто для облегчения рендеринга, фактический размер 24 x 12. Координаты также «растоплены» для сохранения сетки результатов x и y округленной в меньшую сторону.
Также обратите внимание, что я рендерил эти плитки из y = 0 и x = tile_with / 2 (красная точка). Это означает, что мои 0,0 фактически начинаются в верхнем углу плитки (наклонены), а не на открытом воздухе. Рассматривая эти плитки как повернутые квадраты, вы все равно хотите начать с 0,0 пикселя.
Плитки будут отображаться, начиная с Y = 0 и X = 0 до размера карты. После рендеринга первой строки вы пропустите несколько пикселей вниз и влево. Это заставит следующую линию плиток перекрывать первую, что является отличным способом сохранить слои перекрывающимися. Вы должны рендерить плитки, а затем все, что находится на этой плитке, прежде чем переходить к следующей.
Я тоже добавлю пример рендеринга:
for (yy = 0; yy < map_height; yy++)
{
for (xx = 0; xx < map_width; xx++)
{
draw tiles here with tile coordinates:
tile_x = (xx * 12) - (yy * 12) - (tile_width / 2)
tile_y = (yy * 6) + (xx * 6)
also draw whatever is on this tile here before moving on
}
}
![Isometric Image](https://i.stack.imgur.com/JAO2U.png)