分享一个我用cocos2d加载图片的方式,其实很简单,我觉得还挺实用的
首先要提醒一点,ihpone开发中所有的图片最好都是png格式的,虽然png格式的图片比jpg或其他的图片要大,但是png的图片在sdk中是做过优化处理的,是苹果推荐的格式,对这个格式支持也是相对好的.尤其是在最新4.2的sdk中,如果你有jpg的图片,并且比较大,在真机上是现实不出来的.
最开始做项目,对cocos2d了解的比较少,添加一个CCSprite时,为了简单,就直接用
CCSprite *sprite = [CCSprite spriteWithFile:@"图片名称"];
如果你是这样用,那就是说图片要通过自动释放机制来完成对加载图片的释放了,那究竟什么时候图片会自动释放掉呢?当然是程序内存快要用尽的时候
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
[[CCTextureCache sharedTextureCache] removeUnusedTextures];
}
看你应用的delegate方法,会有上面一个函数,这个函数就是用来触发什么释放图片的.内存快要到达极限的时候会发出警告告诉上边的方面,然后这个方法就会从cache中释放掉当前不用的图片,
removeUnusedTextures进到这个里面会看到实际上就是释放掉retaincount=1的资源.通过log会发现内存警告是分级别的,
当时1级的时候问题不大,2级的时候就危险了,超过2级程序就完蛋了.而在调用内存警告之前,通过xcode提供内存跟踪工具,会发现图片一直会占着内存.
所以就不要依赖自动释放了,会害了项目的,尤其做游戏,图片比较多,如果用这种方式加载素材,到后期就惨了.我是深有体会.
我是这样做的
CCTexture2D * backBGTexture = [[CCTextureCache sharedTextureCache] addImage:@"a_aboutBG.png"];
CCSprite * backgroundSprite = [[CCSprite alloc] initWithTexture:m_backBGTexture];
[self addChild:backgroundSprite];
[backgroundSprite release];
其实就是手动构建CCsprite这样,在图片不用的时候(一般在dealloc方法中),直接把图片remove掉
-(void)dealloc
{
[[CCTextureCache sharedTextureCache] removeTexture:backBGTexture];
[super dealloc];
}
再通过内存跟踪工具会发现,内存当即被释放掉了.这样场景间切换的时候,就可以把上一个场景的图片全部释放掉.
我就是这样做的.呵呵.
分享到:
相关推荐
感觉4个人开发游戏真的很累,游戏为了脱颖出更加真实的效果还使用了物理引擎,在老大的同意的情况下,我共享cocos2d自己写的一些大家比较常用的,因为cocos2d有些控件不怎么好用或者没有,反正我觉得是这样的。...
cocos2d-x异步加载plist cocos2d-x v2.2.0
Cocos2d-JS中使用Cocos Studio资源02:登录界面 cocos studio 界面图片资源
使用cocos2d-x实现UIWebView加载网页。本人已上传了名为“QQLogin.zip”.
ios cocos2d 场景切换特效源码,适合新手研究学习
用cocos2d写的飞机大战demo,有源码和资源,解压压缩包后在空项目中加载Classes中的代码,替换掉原来的Resources就可以了
Cocosd-x IOS平台加载百度网页(可以自行更改)的一个小demo
CocoStudio的使用无疑是cocos2d-x 3.0的重要组成部分,接下来我们用它来创建一组UI,并将其读入到程序中显示出来。 相关博客地址:http://blog.csdn.net/fansongy/article/details/12757411
这是一个如何在Cocos2d-x 3.0alpha 中加载使用由Gleed2D制作的xml关卡文件 Gleed2D是一款开源的通用目的的2D关卡编辑器,Gleed2D是一个非常小的地图编辑器,最特别之处在于它是并不是基于图块的关卡编辑器,在使用它...
Cocos2D-X2.2.3学习笔记6(UI系统)http://blog.csdn.net/hucblog/article/category/2242181
利用CCProgressTimer实现游戏加载界面的进度条
cocos2d-x游戏开发系列教程-坦克大战游戏加载地图的编写上
11.3.1 在cocos2d中加载斜角瓦片地图 11.3.2 在cocos2d中设置斜角瓦片地图 11.3.3 定位一个斜角瓦片 11.3.4 滚动斜角瓦片地图 11.3.5 斜角瓦片地图的边界问题 11.3.6 增加一个可移动的玩家角色 11.4 ...
cocos2dx editor是开发跨平台的手机游戏工具,运行window系统上,javascript脚本语言,基于cocos2d-x跨平台游戏引擎, 集合代码编辑,场景设计,动画制作,字体设计,还有粒子,物理系统,地图等等的,而且调试方便,...
项目中摘抄出来的代码,在LoadingLayer::onEnter()中,开了一个boost thread来加载资源
cocos2d-x场景切换源代码,http://blog.csdn.net/danming60520/article/details/8924192
//加载大炮的炮台效果和图标效果,如果这里的代码与上面的代码前后顺序更改,则会出现炮台效果在水波下面显示。不是没有显示,只是遮挡关系的原因。而看不见 texture=CCTextureCache::sharedTextureCache()->...
和cocos2d-x自带的win32环境下的iconv库不同,这个是已经编译好的android下使用的iocnv库。
cocos2d-x来加载资源,除了常用的方法之外,我们还可以用plist来创建一个资源组,这样不仅在加载多个资源是方便,而且还利于管理,那么怎么使用plist呢,下面我就举一个简单的例子,来和大家共同学习一下plist。
GameLayer:加载定义的鱼儿,并调度鱼儿的创建 Fish:不同类型的鱼儿创建,并让鱼儿在游戏界面活动,并在鱼儿游出主游戏界面时自动销毁自己。 分析说明: http://blog.csdn.net/hezeping888/article/details/9266257