cocos2dx中加载图片资源的方法,和从内存中获取已经加载的图片资源的方法
游戏中通常需要将常用的资源如:声音,图片,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中加载图片资源的方法,和从内存中获取已经加载的图片资源的方法的更多相关文章
- java中方法调用在内存中的体现
在java中,方法以及局部变量(即在方法中声明的变量)是放在栈内存上的.当你调用一个方法时,该方法会放在调用栈的栈顶.栈顶的方法是目前正在执行的方法,直到执行完毕才会从栈顶释放.我们知道,栈是一种执行 ...
- 一个 -100.01 的double 在内存中怎么存储的. 一个中文String 在内存中占多少直接 utf-8 / GBK
一.-100.01 的double 在内存中怎么存储的 double双精度数据类型存储格式IEEE 双精度格式为8字节64位,由三个字段组成:52 位小数 f : 11 位偏置指数 e :以及 1 位 ...
- C语言中字符型,整数型,浮点型在内存中如何存储
···void main() { unsigned char a = 97; printf("%p",&a); printf("%c,%d\n", a, ...
- EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载
之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...
- EF如何操作内存中的数据和加载外键数据:延迟加载、贪婪加载、显示加载
EF如何操作内存中的数据和加载外键数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需 ...
- (BUG已修改,最优化)安卓ListView异步加载网络图片与缓存软引用图片,线程池,只加载当前屏之说明
原文:http://blog.csdn.net/java_jh/article/details/20068915 迟点出更新的.这个还有BUG.因为软引应不给力了.2.3之后 前几天的原文有一个线程管 ...
- JVM存储位置分配——java中局部变量、实例变量和静态变量在方法区、栈内存、堆内存中的分配
Java中的变量根据不同的标准可以分为两类,以其引用的数据类型的不同来划分可分为“原始数据类型变量和引用数据类型变量”,以其作用范围的不同来区分可分为“局部变量,实例变量和静态变量”. 根据“Java ...
- 内存中 OLTP - 常见的工作负荷模式和迁移注意事项(三)
----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<In-Memory OLTP – Comm ...
- 内存中 OLTP - 常见的工作负荷模式和迁移注意事项(二)
----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<In-Memory OLTP – Comm ...
随机推荐
- 微软测试版Visual Studio for Mac下载
地址:https://www.visualstudio.com/thank-downloading-visual-studio-mac/?sku=vsmac#
- 获得自动增长的MySQL主键
下面的脚本教您如何获得自动增长的MySQL主键,如果您对MySQL主键方面感兴趣的话,不妨一看,相信对您学习MySQL主键方面会有所启迪. import java.sql.Connection; im ...
- .NET DLL 保护措施详解(三)最终效果
针对.NET DLL 保护措施详解所述思路完成最终的实现,以下为程序包下载地址 下载 注意: 运行环境为.net4.0,需要安装VS2015 C++可发行组件包vc_redist.x86.exe.然后 ...
- Python类和实例
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可 ...
- 在sql-server上建立mysql链接库
EXEC sp_addlinkedserver @server = N'RESUME_MYSQL_CONN', @srvproduct=N'MySQL ODBC 5.1 Driver', @provi ...
- Mac下github的使用
新建github账户 新建Repository,如下图: 建立连接github的秘钥 打开mac的shell cd ~ mkdir .ssh cd .ssh ssh-keygen -t rsa ...
- 9款经典华丽的CSS3分享按钮
如果你经常活跃在一些社交网站上,那么你肯定会看到过很多形式各异的分享按钮,目前由于HTML5和CSS3的普及,很多分享按钮也都应用了CSS3样式,甚至会有很多带有动画的CSS3分享按钮.本文就向大家介 ...
- Tables for condition techniques
T682i -- Access sequence and the tables T685 -- Condition types and Access sequences T683s -- ...
- .NET中的注释种类,单行注释、多行注释、文档注释。。。
注释不是给编译器看的,而是给程序员看的.是程序员之间交流的一种方式.好的程序员一定要有完善的注释. .NET注释类型. 1.单行注释 // a.当代码行比较短时,注释可以放在代码后面. b.当代码行 ...
- 《LDAP服务器的配置与客户端的测试》RHEL6——第一篇 运维工程师必考
ldap这种原始的服务器搭建起来比较复杂,同时它也是CE必考的(客户端的搭建). 服务器端的配置: 1.安装openldap-servers软件包 2.查看ldap模板文件的存放位置: 3.拷贝lda ...