Cocos2d加载图片的方式

转载自:http://wangzy-boy.iteye.com/blog/907141

分享一个我用cocos2d加载图片的方式,其实很简单,我觉得还挺实用的

首先要提醒一点,ihpone开发中所有的图片最好都是png格式的,虽然png格式的图片比jpg或其他的图片要大,但是png的图片在sdk中是做过优化处理的,是苹果推荐的格式,对这个格式支持也是相对好的.尤其是在最新4.2的sdk中,如果你有jpg的图片,并且比较大,在真机上是现实不出来的.

 

最开始做项目,对cocos2d了解的比较少,添加一个CCSprite时,为了简单,就直接用

Java代码   收藏代码
  1. CCSprite *sprite = [CCSprite spriteWithFile:@"图片名称"];  

 如果你是这样用,那就是说图片要通过自动释放机制来完成对加载图片的释放了,那究竟什么时候图片会自动释放掉呢?当然是程序内存快要用尽的时候

Java代码   收藏代码
  1. - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {  
  2.     [[CCTextureCache sharedTextureCache] removeUnusedTextures];  
  3. }  

 

看你应用的delegate方法,会有上面一个函数,这个函数就是用来触发什么释放图片的.内存快要到达极限的时候会发出警告告诉上边的方面,然后这个方法就会从cache中释放掉当前不用的图片,

removeUnusedTextures进到这个里面会看到实际上就是释放掉retaincount=1的资源.通过log会发现内存警告是分级别的,

当时1级的时候问题不大,2级的时候就危险了,超过2级程序就完蛋了.而在调用内存警告之前,通过xcode提供内存跟踪工具,会发现图片一直会占着内存.

 

所以就不要依赖自动释放了,会害了项目的,尤其做游戏,图片比较多,如果用这种方式加载素材,到后期就惨了.我是深有体会.

 

我是这样做的

Java代码   收藏代码
  1. CCTexture2D * backBGTexture = [[CCTextureCache sharedTextureCache] addImage:@"a_aboutBG.png"];  
  2. CCSprite * backgroundSprite = [[CCSprite alloc] initWithTexture:m_backBGTexture];  
  3. [self addChild:backgroundSprite];     
  4. [backgroundSprite release];  

其实就是手动构建CCsprite这样,在图片不用的时候(一般在dealloc方法中),直接把图片remove掉

Java代码   收藏代码
  1. -(void)dealloc  
  2. {  
  3.     [[CCTextureCache sharedTextureCache] removeTexture:backBGTexture];  
  4.     [super dealloc];  
  5. }  

 

再通过内存跟踪工具会发现,内存当即被释放掉了.这样场景间切换的时候,就可以把上一个场景的图片全部释放掉.

我就是这样做的.呵呵.


转载于:https://www.cnblogs.com/yang3wei/archive/2012/05/17/2739750.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值