我正在SFML renderwindow上绘制一个tilemap。我想确定用户单击了哪个图块,但似乎无法找到解决方案。首先,每个图块的宽度和高度均为32。
目前,我尝试的是:获得点击的位置。循环遍历图块 map ,直到找到位置在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;
}

最佳答案

根据您的代码,我将假定您将tilemap基于Tiles的2d数组:tilemap [x] [y]。我还要假设tilemap [0] [0]是左上方的图块。

应该有一种更容易的方法来找出正在单击的图块,而不是测试每个图块。

如果您的像素为100,100,并且图块为32x32,则可以通过执行以下操作来简单地获取tilemap中图块的x和y:

x = 100/32 = 3

y = 100/32 = 3

因此,您的tilemap中与鼠标位置(100,100)对应的tile为tilemap [3] [3]。

09-11 18:14