実行時にマップのサイズがわからないように、ユーザーにマップサイズを選択してもらいたい。私はこれを実装する方法を探していましたが、ほとんど成功していません。動作しているものに最も近いのはベクターバリアントですが、実行中はまだ正しく動作しません。
3次元配列が必要なので、ヘッダーでこのようにタイルマップを宣言します。
std::vector<std::vector<std::vector<Tile>>> tileMap;
次のようなクラスでテストします。
World::World(int width, int height, int depth)
{
tileMap.resize(width);
tileMap[0].resize(height);
tileMap[0][0].resize(depth);
tileMap.resize(width);
for (int i = 0;i<width;i++)
{
tileMap[i].resize(height);
}
for (int y = 0; y < height;y++)
{
for (int x = 0; x < width; x++)
{
tileMap[x,y].resize(depth);
}
}
std::cout << sizeof tileMap / sizeof tileMap[0][0][0] << std::endl;
}
配列のすべての次元が適切にサイズ変更されているわけではありませんが、最後の行は「0」を出力するだけです。
サイズが不明なタイルマップを作成するためのより良い方法はありますか?64 * 64、256 * 256、64 * 1024などの多くのサイズが必要です(zレベルはレベルの生成後に決定されます)。したがって、サイズごとに配列を作成するのは非効率的です。しかし、配列を宣言するより良い方法があるか、どこかで何か間違ったことをしているのかもしれません。