【cocos2d 编程精粹】SpriteFrame 的实现与优化 推荐
2014-08-27 16:07
162 查看
SpriteFrame 的实现与优化
简介
SpriteFrame其实是为了优化贴图描画而存在的。我们知道为了更好的利用图形绘制 API,我们常常把一些细小的贴图合并到一起,然后每次只绘制这张贴图中需要的那个部分,这个就是 SpriteFrame。
SpriteFrameCache是为了配合
SpriteFrame而存在的,主要用于载入,管理,缓存
SpriteFrame。
属性
先来解释几个概念:set集合 ,一般对应一个
plist的数据文件或者数据库中的一组数据
alias别名,对应了某个
SpriteFrame
texture贴图,一个
set一般存在一个贴图
textureName贴图名称,和贴图一一对应(绑定)
SpriteFrame图片,指贴图中的一块区域关系:
set:
SpriteFrame是一对多的关系
SpriteFrame:
alias是一对多的关系
set:
texture是一对一的关系
SpriteFrame 中有几个必须的属性:
贴图指定了
图片对应的
贴图
集合名称图片对应的集合的名称
旋转表示了
图片是否在
贴图中旋转
贴图区域表示
图片在
贴图中的区域坐标
原始尺寸表示了
图片的大小
图片偏移表示了实际的
贴图区域相对于
图片的偏移坐标注意 当
贴图中存在四周透明的情况时,为了优化大小,
贴图会去掉这些四周的透明像素,从而使
贴图区域和
原始尺寸可能存在不一致的情况。
实现
SpriteFrame的实现较为简单,暂且略过。 Cocos2dx 中的
SpriteFrameCache实现经历过几次重大的变化:
1.0.1使用
CCDictionary来作为存储容器,支持从外部文件读入
2.0rc2增加了载入的文件列表
3.0使用了
map代替
CCDictionary来作为存储容器
SpriteFrameCache
SpriteFrameCache实际上就是
spriteFrame的管理器。主要实现了以下的功能:载入,从
plist载入
spriteFrame
管理,对所有的 SpriteFrame 进行统一的管理,可以移出不再使用的
优化
优化大致包括了以后的部分:代码风格调整
具体可以参考 项目的风格指南SpriteFrame 内部计算优化 (未完成)
SpriteFrameCache singleton 模式替换
使用了 kzlib::TSingletonSpriteFrameCache 内部使用容器替换,原则就是尽量使用 STL 容器
set 替换成 unordered_setCCDictionary 替换成 unordered_map
因为 unordered 系列容器内部使用了 hash 值,因为比字符串更加有效率。又是 STL 容器,使用方便,稳定高效。
SpriteFrameCache 内部逻辑调整
在 SpriteFrame 内部增加了setName,优化了 SpriteFrameCache 对于
set的管理
优化了 set 的载入和释放
SpriteFrameCache 支持贴图创建
支持了从贴图到 SpriteFrame 的转换,保证了使用的统一SpriteFrameCache 支持更多的数据格式 (未完成)
SpriteFrameCache 支持贴图的后载入 (未完成)
代码
spriteframe.hspriteframe.cpp
spriteframecache.h
spriteframecache.cpp
相关文章推荐
- 浅析Delphi实现IOCP后的优化 推荐
- (译)在cocos2d里面如何使用Texture Packer和像素格式来优化spritesheet
- cocos2d如何使用Texture Packer并优化spritesheet
- eclipse+Cocos2d-x在苹果系统下编程实现另一种方式
- 在cocos2d里面如何使用Texture Packer和像素格式来优化spritesheet
- 【Himi转载推荐之一】如何优化cocos2d/x程序的内存使用和程序大小
- (译)使用cocos2d、LevelHelper和SpriteHelper实现疯狂考拉(Part 2)
- 1.在cocos2d里面如何使用texture-packer和像素格式来优化spritesheet.html
- cocos2d中SpriteFrame和Texture
- Cocos2d 自定义Sprite的实现方法
- 【iOS-Cocos2d游戏开发之十五】详解CCProgressTimer 进度条实现“理想”游戏进度条! 推荐
- 完整构建LNMP,简单优化实现超高并发访问! 推荐
- (译)使用cocos2d、LevelHelper和SpriteHelper实现疯狂考拉(Part 1)
- (译)在cocos2d里面如何使用Texture Packer和像素格式来优化spritesheet
- 7BIT压缩编码长度计算方法(C编程实现) 推荐
- 编程珠玑 - 算法优化 - 过滤敏感词 - 第一步:快速实现
- 优化企业级备份策略,实现无负载数据库备份及监控 推荐
- Oracle PL/SQL编程之如何实现程序来统计另一个程序的性能(接上一篇 优化后)
- 这样的心情怎样编程?可以推荐一段实现“调整良好心态编程”功能的java源代码吗?
- Cocos2d里面如何使用Texture Packer和像素格式来优化spritesheet