cocos基础教程(10)纹理缓存技术

Cocos2d通过调用CCTextureCache或者CCSpriteFrameCache来缓存精灵的纹理。

当这个精灵调用CCTextureCache 或 CCSpriteFrameCache的方法的时候,cocos2dx将使用纹理缓存来创建一个CCSprite。所以你可以预先将纹理加载到缓存中,这样你在场景中使用的时候就非常方便了。怎么样加载这些纹理就看你自己的想法。例如,你可以选择异步加载方式,这样你就可以为loading场景增加一个进度条。

当你创建一个精灵,你一般会使用CCSprite::create(pszFileName)。假如你去看CCSprite::create(pszFileName)的实现方式,你将看到它将这个图片增加到纹理缓存中去了:

CCTextureCache

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);
    }
    return false;
}

CCSpriteFrameCache

CCSpriteFrameCache单例是所有精灵帧的缓存。使用spritesheet和与之相关的xml文件,我们可以加载很多的精灵帧到缓存中,那么之后我们就可以从这个缓存中创建精灵对象了。

和这个xml相关的纹理集一般是一个很大的图片,里面包含了很多小的纹理。下面就是一个纹理集的例子:

有三种方式来加载纹理集到CCSpriteFrameCache中:

  • 加载一个xml(plist)文件
  • 加载一个xml(plist)文件和一个纹理集
  • 通过CCSpriteFrame和一个精灵帧的名字

具体完整API请看CCSpriteFrameCache API。

样例:

CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache(); 

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

使用缓存的原因就是减少内存,因为当你使用一个图片创建一个精灵的时候,如果这个图片不在缓存中,那么就会将他加载到缓存中,当你需要用相同的图片来新建精灵的时候,就可以直接从缓存中取得,而不用再去新分配一份内存空间。

CCSpriteFrameCache vs. CCSpriteBatchNode

  • 最好是尽可能的使用spritesheets (CCSpriteBatchNodes)。这样的方式是减少draw的调用次数。Draw的调用是非常耗时的。每一个batchnode调用一次draw就可以绘制上面所有的节点,而不是每一个节点的draw都单独调用一次,
  • CCSpriteBatchNode渲染所有的子节点只需要一次,只需要调用一次draw。那就是为什么你需要把精灵加载batch node的原因,因为可以统一一起渲染。但是只有这个精灵使用的纹理包含在batch node中的才可以添加到batch node上,因为batch node一次只渲染这相同的纹理集。
  • 假如你把精灵添加到其他的节点上。那么每一个精灵就会调用自己的draw函数,batch node就没起作用了。
  • CCSpriteBatchNode也是一个常用节点。你可以从场景中像其他节点一样移除掉。纹理集和精灵帧都被缓存在CCTextureCache 和 CCSpriteFrameCache单例中。假如你想要从内存中移除纹理集和精灵帧,那么你不得不通过缓存类来完成这个工作。
时间: 2024-08-24 22:48:47

cocos基础教程(10)纹理缓存技术的相关文章

php学习不得不掌握的10大缓存技术

在php开发中,我们常常用到缓存技术,以提高开发.运行效率.那php常用缓存技术有哪些呢?它们是怎么使用的呢?下面小编就为大家分享php学习中不得不掌握的10大缓存技术,希望对php初学者有所帮助. 1.全页面静态化缓存 所谓全页面静态化缓存,就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程.此种方式,在CMS系统中比较常见,比如dedecms: 这种缓存,比较常用的实现方式是输出缓存: Ob_start() ******要运行的代码******

cocos基础教程(8)粒子效果

简介 粒子系统是指计算机图形学中模拟特定现象的技术,它在模仿自然现象.物理现象及空间扭曲上具备得天独厚的优势,为我们实现一些真实自然而又带有随机性的特效(如爆炸.烟花.水流)提供了方便. 粒子属性 一个强大的粒子系统它必然具备了多种多样的属性,这样才能配置出多样的粒子.下面就来看看粒子系统的主要属性吧. 主要属性: _duration 发射器生存时间,即它可以发射粒子的时间,注意这个时间和粒子生存时间不同.单位秒,-1表示永远:粒子发射结束后可点击工具栏的播放按钮再次发射 _emissionRa

