關於cocos2dx,多個圖塊集下的CCTMXTiledMap要注意的一個小地方

 轉自: http://miraklelhj.i.sohu.com/blog/view/227380352.htm

 

最近在開發《三國》的戰場地圖,爲了提高開發速度,果斷使用CCTMXTiledMap拼接地圖。美術畫好圖塊後,再用TileMap自帶的編輯器畫好關卡,地圖就生成了,簡單方便,以下是我對各區域的讀法,以防大家不理解我在說啥…

PS:編輯器下載地址:http://www.mapeditor.org/

如果圖塊集只有一張的畫,那麼TileMap應該是怎麼畫都沒問題的。但是,如果一張地圖會有多張圖塊集的話,各個圖塊集的圖塊還畫在同一圖層的話,那麼就會出問題了。

(多個圖塊集)

先把問題重現一下,我把【圖塊集Ground】和【圖塊集Activity】的圖塊:“綠地”和“草“畫在同一層【地表層】上,如圖:

然後跑一下程序,崩了…

從錯誤信息來看,是GID的取值範圍越界了,關於GID,先來一段掃盲貼:

CCTMXTiledMap中的GID是CCTMXLayer所對應的CCTMXTilesetInfo中每一個tile獨一無二的編號,在cocos2d中CCTMXLayer只能對應一個CCTMXTilesetInfo,如果使用tile map editor來編輯的話,這個CCTMXTilesetInfo實際上對應一張包含各種tile的spritesheet圖。這個gid編號是以這樣圖中tile的位置來決定的,規則是從該圖中的左上角開始,從左到右,每一行從左開始。CCTMXTilesetInfo中的方法rectForGID即是獲取對應gid的tile在spritesheet圖中的位置。一般這個編號是從1開始的。

摘抄自:飛翔的自由辛

http://www.cnblogs.com/flyFreeZn/archive/2011/12/19/2293980.html

跟蹤源代碼,就很明顯了:一個圖層只支持一個圖塊集…

void CCTMXLayer::setupTiles()

…;

CCAssert( m_uMaxGID >= m_pTileSet->m_uFirstGid

&&

m_uMinGID >=

m_pTileSet->m_uFirstGid, "TMX: Only 1 tilset per layer is

supported");

}

之所以這麼做,我的想法是:

class CC_DLL CCTMXTilesetInfo : public CCObject

{

CCTMXTilesetInfo();

virtual ~CCTMXTilesetInfo();

CCRect rectForGID(unsigned int

gid);

一個圖塊集對應一個CCTMXTilesetInfo對象,因此如果一個gid如果不在這個圖塊集裏面,那麼這個獲取gid的CCRect函數就有可能出問題了,大概是爲了安全性吧…

一般手機遊戲都不會有這麼多圖塊集的,要是遇到這種情況,就注意一下吧…

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章