Fast TileMap
概述
在遊戲中常常會有豐富的背景元素,如果直接使用大的背景圖實現,這會造成資源浪費。TileMap就是爲了解決這問題而產生的。Cocos2d-x支持使用Tile地圖編輯器創建的TMX格式的地圖。
Cocos2d-x爲我們提供了TMXTileMap和TMXLayer兩個類來處理瓦片地圖。通過使用TMXTileMap和TMXLayer,我們可以很方便的加載TMX格式的地圖文件,獲取地圖上的圖層、對象、屬性等信息。
新發布的3.2版本,對瓦片地圖進行了大幅改進,通過自動裁剪不在視圖範圍內的瓦片來提升性能,並支持渲染更大尺寸的瓦片地圖!我們稱之爲"Fast TileMap",下面我們就來一起研究Fast TileMap。
TileMap VS Fast TileMap
Fast TileMap的不同
在3.2版本,新增了CCFastTMXTiledMap.h/CCFastTMXTiledMap.cpp/CCFastTMXLayer.h/CCFastTMXLayer.cpp
文件用於實現快速高效的瓦片地圖功能。
在cocos2d::experimental的名字空間下重新實現了TMXTiledMap和TMXLayer。其中對TMXLayer的改動較大。TMXLayer
不在繼承SpriteBatchNode
,改爲繼承Node
。並重新實現TileMap的繪製來提升性能。
- old
class CC_DLL TMXLayer : public SpriteBatchNode
- new
class CC_DLL TMXLayer : public Node
新的TMXTiledMap
接口和原有的保持一致。我們依然可以像以前那樣使用TMXTiledMap創建瓦片地圖。
Fast TileMap的用法
auto map = cocos2d::experimental::TMXTiledMap::create("tilemap.tmx");
addChild(map, 0, kTagTileMap);
上面代碼演示了,使用Fast TileMap加載tilemap.tmx文件創建一幅地圖,並加到場景中。
更多API使用方法參考:
性能對比
我們分別使用以前的TileMap和Fast TileMap加載同一個tmx文件創建地圖,並在同一設備上進行測試。
測試設備:
MacBook Pro Retina,13-inch,Late 2012 OS X 10.9.4
-
TileMap
auto map = TMXTiledMap::create("TileMaps/iso-test-bug787.tmx"); addChild(map, 0, kTagTileMap); map->setScale(0.25f);
運行結果:
-
Fast TileMap
auto map = cocos2d::experimental::TMXTiledMap::create("TileMaps/iso-test-bug787.tmx"); addChild(map, 0, kTagTileMap); map->setScale(0.25f);
運行結果:
運行結果對比:
- 兩者的GL calls都相同
- 使用Fast TileMap的GL verts更少
- 使用Fast TileMap的幀率更高
因爲相同的GL calls(渲染次數)下,GL verts(顯卡繪製的頂點數)越少,繪製效率越高。FPS(幀率)越高遊戲越流暢。所以 使用Fast TileMap渲染地圖的性能更優。