我遇到了一个问题,其中私有类成员没有在成员函数中保存分配给他们的值。
我将 mMapWidth 和 mMapHeight 值初始化为 0,然后在load方法中将它们更新为 5。此后不久,我调用了draw方法,但在测试中 mMapWidth 和 mMapHeight 的值为 0,并且 mMapCells 为空。
我按如下方式分配 WorldMap 对象:
主文件
WorldMap worldMap;
主文件
WorldMap worldMap(graphics, &camera, &textureTileset);
worldMap.load();
worldMap.draw();
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);
}
}
}
感谢您的关注。