1

我如何在我的游戏中加载关卡,因为第 1 层是对象,第 2 层是角色等等。我只需要 3 层,它们都将被叠放在一起。即有一个透明背景的花放在下面图层的草地或泥土上。我也想从同一个文件中读取。我该怎么做呢?任何帮助,将不胜感激。

我从一个关卡文件加载地图,这些文件只是与图块表中的图块相对应的数字。

这是解释它的代码

void LoadMap(const char *filename, std::vector< std::vector <int> > &map)
{
    std::ifstream openfile(filename); 
    if(openfile.is_open())
    {
        std::string line, value;
        int space;

        while(!openfile.eof())
        {
            std::getline(openfile, line);

            if(line.find("[TileSet]") != std::string::npos)
            {
                state = TileSet;
                continue;
            }
            else if (line.find("[Layer1]") != std::string::npos)
            {
                state = Map;
                continue;
            }

            switch(state)
            {
            case TileSet:
                if(line.length() > 0)
                    tileSet = al_load_bitmap(line.c_str());
                break;
            case Map: 

                std::stringstream str(line);
                std::vector<int> tempVector;

                while(!str.eof())
                {
                    std::getline(str, value, ' ');
                    if(value.length() > 0)
                                 tempVector.push_back(atoi(value.c_str()));
                }
                map.push_back(tempVector);
                break;
            }
        }
    }
    else
    {
  }
  }

这就是它绘制地图的方式。瓷砖表也是 1280 x 1280,tilesizeX 和 tilesizeY 是 64

void DrawMap(std::vector <std::vector <int> > map)
{    
    int mapRowCount = map.size();

    for(int i, j = 0; i < mapRowCount; i ++)
    {
        int mapColCount = map[i].size();

        for (int j = 0; j < mapColCount; ++j)
        {
              int tilesetIndex = map[i][j];
              int tilesetRow = floor(tilesetIndex / TILESET_COLCOUNT);
              int tilesetCol = tilesetIndex % TILESET_COLCOUNT;    
              al_draw_bitmap_region(tileSet, tilesetCol * TileSizeX, tilesetRow * TileSizeY, TileSizeX, TileSizeY, j * TileSizeX, i * TileSizeX, NULL);
        }
    }
}

编辑:http: //i.imgur.com/Ygu0zRE.jpg

4

1 回答 1

2

看起来您需要多个二维数组。

尝试这样的事情:

unsigned int map[3][8][8];
#define OBJECTS_LAYER 0
#define CHARACTER_LAYER 1
#define FLOWER_ID 2

//...

map[OBJECTS_LAYER][3][4] = FLOWER_ID;

编辑 1

根据 OP 的描述,层是一个 8 x 8 的二维数组,可以表示为:

unsigned int layer[8][8];

Th OP 的地图有多个图层。这转化为层的容器。
一种方法是使用数组的另一个维度。很像分层蛋糕或建筑物中的地板。

unsigned int map[/* maximum layers */][8 /* from layer above */][8 /* from layer above */];

要访问第 1 层的位置 [3,4],表达式将是:

map[0][3][4]

由于 C++ 中的索引是从零开始的,因此第一层的索引为零。

要进入建筑物的第 3 层第 2 行第 7 列,可以使用以下命名法:

empire_state_building[2][1][6]
于 2013-01-25T23:02:29.147 回答