码迷,mamicode.com
首页 > 其他好文 > 详细

Cocos2dx 温馨提示(十)三种缓存类演示

时间:2015-09-18 18:19:04      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

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

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



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

标签:

原文地址:http://www.cnblogs.com/gcczhongduan/p/4819934.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!