在介绍了三级缓存,首先,我们必须弄清楚的一个问题:什么是纹理?它的通俗的解释,质感是它的含义的图片。

当图像加载到内存中后,,它是存在于纹理的形式。由于从这里可以看出。纹理事实上就是一块内存。这块内存中存放的是依照指定的像素格式填充的图片像素信息。

以下进入正题:
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 温馨提示(十)三种缓存类演示的更多相关文章

  1. qt中的lineEdit文本输入框的输入类型限制(三种验证类)

    qt的三种验证类: 1.输入int类型 QValidator *validator=new QIntValidator(100,999,this): QLineEdit *edit=new QLine ...

  2. NET下三种缓存机制(Winform里面的缓存使用 )

    原文(http://www.cnblogs.com/wuhuacong/p/3526335.html)非常感谢伍华聪作者的分享! 缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度 ...

  3. 全面剖析Smarty缓存机制一[三种缓存方式]

    今天主要全面总结下Smarty模板引擎中强大的缓存机制,缓存机制有效减少了系统对服务器的压力,而这也是很多开发者喜欢Smarty的原因之一,由于篇幅较大,便于博友阅读,这篇文章将剖析Smarty缓存的 ...

  4. 详解三种缓存过期策略LFU,FIFO,LRU(附带实现代码)

    在学操作系统的时候,就会接触到缓存调度算法,缓存页面调度算法:先分配一定的页面空间,使用页面的时候首先去查询空间是否有该页面的缓存,如果有的话直接拿出来,如果没有的话先查询,如果页面空间没有满的时候, ...

  5. cocos2dx中的三种基本的数据类型

    cocos2dx中提供了三种基本的数据类型:CCString(字符串),CCArray(数组),CCDictionary(数据字典(哈希的功能)) 2.CCString的用法 class  CCStr ...

  6. django 三种缓存模式的使用及注意点

    Django 缓存模式的使用(主要针对RestFul设计模式的项目) 有三种模式: 全站使用缓存模式(整个项目每个接口都会使用缓存,缺点:所以接口都无法实时性获取数据) 单独视图缓存模式(单个接口使用 ...

  7. JDBC-DBUtils工具-[课本293]-ResultSetHander接口的三种实现类的BeanHander/BeanListHander/ScalarHander

    ---恢复内容开始--- ResultSetHander接口 1.使用BeanHandler()只返回第一行结果集 ,封装到一个对应的JavaBean中 ;eg: User user=(User)bd ...

  8. .NET的三种缓存(页面缓存,控件缓存,自定义缓存)

    BLL.Area bll = new BLL.Area(); protected void Page_Load(object sender, EventArgs e) { if (Cache[&quo ...

  9. java反射三种获得类类型的方法

    public class Test { public static void main(String[] args) { Test t=new Test();//所有的类都是Class类的实例(类类型 ...

随机推荐

  1. 线程TLAB区域的深入剖析

    (1) 堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的 (2) Sun Hotspot JVM为了提升对象内存分配的效率,对于所创建的线程 ...

  2. C API函数描写叙述(S-W)

    25.2.3.59. mysql_select_db() int mysql_select_db(MYSQL *mysql, const char *db) 描写叙述 使由db指定的数据库成为由mys ...

  3. js cookie介绍和实例(用于自动登录,记住用户名等)

    js cookie介绍和实例(用于自动登录,记住用户名等) 一.总结 1.cookie在客户端:因为js是最初是用来在客户端和服务器端进行通信使用的,所以客户端比如js可以操作cookie正常 2.c ...

  4. Mac OS X Kernel Basic User Credentials

    User Credentials In order to understand security in OS X, it is important to understand that there a ...

  5. ArcGIS 中要素的查询与修改

    转自nimeila的回答 求C# ArcGIS Engine修改选中要素的属性,单要素都行 RLAlterFrm RLalter = new RLAlterFrm(); RLalter.ShowDia ...

  6. 最小生成树(MST)求解旅行商问题

    从当前位置开始(也可以不指定起始位置),访问完所有未访问的端点后返回起始点的最短路径就是连接所有端点的生成树.最小生成树需保证: 每条边最多只能被选 1 次: 抹掉所有未被选择的边时,图形不能分为上下 ...

  7. Vue源码--解读vue响应式原理

    原文链接:https://geniuspeng.github.io/2018/01/05/vue-reactivity/ Vue的官方说明里有深入响应式原理这一节.在此官方也提到过: 当你把一个普通的 ...

  8. 洛谷 P3908 异或之和

    洛谷 P3908 异或之和 题目描述 求1⨁2⨁⋯⨁N 的值. A⨁B 即 AA, B 按位异或. 输入输出格式 输入格式: 1 个整数 N . 输出格式: 1 个整数,表示所求的值. 输入输出样例 ...

  9. [Typescript] Generics using TypeScript

    In this lesson we cover the key reason why programming languages need generics. We then show how use ...

  10. [SCSS] Use Standard Built-in SCSS Functions for Common Operations

    We can use javascript for color and opacity variations, math, list and map logic or to see if someth ...