3

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;
}
4

1 に答える 1

3

コードに基づいて、タイルの 2 次元配列 tilemap[x][y] に基づいてタイルマップを作成していると仮定します。また、 tilemap[0][0] が左上のタイルであると仮定します。

すべてのタイルをテストするのではなく、クリックされているタイルを見つけるためのはるかに簡単な方法があるはずです。

100,100 で、タイルが 32x32 の場合、タイルマップ内のタイルの x と y を次のように簡単に取得できます。

x = 100 / 32 = 3

y = 100 / 32 = 3

したがって、(100,100) のマウス位置に対応するタイルマップ内のタイルは tilemap[3][3] です。

于 2013-09-06T22:55:47.883 に答える