Алгоритм выбора / выбора изометрической плитки - PullRequest
0 голосов
/ 10 февраля 2019

Я работаю над изометрической игрой и не могу сделать алгоритм выбора плитки.

Вот как я отрисовываю свою изометрическую карту тайлов:

for (int x = 0; x < 50; x++) {
    for (int y = 0; y < 50; y++) {
        //Check if tile should be drawn
        if (mapdata[x][y] == 1) {
            float px = (x - y) * 20;
            float py = (x + y) * 20 / 2;

            ...

            window.draw(quad, &tile);
        } 
    }
}

Я использую 2d массив для хранения того, какие плитки должны быть нарисованы.пример:

int mapdata[5][5]
{
    0,1,1,1,0,
    0,1,1,1,0,
    0,1,1,1,0,
    0,1,1,1,0,
    0,1,1,1,0,
}

Вот как я сейчас выбираю плитки:

mh = the map tile height, in the above example this would be 5.
w = the width of the isometric tile.

int mouse_grid_y = (((mousey * 2) - ((mh * w) / 2) + mousex) / 2) / w;
int mouse_grid_x = (mousex - mouse_grid_y) / w;

Любая помощь будет принята с благодарностью.

Изображение для уточнения:

Это изображение, которое я сделал для моего игрового урока.Как вы можете видеть, есть одна плитка, обведенная зеленым, для этого мне и нужен алгоритм, я хочу отследить мышь и нарисовать этот зеленый «курсор» над плиткой, где находится мышь.

img example

1 Ответ

0 голосов
/ 11 февраля 2019

Вы можете преобразовать координаты экрана в вашу локальную систему, выполнив обратный расчет:

xx = px - basex
yy = py - basey
x' = (xx + 2 * yy) / 40   // integer division to get cell index
y' = (-xx  + 2 * yy) / 40

basex и basey - это координаты начальной точки на вашем экране, где отображается ячейка 0,0 (естьне упоминается в вашем вопросе)

...