Tiledで作成をしたタイルマップを使ってアプリを作成する際に、「オブジェクトレイアー」を利用する場合があると思います。 今回は、このオブジェクトレイアーに設定したオブジェクトを取り出す方法をブログに書いていきたいと思います。 cocos2dxのバージョンが3になったことでやり方が変わっていたので少し苦労をしました。
cocos2d-xではじめるスマートフォンゲーム開発 [cocos2d-x Ver.3対応] for iOS/Android 三木 康暉 技術評論社 売り上げランキング : 17995 Amazonで詳しく見る |
オブジェクトレイアー
オブジェクトレイアーはTieldで作成ができます。
通常、オブジェクトレイアーは1つでいいのですが、色々複雑なことをする際には複数利用する場合があります。
オブジェクトの作成
下記画像のように、画面上にオブジェクトを配置していきます。
このオブジェクトを取り出すために、「プロパティ」を設定します。
「名前」をつけると便利です。
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]クラスは初めて見ました。 とても便利に利用できそうなのですが、今のところどう使ったらいいのかわかりません。