来源网址:http://www.jb51.cc/article/p-hqxfhzje-wx.html
【前言】
Cocos引擎主要有三种缓存类:
> 纹理缓存:TextureCache
> 精灵帧缓存:SpriteFrameCache
> 动画缓存:AnimationCache
缓存的目的就是:先将所需资源(如纹理图片)加载到内存中,之后再次使用该资源的时候,就可以直接从内存中取出,而不需要重新加载。从而减少了cpu和GPU的内存占用。
本文对参考文献的内容进行了整理与整合,并加入一些自己的观点。
【TextureCache】
1、概述
在游戏中需要加载大量的纹理图片,这些操作都是很耗内存和资源的。
当游戏中有个界面用到的图片非常多,第一次点进这界面时速度非常慢(因为要加载绘制很多图片)出现卡顿,我们可以使用TextureCache提前异步加载纹理,等加载结束,进入到这个界面再使用这些图片速度就会非常快。
> Texture2D(纹理):即图片加载入内存后供cpu和GPU操作的贴图对象。
> TextureCache(纹理缓存):用于加载和管理纹理。一旦纹理加载完成,下次使用时可使用它返回之前加载的纹理,从而减少对GPU和cpu内存的占用。
当你创建一个精灵Sprite,你一般会使用Sprite::create(fileName)。假如你去看Sprite::create(fileName)的实现方式,你将看到它将这个图片增加到纹理缓存中去了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
//
Sprite*Sprite::create(
const
std::string&filename)
{
Sprite*sprite=
new
Sprite();
if
(sprite&&sprite->initWithFile(filename))
{
sprite->autorelease();
return
sprite;
}
_SAFE_DELETE(sprite);
nullptr;
}
bool
Sprite::initWithFile(
std::string&filename)
{
ASSERT(filename.size()>0,
"Invalidfilenameforsprite"
);
//加载filename的纹理图片
Texture2D*texture=Director::getInstance()->getTextureCache()->addImage(filename);
(texture)
{
Rectrect=Rect::ZERO;
rect.size=texture->getContentSize();
initWithTexture(texture,rect);
}
return
false
;
}
//
|
2、获取TextureCache
在3.x版本中,TextureCache不再作为单例模式使用。而是作为Director的成员变量,通过以下方式获取。
//
//获取纹理缓存类TextureCache
Director::getInstance()->getTextureCache();
3、纹理的加载与获取
|