溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

【cocos2d 編程精粹】SpriteFrame 的實(shí)現(xiàn)與優(yōu)化

發(fā)布時(shí)間:2020-07-15 17:16:24 來(lái)源:網(wǎng)絡(luò) 閱讀:7519 作者:kingzeus 欄目:開(kāi)發(fā)技術(shù)

SpriteFrame 的實(shí)現(xiàn)與優(yōu)化

簡(jiǎn)介

  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ū)域 和原始尺寸 可能存在不一致的情況。

實(shí)現(xiàn)

  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

SpriteFrameCache 實(shí)際上就是 spriteFrame 的管理器。主要實(shí)現(xiàn)了以下的功能:

  • 載入,從 plist 載入 spriteFrame

  • 管理,對(duì)所有的 SpriteFrame 進(jìn)行統(tǒng)一的管理,可以移出不再使用的

優(yōu)化

優(yōu)化大致包括了以后的部分:

代碼風(fēng)格調(diào)整

具體可以參考 項(xiàng)目的風(fēng)格指南

SpriteFrame 內(nèi)部計(jì)算優(yōu)化 (未完成)

SpriteFrameCache singleton 模式替換

使用了 kzlib::TSingleton

SpriteFrameCache 內(nèi)部使用容器替換,原則就是盡量使用 STL 容器

  • set 替換成 unordered_set

  • CCDictionary 替換成 unordered_map

因?yàn)?unordered 系列容器內(nèi)部使用了 hash 值,因?yàn)楸茸址佑行?。又?STL 容器,使用方便,穩(wěn)定高效。

SpriteFrameCache 內(nèi)部邏輯調(diào)整

  • 在 SpriteFrame 內(nèi)部增加了 setName ,優(yōu)化了 SpriteFrameCache 對(duì)于 set 的管理

  • 優(yōu)化了 set 的載入和釋放

SpriteFrameCache 支持貼圖創(chuàng)建

支持了從貼圖到 SpriteFrame 的轉(zhuǎn)換,保證了使用的統(tǒng)一

SpriteFrameCache 支持更多的數(shù)據(jù)格式 (未完成)

SpriteFrameCache 支持貼圖的后載入 (未完成)

代碼

  • spriteframe.h

  • spriteframe.cpp

  • spriteframecache.h

  • spriteframecache.cpp


向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI