如何在游戏中加载Levels,因为第1层是Objects,第2层是Characters等等。我只需要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乘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);
}
}
}
答案 0 :(得分: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;
根据OP的描述,图层是一个2维数组,8 x 8,表示为:
unsigned int layer[8][8];
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]