cocos2d-x, iOSアプリ開発
CCTMXTiledMapで、空のレイヤーを含むtmxファイルを読み込む
cocos2d-xで、CCTMXTilesMapを使っている場合の話です。
地図情報を”Tiles”というアプリで作成し、出来上がったtmxファイルを
CCTMXTiledMapで読み込み、画面へ展開します。
Tilesではマップ情報をレイヤーで管理できるため、
あらかじめレイヤーを複数作成しておいて、後で少しずつ入力していく方法をとりたいのですが、
レイヤー内にブロックが一つもなかった場合、CCTMXTilesMapへの読み込み時にエラーが出てうまくいきません。
これを修正したコードをのせておきます。
ブロックが配置されていないレイヤーがあっても、読み込みと表示が出来るようにはなります。
CCSpriteBatchNode.cpp #668
◎ 変更前
668 |
if (! m_pobTextureAtlas->getTexture()->hasPremultipliedAlpha()) |
◎ 変更後
668 669 |
if( ! m_pobTextureAtlas->getTexture() ) return; if (! m_pobTextureAtlas->getTexture()->hasPremultipliedAlpha()) |
CCTMXTiledMap.cpp #132
◎ 変更前
132 133 |
CCTMXTilesetInfo *tileset = tilesetForLayer(layerInfo, mapInfo); CCTMXLayer *layer = CCTMXLayer::create(tileset, layerInfo, mapInfo); |
◎ 変更後
132 133 134 |
CCTMXTilesetInfo *tileset = tilesetForLayer(layerInfo, mapInfo); if( ! tileset ) return( NULL ); CCTMXLayer *layer = CCTMXLayer::create(tileset, layerInfo, mapInfo); |
CCTMXTiledMap.cpp #217
◎ 変更前
217 218 |
CCTMXLayer *child = parseLayer(layerInfo, mapInfo); addChild((CCNode*)child, idx, idx); |
◎ 変更後
217 218 219 |
CCTMXLayer *child = parseLayer(layerInfo, mapInfo); if( ! child ) continue; addChild((CCNode*)child, idx, idx); |
※開発者ではありませんので、この修正が正しいのかはわかりません