Cocos2dx 温馨提示(十)三种缓存类演示
当图像加载到内存中后,,它是存在于纹理的形式。由于从这里可以看出。纹理事实上就是一块内存。这块内存中存放的是依照指定的像素格式填充的图片像素信息。
以下进入正题:
1、TextureCache
TextureCache纹理缓存是最底层也是最有效的纹理缓存。它究竟有什么用呢?我先描写叙述一个现象吧:如果游戏中有个界面用到的图片许多,,第一次点进这界面时速度很慢(由于要载入绘制许多图片)。可第二次点击却一下子就进去了。这是为什么呢?原来Cocos2dx的渲染机制是能够反复使用同一份纹理在不同的场合进行绘制,从而达到反复使用。减少内存和GPU运算资源的消耗与开销。
举个样例:创建一个精灵
auto sp = Sprite::create("image.png");//精灵图片是image.png
第一次使用image.png这图片有两个步骤,一个是先将图片载入进TextureCache缓存中,下一步是绘制图片,从而将其显示在场景中。
第二次使用image.png时,由于之前image.png已经被放入TextureCache中,所以这里仅仅需从缓存中找到这张图片,然后将其绘制出来就能够。
以下用几行代码做个总结:
//第一种载入精灵的方法
auto sp1 = Sprite::create("boy.png");
this->addChild(sp1,1); //另外一种载入精灵的方法
auto sp_cache = Director::getInstance()->addImage("boy.png");
auto sp1 = Sprite::createWithTexture(sp_cache);
this->addChild(sp1,1);
有人可能回觉得另外一种方法效率比較高,事实上不然。俩种都一样!
它们都是经过了载入图片到TextureCache缓存中,然后从缓存中提取该纹理并绘制出来这两个步骤。
可是另外一种方法使用起来会更灵活,就像我上面说到的,如果一个界面用到的资源许多。能够先将这些图片资源读取到TextureCache中。等真正进入到这个界面再使用这些图片速度就会很快。经常使用到的地方就是游戏的资源载入界面,能够參考这篇博客:http://blog.csdn.net/start530/article/details/19420317
2、SpriteFrameCache
顾名思义。这里的缓存就是SpriteFrame的缓存。
跟TextureCache功能一样。只是跟TextureCache不同的是。如果内存池中不存在要查找的图片。它会提示找不到,而不会去本地载入图片。
SpriteFrameCache一般用来处理plist文件(这个文件指定了每一个独立的精灵在这张“大图”里面的位置和大小),该文件相应一张包括多个精灵的大图,plist文件能够使用TexturePacker制作。
auto frameCache = SpriteFrameCache::getInstance();
frameCache->addSpriteFramesWithFile("boy.plist","boy.png");//boy.png里集合了boy1.png,boy2.png这些小图
auto frame_sp = Sprite::createWithSpriteFrameName("boy1.png");//从SpriteFrameCache缓存中找到boy1.png这张图片.
this->addChild(frame_sp,2);
3、AnimationCache
这个应该是最简单的吧,是动画的缓存。
对于精灵动画,每次创建时都须要载入精灵帧。然后按顺序加入到数组,再用Animation读取数组创建动画。这是一个很烦琐的计算过程。
而对于使用频率高的动画,比如角色的走动、跳舞等,能够将其加入到AnimationCache中,每次使用都从这个缓存中调用,这样能够有效的减少创建动画的巨大消耗。
示比例如以下:如果有两组动画dance_animate,sleep_animate.
//将其载入到缓存中
AnimationCache::getInstance()->addAnimation(dance_animate,"dance");//第二个參数是动画存入缓存时相应的key
AnimationCache::getInstance()->addAnimation(sleep_animate,"sleep"); //读取缓存中的动画
auto dance_animate = AnimationCache::getInstance()->animationByName("dance");//依据key从缓存中提取动画
auto sleep_animate = AnimationCache::getInstance()->animationByName("sleep");
好了,就这样。
尊重原创。转载请注明来源:http://blog.csdn.net/star530/article/details/23612487
版权声明:本文博主原创文章,博客,未经同意不得转载。
Cocos2dx 温馨提示(十)三种缓存类演示的更多相关文章
- qt中的lineEdit文本输入框的输入类型限制(三种验证类)
qt的三种验证类: 1.输入int类型 QValidator *validator=new QIntValidator(100,999,this): QLineEdit *edit=new QLine ...
- NET下三种缓存机制(Winform里面的缓存使用 )
原文(http://www.cnblogs.com/wuhuacong/p/3526335.html)非常感谢伍华聪作者的分享! 缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度 ...
- 全面剖析Smarty缓存机制一[三种缓存方式]
今天主要全面总结下Smarty模板引擎中强大的缓存机制,缓存机制有效减少了系统对服务器的压力,而这也是很多开发者喜欢Smarty的原因之一,由于篇幅较大,便于博友阅读,这篇文章将剖析Smarty缓存的 ...
- 详解三种缓存过期策略LFU,FIFO,LRU(附带实现代码)
在学操作系统的时候,就会接触到缓存调度算法,缓存页面调度算法:先分配一定的页面空间,使用页面的时候首先去查询空间是否有该页面的缓存,如果有的话直接拿出来,如果没有的话先查询,如果页面空间没有满的时候, ...
- cocos2dx中的三种基本的数据类型
cocos2dx中提供了三种基本的数据类型:CCString(字符串),CCArray(数组),CCDictionary(数据字典(哈希的功能)) 2.CCString的用法 class CCStr ...
- django 三种缓存模式的使用及注意点
Django 缓存模式的使用(主要针对RestFul设计模式的项目) 有三种模式: 全站使用缓存模式(整个项目每个接口都会使用缓存,缺点:所以接口都无法实时性获取数据) 单独视图缓存模式(单个接口使用 ...
- JDBC-DBUtils工具-[课本293]-ResultSetHander接口的三种实现类的BeanHander/BeanListHander/ScalarHander
---恢复内容开始--- ResultSetHander接口 1.使用BeanHandler()只返回第一行结果集 ,封装到一个对应的JavaBean中 ;eg: User user=(User)bd ...
- .NET的三种缓存(页面缓存,控件缓存,自定义缓存)
BLL.Area bll = new BLL.Area(); protected void Page_Load(object sender, EventArgs e) { if (Cache[&quo ...
- java反射三种获得类类型的方法
public class Test { public static void main(String[] args) { Test t=new Test();//所有的类都是Class类的实例(类类型 ...
随机推荐
- LA 5902 - Movie collection 树状数组(Fenwick树)
看题传送门 题目大意:XXX喜欢看电影,他有好多好多的影碟,每个影碟都有个独立的编号.开始是从下往上影碟的顺序是n~1,他每次拿出影碟的时候,你需要输出压在该影碟上的有几个.(拿出后其他影碟顺序不变) ...
- php 如何写一个自己项目的安装程序
版权声明:此篇文章只是用作笔记,如果版权冲突,请邮件通知一下(15201155501@163.com) https://blog.csdn.net/shenpengchao/article/detai ...
- 【例题5-4 UVA - 156】Ananagrams
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每个字符串如果每个字符按照升序排一下.假设他们能够互相变化. 则肯定是一样的. 根据这个东西,用一个map来判重就好. [错的次数] ...
- SDK应该包括什么东西
作者:朱金灿 来源:http://blog.csdn.net/clever101 如果让你设计和开发一个SDK(软件二次开发包),你认为里面应该有什么东西?首先接口文件和库文件之类是必不可少的,否则别 ...
- 【u250】manhattan
Time Limit: 1 second Memory Limit: 64 MB [问题描述] 混乱的城市已经变得无法控制.大楼随处乱造,城市的布局也是一片混乱.市长决定要结束这种局面,兵器并且想建造 ...
- [Math Processing Error] 问题的解决(F5刷新页面与 Ctrl/Shift + F5 刷新页面的区别)
Why is [Math Processing Error] all over the place today? 当打开某页面出现 [Math Processing Error],一般表示 MathJ ...
- HTML代码简写法:Emmet和Haml(转)
HTML代码写起来很费事,因为它的标签多. 一种解决方法是采用模板, 在别人写好的骨架内,填入自己的内容.还有一种就是我今天想要介绍的方法----简写法. 常用的简写法,目前主要是Emmet和Haml ...
- 【codeforces 750A】New Year and Hurry
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- MFC获取各个窗体(体)之间的指针(对象)
MFC在非常多的对话框操作中,我们常常要用到在一个对话框中调用还有一个对话框的函数或变量.能够用例如以下方法来解决. HWND hWnd=::FindWindow(NULL,_T("S ...
- iOS 直播
待解决: 貌似苹果规定10M以内的视频可以用RTMP,以上的必须用HLS ? IOS非直播超过10分钟只能用hls,ios上有规定? 待尝试: 用Vitamion内核开发的可以自定义界面的视频播放器 ...