cocos2dx纹理缓存
2016-04-21 13:21
597 查看
本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=131
一、介绍
被缓存的纹理之后还能被用来绘制。但是每一个被缓存图片的大小、颜色和纹理框都不能被改变。这个信息被存储在内存中因此不用每次绘制的时候再发送到GPU中。
二、CCTextureCache
Cocos2dx 借助CCTextureCache或者CCSpriteFrameCache来使用纹理缓存来保持CCSprite。你可以提前把纹理加载进缓存中并且在场景中一直可用。如何加载这些纹理需要你自己根据实际情况决定。比如,你可以选择异步加载他们,或者使用有滚动条的加载页面来加载他们。
当你创建了一个精灵,你一般会这么用CCSprite::create(pszFileName),如果你看看这个CCSprite::create(pszFileName)函数的内部实现方法,你将会发现它添加这些图片到了纹理缓存中:
[cpp] view
plain copy
bool CCSprite::initWithFile(const char *pszFilename)
{
CCAssert(pszFilename != NULL, "Invalid filename for sprite");
CCTexture2D *pTexture = CCTextureCache::sharedTextureCache()->addImage(pszFilename);
if (pTexture)
{
CCRect rect = CCRectZero;
rect.size = pTexture->getContentSize();
return initWithTexture(pTexture, rect);
}
//不要释放,当加载纹理失败,相比崩溃来说,获取一个透明的精灵可能更好一些
// this->release();
return false;
}
三、CCSpriteFrameCache
单例模型解决了纹理加载。一旦你的纹理被加载进来,下一次使用的时候它将会返回一个之前已经加载了的纹理的引用,而不是重新加载,这样就减少了GPU&CPU内存。
CCSpriteFrameCache单例是所有精灵帧的缓存。我们可以通过一个精灵片以及它的相关联的xml文件来将多个精灵加载进缓存中。从缓存里我们可以创建精灵对象。
纹理通常是一个里面包含着很多小的纹理的大图片。如下图片就是其中一个纹理。
有三种方式来加载纹理到CCSpriteFrameCache中:
1、一个xml(plist)文件
2、一个xml(plist)文件和一个纹理
3、一个CCSpriteFrame和一个精灵帧名字
(查看所有的apiCCSpriteFrameCache
API)
四、示例代码:
[cpp] view
plain copy
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
cache->addSpriteFramesWithFile("family.plist", "family.png");
精灵图集能够帮助节省内存的原因是因为每次你想要去创建一个新的精灵的时候,你仅仅是获取精灵图集的管理图片,告诉它你想要获取的图片文件,它就会帮你复用之前的内存空间而不是重新再创建一个整个的新图片。
一、介绍
被缓存的纹理之后还能被用来绘制。但是每一个被缓存图片的大小、颜色和纹理框都不能被改变。这个信息被存储在内存中因此不用每次绘制的时候再发送到GPU中。
二、CCTextureCache
Cocos2dx 借助CCTextureCache或者CCSpriteFrameCache来使用纹理缓存来保持CCSprite。你可以提前把纹理加载进缓存中并且在场景中一直可用。如何加载这些纹理需要你自己根据实际情况决定。比如,你可以选择异步加载他们,或者使用有滚动条的加载页面来加载他们。
当你创建了一个精灵,你一般会这么用CCSprite::create(pszFileName),如果你看看这个CCSprite::create(pszFileName)函数的内部实现方法,你将会发现它添加这些图片到了纹理缓存中:
[cpp] view
plain copy
bool CCSprite::initWithFile(const char *pszFilename)
{
CCAssert(pszFilename != NULL, "Invalid filename for sprite");
CCTexture2D *pTexture = CCTextureCache::sharedTextureCache()->addImage(pszFilename);
if (pTexture)
{
CCRect rect = CCRectZero;
rect.size = pTexture->getContentSize();
return initWithTexture(pTexture, rect);
}
//不要释放,当加载纹理失败,相比崩溃来说,获取一个透明的精灵可能更好一些
// this->release();
return false;
}
三、CCSpriteFrameCache
单例模型解决了纹理加载。一旦你的纹理被加载进来,下一次使用的时候它将会返回一个之前已经加载了的纹理的引用,而不是重新加载,这样就减少了GPU&CPU内存。
CCSpriteFrameCache单例是所有精灵帧的缓存。我们可以通过一个精灵片以及它的相关联的xml文件来将多个精灵加载进缓存中。从缓存里我们可以创建精灵对象。
纹理通常是一个里面包含着很多小的纹理的大图片。如下图片就是其中一个纹理。
有三种方式来加载纹理到CCSpriteFrameCache中:
1、一个xml(plist)文件
2、一个xml(plist)文件和一个纹理
3、一个CCSpriteFrame和一个精灵帧名字
(查看所有的apiCCSpriteFrameCache
API)
四、示例代码:
[cpp] view
plain copy
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
cache->addSpriteFramesWithFile("family.plist", "family.png");
精灵图集能够帮助节省内存的原因是因为每次你想要去创建一个新的精灵的时候,你仅仅是获取精灵图集的管理图片,告诉它你想要获取的图片文件,它就会帮你复用之前的内存空间而不是重新再创建一个整个的新图片。
相关文章推荐
- Cocos2dx制作抖动弹出对话框效果
- cocos2dx碰撞检测实现
- cocos2dx中的cocosDenshion对不同平台音频支持格式
- cocos2dx socket 通信
- 【COCOS2DX-ANDROID-游戏开发之二十】停止手打所有cpp文件到android.mk
- 我的cocos2D-X3.10安装之路
- cocos2d-x RenderTexture
- ----*cocos2d 制作动态光晕效果基础 —— blendFunc
- 微信飞机大战--基于cocos2d-x3.2
- 【步兵 cocos-js】框架基本成形
- Cocos2d-x3.0 捕捉Android的菜单键和返回键
- 关于Cocos Creator用js脚本代码播放骨骼动画的步骤和注意事项
- Cocos2dx:实现游戏关卡ScrollView方式(二)
- 游戏2048--基于cocos2d-x3.2
- cocosstdio之字体之文本和FNT字体
- Cocos2dx:实现游戏关卡PageView方式(一)
- cocos2d-x 使用位图工具制作 fnt字体
- Cocos2dx:事件分发拦截
- win下编译android老出现问题,cocos-ext.h: No such file or directory
- cocos2dx的CCCamera