新聞中心
SpriteFrame 的實現(xiàn)與優(yōu)化
簡介
SpriteFrame
其實是為了優(yōu)化貼圖描畫而存在的。我們知道為了更好的利用圖形繪制 API,我們常常把一些細(xì)小的貼圖合并到一起,然后每次只繪制這張貼圖中需要的那個部分,這個就是 SpriteFrame。
SpriteFrameCache
是為了配合 SpriteFrame
而存在的,主要用于載入,管理,緩存 SpriteFrame
。
屬性
先來解釋幾個概念:
set
集合 ,一般對應(yīng)一個plist
的數(shù)據(jù)文件或者數(shù)據(jù)庫中的一組數(shù)據(jù)alias
別名,對應(yīng)了某個SpriteFrame
texture
貼圖,一個set
一般存在一個貼圖textureName
貼圖名稱,和貼圖一一對應(yīng)(綁定)SpriteFrame
圖片,指貼圖中的一塊區(qū)域關(guān)系:
set
:SpriteFrame
是一對多的關(guān)系SpriteFrame
:alias
是一對多的關(guān)系set
:texture
是一對一的關(guān)系
SpriteFrame 中有幾個必須的屬性:
貼圖
指定了圖片
對應(yīng)的貼圖
集合名稱
圖片對應(yīng)的集合的名稱旋轉(zhuǎn)
表示了圖片
是否在貼圖
中旋轉(zhuǎn)貼圖區(qū)域
表示圖片
在貼圖
中的區(qū)域坐標(biāo)原始尺寸
表示了圖片
的大小圖片偏移
表示了實際的貼圖區(qū)域
相對于圖片
的偏移坐標(biāo)注意 當(dāng)
貼圖
中存在四周透明的情況時,為了優(yōu)化大小,貼圖
會去掉這些四周的透明像素,從而使貼圖區(qū)域
和原始尺寸
可能存在不一致的情況。
實現(xiàn)
SpriteFrame
的實現(xiàn)較為簡單,暫且略過。
Cocos2dx 中的 SpriteFrameCache
實現(xiàn)經(jīng)歷過幾次重大的變化:
1.0.1
使用CCDictionary
來作為存儲容器,支持從外部文件讀入2.0rc2
增加了載入的文件列表3.0
使用了map
代替CCDictionary
來作為存儲容器
SpriteFrameCache
SpriteFrameCache
實際上就是 spriteFrame
的管理器。主要實現(xiàn)了以下的功能:
載入,從
plist
載入spriteFrame
管理,對所有的 SpriteFrame 進(jìn)行統(tǒng)一的管理,可以移出不再使用的
優(yōu)化
優(yōu)化大致包括了以后的部分:
代碼風(fēng)格調(diào)整
具體可以參考 項目的風(fēng)格指南
SpriteFrame 內(nèi)部計算優(yōu)化 (未完成)
SpriteFrameCache singleton 模式替換
使用了 kzlib::TSingleton
SpriteFrameCache 內(nèi)部使用容器替換,原則就是盡量使用 STL 容器
set 替換成 unordered_set
CCDictionary 替換成 unordered_map
因為 unordered 系列容器內(nèi)部使用了 hash 值,因為比字符串更加有效率。又是 STL 容器,使用方便,穩(wěn)定高效。
SpriteFrameCache 內(nèi)部邏輯調(diào)整
在 SpriteFrame 內(nèi)部增加了
setName
,優(yōu)化了 SpriteFrameCache 對于set
的管理優(yōu)化了 set 的載入和釋放
SpriteFrameCache 支持貼圖創(chuàng)建
支持了從貼圖到 SpriteFrame 的轉(zhuǎn)換,保證了使用的統(tǒng)一
SpriteFrameCache 支持更多的數(shù)據(jù)格式 (未完成)
SpriteFrameCache 支持貼圖的后載入 (未完成)
代碼
spriteframe.h
spriteframe.cpp
spriteframecache.h
spriteframecache.cpp
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前名稱:【cocos2d編程精粹】SpriteFrame的實現(xiàn)與優(yōu)化-創(chuàng)新互聯(lián)
本文路徑:http://fisionsoft.com.cn/article/dhcpoh.html