PHP基础教程 10款人气暴涨的PHP开源工具

若想创建动态而又新颖的Web应用程序,PHP便是理想的选择.不用说,在Web开发世界里,PHP是最流行的语言之一.一些非常好用的PHP开源工具着实拯救了不少开发任务繁重的PHP开发 人员,减轻他们的开发负担.这些PHP开源工具改善了他们的工作流程,使他们的开发任务更简便和快捷.本人整理了 10 款最具人气的PHP开源工具分享给大家,欢迎交流分享.www.lampbrother.net/subject.html Monsta FTP 如果你想在浏览器中设置一个FTP文件管理,你需要有一款像Mons

cocos基础教程(1)Mac环境下搭建

下面主要介绍cocos2d-x环境的设置以及android的环境搭建 1.下载cocos2d-x 3.0正式版      http://www.cocos2d-x.org/download 2.下载android的sdk以及ndk     http://developer.android.com/sdk/index.html 3.下载ant     http://ant.apache.org (注:cocos2d-x的环境变量配置需要用到ant,主要是android需要使用到它) 4.下载pyt

cocos基础教程(11)事件分发机制

cocos3.0的事件分发机制: 创建一个事件监听器-用来实现各种触发后的逻辑. 事件监听器添加到事件分发器_eventDispatcher,所有事件监听器有这个分发器统一管理. 事件监听器有以下几种: 触摸事件 (EventListenerTouch) 键盘响应事件 (EventListenerKeyboard) 鼠标响应事件 (EventListenerMouse) 自定义事件 (EventListenerCustom) 加速记录事件 (EventListenerAcceleration)

cocos基础教程(4)数据结构介绍之cocos2d::Map<K,V>

1.概述 cocos2d::Map<K,V> 是一个内部使用了 std::unordered_map的关联容器模版. std::unordered_map 是一个存储了由key-value键值对组合成构成的关联性容器,允许基于键对单个元素进行快速检索. 2.模版参数 K - key value的类型. map中元素都由它的 key值作为唯一标识. V - mapped value的类型. T 必须是一个指向 cocos2d::Object 子类对象的指针. 3.内存管理 如果你在栈上声明了一个

计算机基础教程10 - 操作系统

操作系统是一个具有以下功能的程序 - 操作系统是充当软件和计算机硬件之间的接口的程序. 它是一组集成的专用程序,用于管理计算机的整体资源和操作. 它是一种专用软件,用于控制和监视驻留在计算机中的所有其他程序的执行,包括应用程序和其他系统软件. 操作系统的目标 操作系统的目标是 - 使计算机系统以有效的方式使用方便. 从用户隐藏硬件资源的详细信息. 为用户提供方便的界面来使用计算机系统. 充当硬件与其用户之间的中介,使用户更容易访问和使用其他资源. 管理计算机系统的资源. 跟踪谁正在使用哪个资源,

python入门基础教程10 python的分支语句

if分支语句 分支语句的作用是在某些条件控制下有选择的执行实现一定功能语句块.if 分支语句则是当if后的条件满足时,if 下的语句块被执行,语法格式如下所示: if <condition>:     statements 让我们看看代码吧. >>> sex = 'male' >>> if sex == 'male':      print 'Man!'#此处有两次回车键 Man! >>> if sex == 'female':      

cocos基础教程(12)点击交互的三种处理

1.概述 游戏也好,程序也好,只有能与用户交互才有意义.手机上的交互大致可以分为两部分:点击和输入.其中点击更为重要,几乎是游戏中全部的交互.在Cocos2d-x 3.0中,更改了dispatch机制.同时加入了两种新的交互形式:listener 和touchEvent回调.加上先前版本中的点击函数回调,与重写layer层的touch消息响应,构成了一个相对完整的交互模式. 2.三种点击 1.函数回调 函数回调是最简单的响应形式,一直以来被用于MenuItem中的点击处理.在新版本中,此处发生了