Fast TileMap ---Cocos2dx

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渲染地圖的性能更優

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