0

我遇到了一个问题,其中私有类成员没有在成员函数中保存分配给他们的值。

我将 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);
      }
    }
}

感谢您的关注。

4

2 回答 2

0

试试这个。

从 main.h 更改此行

WorldMap worldMap;

WorldMap* worldMap;

在 main.cpp

做这个

worldMap = new WorldMap(graphics, &camera, &textureTileset);
worldMap->load();
worldMap->draw();
于 2013-11-15T00:56:20.117 回答
0

首先,您只需定义两次 worldMap,首先在 main.h 中,然后在 main.cpp 中。但是你只想要一个全局世界地图,你可以在你的 main.h 中这样写: extern WorldMap worldMap;

然后包含您的 main.h 的其他文件可以根据需要使用这个全局世界地图。

于 2013-11-15T01:14:06.093 回答