お世話になっております。
しゃまとんです。

ファミコンのドラクエやFFで使われていた、マップチップを利用したRPGを作成しようかと考えているのですが、 cocos2d-xではTiledというツールで作成したデータをそのまま利用することができるTMXTiledMapというクラスが用意されており、 簡単にマップ処理を実装することができます。

基本的には、TMXTiledMap::createで生成したインスタンスをaddChildすれば、表示されるのですが、

  • マップが大きい時の負荷が気になる(世界マップような時)
  • マップの回り込み表示をさせたい(右端に来た時に左端を表示する)

というような理由から表示される領域のみ画像を生成する処理のメモです。
こちらはドラクエのように、キャラが常に中心にいてマップが動くような事例に有効かと思います。 よって実現したい内容によっては、非効率かもしれません。

処理はgetTileAtを参考にしました。
cocos2d-xのバージョンは3.7でした。

auto tile_map = TMXTiledMap::create("test.tmx");
auto layer = tile_map->getLayer("レイヤー名");

auto gid      = layer->getTileGIDAt(Vec2(1, 2)); // x, y
auto tile_set = layer->getTileSet();

Rect rect = tile_set->getRectForGID(gid);
rect = CC_RECT_PIXELS_TO_POINTS(rect);

auto tile = Sprite::createWithTexture(layer->getTexture(), rect);
tile->setBatchNode(layer);

this->addChild(tile);

ほぼgetTileAtと同じ処理です。こちらで1タイル分のスプライトを作ることができます。
気になる方はCCTMXLayer.cppを読んでみるといいかと思います。

以上です。

参考