绘制基于分层图块的地图

时间:2015-04-29 03:29:08

标签: c# dictionary monogame tile tiled

正如标题所说,我试图绘制基于分层图块的地图。到目前为止我有这个。我正在使用的瓷砖是(32,32)。它目前仅绘制一种类型的图块作为整个图块地图。什么时候应该抽出几种不同类型的瓷砖来制作地图。

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

这不完全是我的代码,这是我试图构建的其他人,显然它适用于绘制一层的人。这是原始代码:

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

1 个答案:

答案 0 :(得分:0)

您的问题是,对于每个图块位置,您似乎都在绘制所有图块集中的所有图块。用于在原始代码中呈现特定图块的变量tileFramerowtilesetRec不会在您的第一个代码段中使用。