0

タイトルが示すように、階層化されたタイルベースのマップを描画しようとしています。私はこれまでのところこれを持っています。私が使用しているタイルは(32、32)です。現在、タイル マップ全体として 1 種類のタイルのみを描画しています。マップを作成するために、いくつかの異なる種類のタイルを描画する必要がある場合。

for (int layers = 0; layers < map.Layers.Count; layers++) {
    for (var i = 0; i < map.Layers[layers].Tiles.Count; i++) {
        int gid = map.Layers[layers].Tiles[i].Gid;

        if (gid != 0) {
            int tileFrame = gid - 1;
            int row = tileFrame / (map.Height / tileHeight);

            float x = (i % map.Width) * map.TileWidth;
            float y = (float)Math.Floor(i / (double)map.Width) * map.TileHeight;

            Rectangle tilesetRec = new Rectangle(0, 0, 32, 32);

            for (int j = 0; j < tileSets.Count; j++) {
                for (int k = 0; k < tileSets[j].Tiles.Count; k++) {
                    spriteBatch.Draw(tileSets[j].Tiles[k].Image.Texture, new Rectangle((int)x, (int)y, 32, 32), Color.White);
                }
            }
        }
    }
}

これは完全に私のコードではありません。これは、私が構築しようとした他の誰かであり、1つのレイヤーを描画する人のために機能したようです。これは元のコードです:

for (var i = 0; i < _map.Layers[0].Tiles.Count; i++) {
    int gid = _map.Layers[0].Tiles[i].Gid;

    // Empty tile, do nothing
    if (gid == 0) {

    } else {
        int tileFrame = gid - 1;
        int row = tileFrame / (_tileset.Height / _tileHeight);

        float x = (i % _map.Width) * _map.TileWidth;
        float y = (float)Math.Floor(i / (double)_map.Width) * _map.TileHeight;

        Rectangle tilesetRec = new Rectangle(_tileWidth * tileFrame, _tileHeight * row, 32, 32);

        spriteBatch.Draw(_tileset, new Rectangle((int)x, (int)y, 32, 32), tilesetRec, Color.White);
    }
}
4

1 に答える 1

0

あなたの問題は、タイルの位置ごとに、すべてのタイルセットのすべてのタイルを描画しているように見えることです。元のコードで特定のタイルをレンダリングするために使用された変数tileFramerowおよびtilesetRecは、最初のスニペットでは使用されません。

于 2015-04-29T13:03:42.193 に答える