3

我正在 SFML 渲染窗口上绘制瓷砖地图。我想确定用户点击了哪个图块,但我似乎找不到解决方案。首先,每个瓦片有 32 个宽度和高度。我现在尝试的是:获取点击的位置。循环遍历 tilemap,直到找到位置在 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;
}
4

1 回答 1

3

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

应该有一种更简单的方法来找出单击了哪个图块,而不是测试每个图块。

如果你在 100,100 并且瓦片是 32x32,那么我们可以通过执行以下简单操作来获取瓦片图中瓦片的 x 和 y:

x = 100 / 32 = 3

y = 100 / 32 = 3

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

于 2013-09-06T22:55:47.883 回答