メンバー関数で割り当てられた値をプライベート クラス メンバーが保持しないという問題があります。
mMapWidth と mMapHeight の値を 0 に初期化し、loadメソッドで 5 に更新します。その後すぐにdrawメソッドを呼び出しますが、forテストでは mMapWidth と mMapHeight の値は 0 で、mMapCells は空です。
WorldMap オブジェクトを次のように割り当てます。
main.h
WorldMap worldMap;
main.cpp
WorldMap worldMap(graphics, &camera, &textureTileset);
worldMap.load();
worldMap.draw();
WorldMap オブジェクトは、次のように宣言および定義されます。
worldmap.h
class WorldMap
{
public:
WorldMap();
WorldMap(Graphics*, Camera*, TextureManager*);
~WorldMap();
void draw();
void load();
private:
int mMapWidth = 0;
int mMapHeight = 0;
Graphics* pGraphics;
TextureManager* pTileSet;
Camera* pCamera;
};
世界地図.cpp
WorldMap::WorldMap(){}
WorldMap::WorldMap(Graphics* graphics, Camera* camera, TextureManager* tileset)
{
pGraphics = graphics;
pCamera = camera;
pTileSet = tileset;
mMapHeight = 0;
mMapWidth = 0;
}
WorldMap::~WorldMap(){}
void WorldMap::draw()
{
for (int tileY = 0; tileY < mMapHeight; ++tileY)
{
for (int tileX = 0; tileX < mMapWidth; ++tileX)
{
mMapCells[tileX + (tileY * mMapWidth)].draw();
}
}
}
void WorldMap::load()
{
mTileSize = 32;
mMapWidth = 5;
mMapHeight = 5;
mMapCells.reserve(mMapWidth * mMapHeight);
for (int tileY = 0; tileY < mMapHeight; ++tileY)
{
for (int tileX = 0; tileX < mMapWidth; ++tileX)
{
Cell* cell = new Cell();
cell->initialize(pGraphics, 32, 32, 5, pTileSet);
cell->setX(tileX * 32);
cell->setY(tileY * 32);
cell->setCurrentFrame(1);
mMapCells.push_back(*cell);
}
}
}
ご清聴ありがとうございました。