【cocos2dx】タイルマップのオブジェクトレイアーを利用する。

Tiledで作成をしたタイルマップを使ってアプリを作成する際に、「オブジェクトレイアー」を利用する場合があると思います。 今回は、このオブジェクトレイアーに設定したオブジェクトを取り出す方法をブログに書いていきたいと思います。 cocos2dxのバージョンが3になったことでやり方が変わっていたので少し苦労をしました。

cocos2d-xではじめるスマートフォンゲーム開発 [cocos2d-x Ver.3対応] for iOS/Androidcocos2d-xではじめるスマートフォンゲーム開発 [cocos2d-x Ver.3対応] for iOS/Android
三木 康暉

技術評論社
売り上げランキング : 17995

Amazonで詳しく見る

オブジェクトレイアー

オブジェクトレイアーはTieldで作成ができます。

2015-2-19-dasa

通常、オブジェクトレイアーは1つでいいのですが、色々複雑なことをする際には複数利用する場合があります。

オブジェクトの作成

下記画像のように、画面上にオブジェクトを配置していきます。

2015-2-19-dasa

このオブジェクトを取り出すために、「プロパティ」を設定します。

2015-2-19-dfasa

「名前」をつけると便利です。

cocos2dxで利用をする

まずは、タイルマップを読み込みます。 [c] TMXTiledMap *map = TMXTiledMap::create("test.tmx"); this->addChild(map); [/c]

まずは、オブジェクトレイアーを取り出します。 [c] auto groups = map->getObjectGroups();

//複数オブジェクトレイアーがある場合は、for文を使うと便利です。 for (int i = 0; i < groups.size(); i++) {       auto objlayer = (TMXObjectGroup*)groups.at(i);

} [/c]

次に、オブジェクトレイアーからタイルマップに配置をしたオブジェクトを取り出します。

[c] auto objs = objlayer->getObjects(); for (int j = 0; j < objs.size(); j++) {

    //オブジェクトを取り出す Value obj = objs.at(j);

  //オブジェクトのプロパティを取り出します。
  ValueMap objectInfo = hoge.asValueMap();

}

[/c]

後は、プロパティの値を取り出します。 [c] auto name = objectInfo.at("name").asString(); auto type = objectInfo.at("type").asString();

auto xPos = objectInfo.at("x").asInt(); auto yPos = objectInfo.at("y").asInt();

[/c]

最後に

配列と連想配列が色々と変わっているので、実際にプロパティを取り出すのに苦労しました。 特に[Value]クラスは初めて見ました。 とても便利に利用できそうなのですが、今のところどう使ったらいいのかわかりません。