SpriteFrame 的实现与优化
简介
SpriteFrame 其实是为了优化贴图描画而存在的。我们知道为了更好的利用图形绘制 API,我们常常把一些细小的贴图合并到一起,然后每次只绘制这张贴图中需要的那个部分,这个就是 SpriteFrame。
SpriteFrameCache 是为了配合 SpriteFrame 而存在的,主要用于载入,管理,缓存 SpriteFrame。
属性
先来解释几个概念:
set 集合 ,一般对应一个 plist 的数据文件或者数据库中的一组数据
alias 别名,对应了某个 SpriteFrame
texture 贴图,一个 set 一般存在一个贴图
textureName 贴图名称,和贴图一一对应(绑定)
SpriteFrame 图片,指贴图中的一块区域
关系:
SpriteFrame 中有几个必须的属性:
实现
SpriteFrame 的实现较为简单,暂且略过。
Cocos2dx 中的 SpriteFrameCache 实现经历过几次重大的变化:
SpriteFrameCache
SpriteFrameCache 实际上就是 spriteFrame 的管理器。主要实现了以下的功能:
载入,从 plist 载入 spriteFrame
管理,对所有的 SpriteFrame 进行统一的管理,可以移出不再使用的
优化
优化大致包括了以后的部分:
代码风格调整
具体可以参考 项目的风格指南
SpriteFrame 内部计算优化 (未完成)
SpriteFrameCache singleton 模式替换
使用了 kzlib::TSingleton
SpriteFrameCache 内部使用容器替换,原则就是尽量使用 STL 容器
因为 unordered 系列容器内部使用了 hash 值,因为比字符串更加有效率。又是 STL 容器,使用方便,稳定高效。
SpriteFrameCache 内部逻辑调整
SpriteFrameCache 支持贴图创建
支持了从贴图到 SpriteFrame 的转换,保证了使用的统一
SpriteFrameCache 支持更多的数据格式 (未完成)
SpriteFrameCache 支持贴图的后载入 (未完成)
代码
spriteframe.h
spriteframe.cpp
spriteframecache.h
spriteframecache.cpp