cocos2dx纹理缓存

本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=131

一、介绍

被缓存的纹理之后还能被用来绘制。但是每一个被缓存图片的大小、颜色和纹理框都不能被改变。这个信息被存储在内存中因此不用每次绘制的时候再发送到GPU中。

二、CCTextureCache

Cocos2dx 借助CCTextureCache或者CCSpriteFrameCache来使用纹理缓存来保持CCSprite。你可以提前把纹理加载进缓存中并且在场景中一直可用。如何加载这些纹理需要你自己根据实际情况决定。比如,你可以选择异步加载他们,或者使用有滚动条的加载页面来加载他们。

当你创建了一个精灵,你一般会这么用CCSprite::create(pszFileName),如果你看看这个CCSprite::create(pszFileName)函数的内部实现方法,你将会发现它添加这些图片到了纹理缓存中:

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

四、示例代码:

CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();

cache->addSpriteFramesWithFile("family.plist", "family.png");

精灵图集能够帮助节省内存的原因是因为每次你想要去创建一个新的精灵的时候,你仅仅是获取精灵图集的管理图片,告诉它你想要获取的图片文件,它就会帮你复用之前的内存空间而不是重新再创建一个整个的新图片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值