游戏中通常需要将常用的资源如:声音,图片,plist文件,提前加载进内存,以加快游戏的流畅度

1.预加载声音:

SimpleAudioEngine::getInstance()->preloadBackgroundMusic("boom.mp3");

加载之后就可以直接播放:SimpleAudioEngine::getInstance()->playBackgroundMusic("boom.mp3");

2.预加载图片资源:

图片资源的加载分为同步加载和异步加载两种方式,通常我们采用异步加载的方式:

TextureCache::getInstance()->addImageAsync("boss.png", CC_CALLBACK_1(LoadingScene::ResourceCallBack,this));//ResourceCallBack是加载后调用的函数,可做统计用

加载到内存之后,我们就可以直接从内存读取,而不需要IO操作了:

从内存中读取已经加载的图片资源,有两种方法:

auto bg = Sprite::createWithTexture(TextureCache::getInstance()->getTextureForKey("groundLevel.jpg"));//前提是前面异步加载的图片资源必须加载完成了,成功了,因为异步加载只是执行了加载动作,是否加载成功,不得而知.

第二种方法:

auto bg = Sprite::createWithTexture(TextureCache::getInstance()->addImage("groundLevel.jpg"));//使用addImage()方法,最保险,如果该图片没有预先加载,则通过IO操作从磁盘中加载进内存,并返回一个Texture2D* 对象,如果前面已经加载过,在内存中存在了,则直接读取内存.

两种方法的比较:

追求速度:第一种方法读取,前提是一定要保证要读取的资源图片已经加载进内存

追求保险:第二种方法,无论是否加载过,都会获得正确的结果,但是要保证资源图片是存在的.

3.加载其他资源文件,如plist,通常是一些3D模型的文件,或者粒子特效的资源文件

FileUtils::getInstance()->getDataFromFile("debris.plist");//预加载3D模型的文件

FileUtils::getInstance()->getDataFromFile("vanishingPoint.plist");//预加载漫天繁星的粒子特效的plist文件

SpriteFrameCache::getInstance()->addSpriteFramesWithFile("menu_scene.plist");//预加载打包的图片plist文件

(从已经加载的内存帧缓存中读取图片的方法:auto sprite=Sprite::createWithSpriteFrameName("mainmenu_BG.png");//前提是mainmenu_BG.png是已经通过plist或其他方法加载到了FrameCache中)

cocos2dx中加载图片资源的方法,和从内存中获取已经加载的图片资源的方法的更多相关文章

  1. java中方法调用在内存中的体现

    在java中,方法以及局部变量(即在方法中声明的变量)是放在栈内存上的.当你调用一个方法时,该方法会放在调用栈的栈顶.栈顶的方法是目前正在执行的方法,直到执行完毕才会从栈顶释放.我们知道,栈是一种执行 ...

  2. 一个 -100.01 的double 在内存中怎么存储的. 一个中文String 在内存中占多少直接 utf-8 / GBK

    一.-100.01 的double 在内存中怎么存储的 double双精度数据类型存储格式IEEE 双精度格式为8字节64位,由三个字段组成:52 位小数 f : 11 位偏置指数 e :以及 1 位 ...

  3. C语言中字符型,整数型,浮点型在内存中如何存储

    ···void main() { unsigned char a = 97; printf("%p",&a); printf("%c,%d\n", a, ...

  4. EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载

    之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...

  5. EF如何操作内存中的数据和加载外键数据:延迟加载、贪婪加载、显示加载

    EF如何操作内存中的数据和加载外键数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需 ...

  6. (BUG已修改,最优化)安卓ListView异步加载网络图片与缓存软引用图片,线程池,只加载当前屏之说明

    原文:http://blog.csdn.net/java_jh/article/details/20068915 迟点出更新的.这个还有BUG.因为软引应不给力了.2.3之后 前几天的原文有一个线程管 ...

  7. JVM存储位置分配——java中局部变量、实例变量和静态变量在方法区、栈内存、堆内存中的分配

    Java中的变量根据不同的标准可以分为两类,以其引用的数据类型的不同来划分可分为“原始数据类型变量和引用数据类型变量”,以其作用范围的不同来区分可分为“局部变量,实例变量和静态变量”. 根据“Java ...

  8. 内存中 OLTP - 常见的工作负荷模式和迁移注意事项(三)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<In-Memory OLTP – Comm ...

  9. 内存中 OLTP - 常见的工作负荷模式和迁移注意事项(二)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<In-Memory OLTP – Comm ...

随机推荐

  1. 适配i5,要加入i5的启动页才行,否则运行的效果还是i4

    适配i5,要加入i5的启动页才行,否则运行的效果还是i4

  2. HTML5+CSS3-机器猫

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Oracle 日期查询

    转自:http://hi.baidu.com/fengboy_7334/blog/item/b0aa60035f36a1e809fa935d.html 例如:select * from c where ...

  4. 【转】Ajax 基础学习

    今天简单的学习了 Ajax 的基础知识,总结在这里.部分代码不是原创,特此说明. [Ajax 简介] AJAX = Asynchronous JavaScript and XML(异步的 JavaSc ...

  5. windows下,python+scrapy环境搭建

    •安装lxml(官网给出的地址http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml,下载whl文件安装) •安装zope.interface https:// ...

  6. codevs1011 数的计算 2001年NOIP全国联赛普及组

    题目描述 Description 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.          不 ...

  7. MVC基础知识-持续更新....

    1.如何在自动生成的视图中显示需要的字段名称: 在相应的定义字段中添加Display,例如: [Display(Name = "用户名:")] public string User ...

  8. iOS开发那些事-iOS应用本地化-文本信息本地化

    文本信息本地化在本地化工作中占有很大的比例.包括了:应用名称本地化.系统按钮和信息本地化,以及静态文本信息本地化. 系统按钮和信息本地化 还记得天气预报应用背后的“完成”按钮吗,它在中文环境下是“完成 ...

  9. Toad for Oracle 快捷键

    F4 看表的结构 F5 执行对话框中的SQL,注意最后需要以;结尾 F7 清除当前编辑框中所有的sql F8 查看历史的sql语句 F9 执行当前行的sql F10 看菜单 Ctrl + F12 保存 ...

  10. 济南学习 Day 1 T2 am

    死亡[问题描述]现在有M个位置可以打 sif,有N +1个人在排队等着打 sif.现在告诉你 个人每个人需要多长的时间打 sif,问你第N +1个人什么时候才能打 sif. (前N个人必须按照顺序来) ...