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

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

以下进入正题:
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

版权声明:本文博主原创文章,博客,未经同意不得转载。

最新文章

  1. bash shell + python简单教程,让你的mac/linux终端灰起来~
  2. 对c++ public、protected、private关键字的理解
  3. 第十章 嵌入式Linux的调试技术
  4. Hello Mybatis 02 mybatis generator
  5. c++写入txt文件
  6. 适配器模式(Adapter Pattern)
  7. maven继承parent,relativePath warn信息的解决办法
  8. JS中注意原型链的“指向”
  9. python 爬取百度云资源
  10. uiview 的transitionWithView 方法使用
  11. Button控件
  12. easy ui datagrid 数据绑定
  13. ArcGIS教程:加权叠加
  14. nodejs服务
  15. WinAPI: GetVolumeInformation - 读取文件系统信息
  16. cocos2dx环境配置和打包
  17. blob的存储与读取
  18. JVM点滴
  19. 微信分享大图遇到的问题(Android)
  20. react 使用 react-loadable分包

热门文章

  1. KDE Plasma 5.8 的 LTS 周期正好与其所采用的 Qt 5.6 的 LTS 周期一致
  2. js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态)
  3. u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统
  4. Oracle 11gR2 静默安装奇怪错误
  5. Engine工具栏按钮的使用详解
  6. FeatureLayer,FeatureDataset,FeatureClass,Feature的区别与联系总结
  7. Swift - 警告提示框(UIAlertController)的用法
  8. Vue.js如何划分组件
  9. goodFeaturesToTrack——Shi-Tomasi角点检测
  10. 嵌入式linux串口通信自发自收测试程序