您好,登錄后才能下訂單哦!
SpriteFrame
其實(shí)是為了優(yōu)化貼圖描畫(huà)而存在的。我們知道為了更好的利用圖形繪制 API,我們常常把一些細(xì)小的貼圖合并到一起,然后每次只繪制這張貼圖中需要的那個(gè)部分,這個(gè)就是 SpriteFrame。
SpriteFrameCache
是為了配合 SpriteFrame
而存在的,主要用于載入,管理,緩存 SpriteFrame
。
先來(lái)解釋幾個(gè)概念:
set
集合 ,一般對(duì)應(yīng)一個(gè) plist
的數(shù)據(jù)文件或者數(shù)據(jù)庫(kù)中的一組數(shù)據(jù)
alias
別名,對(duì)應(yīng)了某個(gè) SpriteFrame
texture
貼圖,一個(gè) set
一般存在一個(gè)貼圖
textureName
貼圖名稱(chēng),和貼圖一一對(duì)應(yīng)(綁定)
SpriteFrame
圖片,指貼圖中的一塊區(qū)域
關(guān)系:
set
: SpriteFrame
是一對(duì)多的關(guān)系
SpriteFrame
: alias
是一對(duì)多的關(guān)系
set
: texture
是一對(duì)一的關(guān)系
SpriteFrame 中有幾個(gè)必須的屬性:
貼圖
指定了 圖片
對(duì)應(yīng)的 貼圖
集合名稱(chēng)
圖片對(duì)應(yīng)的集合的名稱(chēng)
旋轉(zhuǎn)
表示了 圖片
是否在 貼圖
中旋轉(zhuǎn)
貼圖區(qū)域
表示 圖片
在 貼圖
中的區(qū)域坐標(biāo)
原始尺寸
表示了 圖片
的大小
圖片偏移
表示了實(shí)際的 貼圖區(qū)域
相對(duì)于 圖片
的偏移坐標(biāo)
注意 當(dāng) 貼圖
中存在四周透明的情況時(shí),為了優(yōu)化大小,貼圖
會(huì)去掉這些四周的透明像素,從而使 貼圖區(qū)域
和原始尺寸
可能存在不一致的情況。
SpriteFrame
的實(shí)現(xiàn)較為簡(jiǎn)單,暫且略過(guò)。
Cocos2dx 中的 SpriteFrameCache
實(shí)現(xiàn)經(jīng)歷過(guò)幾次重大的變化:
1.0.1
使用 CCDictionary
來(lái)作為存儲(chǔ)容器,支持從外部文件讀入
2.0rc2
增加了載入的文件列表
3.0
使用了 map
代替 CCDictionary
來(lái)作為存儲(chǔ)容器
SpriteFrameCache
實(shí)際上就是 spriteFrame
的管理器。主要實(shí)現(xiàn)了以下的功能:
載入,從 plist
載入 spriteFrame
管理,對(duì)所有的 SpriteFrame 進(jìn)行統(tǒng)一的管理,可以移出不再使用的
優(yōu)化大致包括了以后的部分:
具體可以參考 項(xiàng)目的風(fēng)格指南
使用了 kzlib::TSingleton
set 替換成 unordered_set
CCDictionary 替換成 unordered_map
因?yàn)?unordered 系列容器內(nèi)部使用了 hash 值,因?yàn)楸茸址佑行?。又?STL 容器,使用方便,穩(wěn)定高效。
在 SpriteFrame 內(nèi)部增加了 setName
,優(yōu)化了 SpriteFrameCache 對(duì)于 set
的管理
優(yōu)化了 set 的載入和釋放
支持了從貼圖到 SpriteFrame 的轉(zhuǎn)換,保證了使用的統(tǒng)一
spriteframe.h
spriteframe.cpp
spriteframecache.h
spriteframecache.cpp
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。