这个错误发生在我使用tiledmap的时候,其中,tiledmap里面编辑好的地图在同一个层(layer)使用了多个图块。
加载地图时弹出断言失败窗口,跟踪进去发现崩毁地点:
CCAssert( m_uMaxGID >= m_pTileSet->m_uFirstGid && m_uMinGID >= m_pTileSet->m_uFirstGid, "TMX: Only 1 tileset per layer is supported");
解决办法:(一)将多个图块绘制在同一个图块上使用。 (二)放弃其他图块,使用专一图块。
我们用tileGIDAt获取某一层上的某一格对应的图块ID,GID是什么呢?可以理解为全局唯一ID,而我们的图块集合可能会有多个,所以每个的图块的ID不是从该图块集合1,2,3…这样的,而是紧接着上一个图块集合的最后一个ID顺序下来的!
所以我们要获得正确的ID,应该:
cocos2d::CCTMXLayer *towerLayer = map->layerNamed("tower"); cocos2d::CCTMXTilesetInfo *towerSet = towerLayer->getTileSet(); int nGid = towerLayer->tileGIDAt(ccp(0, 0)) - towerSet->m_uFirstGid; if(nGid >= 0) { }
先获取这一层对应的图块集合的首ID,然后相减就获得了正确的ID.
学习的路上,与君共勉。
cocos2d-x 错误总结(持续更新),布布扣,bubuko.com
原文:http://blog.csdn.net/hitwhylz/article/details/20382351