确定在窗口中单击了哪个图块

时间:2013-09-06 22:42:10

标签: c++ tiles sfml tile

我正在SFML渲染窗口上绘制一个tilemap。我想确定用户点击了哪个图块,但我似乎无法找到解决方案。首先,每个瓷砖有32个宽度和高度。 我现在尝试的是:获取点击的位置。循环通过tilemap直到找到一个位于100之间的tile。所以如果我点击(100,100),tile应该从(96,96)开始,但这似乎不起作用。

Tiles

这是我的函数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;
}

1 个答案:

答案 0 :(得分:3)

根据你的代码,我假设你将你的tilemap基于Tile的二维数组:tilemap [x] [y]。我还假设tilemap [0] [0]是左上方的区块。

应该有一种更容易的方法来找出点击哪个瓷砖而不是测试每个瓷砖。

如果你是100,100并且图块是32x32,那么我们可以通过做一些简单的事情来获得图块中图块的x和y:

x = 100/32 = 3

y = 100/32 = 3

因此,瓷砖地图中对应于(100,100)鼠标位置的图块是tilemap [3] [3]。