レイヤー 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);
}
}
}