Я рисую карту листов в окне визуализации SFML. Я хочу определить, какая плитка нажата пользователем, но я просто не могу найти решение. Прежде всего, каждая плитка имеет 32 ширины и высоты.
Что я пробую на данный момент: получить позицию клика. Цикл по карте тайлов пока не будет найден тайл, положение которого находится между 100. Поэтому, если я нажму (100,100), тайл должен начинаться с (96,96), но это, похоже, не работает.
Вот мой фрагмент кода из функции getTile (mousepos x, mousepos y)
Tile* TileMap::getTile(int x, int y)
{
Tile *t = NULL;
for(int i = 0; i < tilemap.size(); i++)
{
for(int j = 0; j < tilemap[i].size(); j++)
{
if(x > tilemap[i][j].sprite.getPosition().x
&& x < (tilemap[i][j].sprite.getPosition().x+32))
{
if(y > tilemap[i][j].sprite.getPosition().y
&& y < (tilemap[i][j].sprite.getPosition().y+32))
{
t = &tilemap[i][j];
break;
}
}
}
}
return t;
}
Основываясь на вашем коде, я предполагаю, что вы основываете свою карту тайлов на 2d массиве Tiles: tilemap [x] [y]. Я также собираюсь предположить, что tilemap [0] [0] — это верхняя левая плитка.
Должен быть гораздо более простой способ выяснить, по какой плитке щелкают, а не проверять каждую плитку.
Если у вас 100,100, а тайлы 32х32, то мы можем получить x и y тайла в карте тайлов, выполнив что-то простое:
х = 100/32 = 3
у = 100/32 = 3
Поэтому плиткой в вашей карте тайлов, которая соответствует положению мыши (100 100), является тайл карта [3] [3].
Других решений пока нет …