0

メンバー関数で割り当てられた値をプライベート クラス メンバーが保持しないという問題があります。

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

ご清聴ありがとうございました。

4

2 に答える 2

0

最初に、まず main.h で、次に main.cpp で、worldMap を 2 回定義します。ただし、グローバルな worldMap が 1 つだけ必要な場合は、main.h に次のように記述できます。 extern WorldMap worldMap;

次に、main.h を含む他のファイルで、このグローバルなワールドマップを必要に応じて使用できます。

于 2013-11-15T01:14:06.093 に答える
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 に答える