rabbit-dev

現役スマフォプログラマーが適当にプログラム関係の記事を放り込むブログ

Cocos2dx Tiledで作成したmapファイルの回転値とIDが読み込めない。

Tiled Map Editor(http://www.mapeditor.org/)でオブジェクトの回転を設定しても以下のコードで読み込めない。

 

コード

上記コードを書いたところid/rotationが読み込めません。

TMXObjectGroup*  objectGroup = map->getObjectGroup(groupname);
ValueVector objects = objectGroup->getObjects();
for(Value objectValue : objects){

     int id = 0;

     float rotation = 0;
     ValueMap valueMap = objectValue.asValueMap();

     if( valueMap.find("id") != valueMap.end()) {
         userDataBody->objectId = valueMap["id"].asInt();
     }

     if( valueMap.find("rotation") != valueMap.end()) {
         rotation = valueMap["rotation"].asFloat();
     }

}

 

修正点

cocos2dxの以下のファイルを修正することで読み込めるようになります。

cocos2d/cocos/2d/CCTMXXMLParser.cpp

修正前

else if (elementName == "object")
{
     TMXObjectGroup* objectGroup = tmxMapInfo->getObjectGroups().back();
     // The value for "type" was blank or not a valid class name
     // Create an instance of TMXObjectInfo to store the object and its properties
     ValueMap dict;
     // Parse everything automatically
     const char* array = {"name", "type", "width", "height", "gid", "rotation", "id"};

 

修正後

else if (elementName == "object")
{
     TMXObjectGroup* objectGroup = tmxMapInfo->getObjectGroups().back();
     // The value for "type" was blank or not a valid class name
     // Create an instance of TMXObjectInfo to store the object and its properties
     ValueMap dict;
     // Parse everything automatically
     const char* array = {"name", "type", "width", "height", "gid", "rotation", "id"};

 

以下で議論がされておりますが、、、Windows系の対応が必要なのでしょうか?英語が全くダメなので、、、詳しくはわかりません。。

https://github.com/cocos2d/cocos2d-x/pull/3860

 

上記修正でiPhoneでは正常に動いているのでとりあえずこれで回避するか、Tiledで別のプロパティを独自で設定すれば問題ないかと思われます。