摘要: cocos2d-x场景切换时内存过高导致crash解决方法在用cocos2d-x时很多人都会遇到一个问题,就是在pc上运行都是ok的,可是在ipad和andriod上面,在场景切换时时常会挂掉,用苹果自带的Instruments工具检测时,发现在场景正常运行时,内存大概保持在三四十兆,但是在场景切换时,一瞬间会达到七八十兆,遇到一些素材比较多或者层比较多的场景,则会达到一百多兆。大家知道在ipad1上面,内存最大是128M,那么这个程序如果在ipad1上面运行,肯定会经常挂掉。遇到问题,只能一步步分析,一步步找。(1)先把所有场景的retain的东西检查一遍,看看在Onexit的时候有没有re 阅读全文
posted @ 2013-05-06 16:50 Clin 阅读(601) 评论(0) 推荐(0) 编辑
摘要: Cocosd-x设计模式之 :中介者模式1、应用场景cocos2d-x里面的CCDirector类除了应用了单例模式,还应用了中介者模式。Why?因为它封装了CCScheduler、CCActionManager、CCTouchDispatcher、CCKeypadDispatcher和CCAccelerometer这五个对象的交互。它使得这几个对象之间的交互不需要显式地相互引用,使其耦合度变低。当然更多的是使得我们游戏中的对象可以方便地与这些类进行交互,而不需要显式地引用这些类。同时,由于CCDirector类被设计成单例类,这样更加方便了客户程序。由于之前CCScheduler、CCAct 阅读全文
posted @ 2013-05-06 16:48 Clin 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 优化Cocos2d程序的内存消耗一、避免一个接一个地加载PNG和JPG纹理(他们之间至少等待一帧)cocos2d里面纹理加载分为两个阶段:1.从图片文件中创建一个UIImage对象。2.以这个创建好的UIImage对象来创建CCTexture2D对象。这意味着,当一个纹理被加载的时候,在短时候内,它会消耗两倍于它本身内存占用的内存大小。二、尽可能少的使用jpg图片cocos2d-iphone使用JPG纹理的时候有一个问题。因为JPG纹理在加载的时候,会实时地转化为PNG格式的纹理。这意味着cocos2d-iphone加载纹理是非常慢的,而且JPG纹理将消耗三倍于本身内存占用大小的内存。一个20 阅读全文
posted @ 2013-05-06 16:47 Clin 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 一、C++里实现委托的例子一个打印机类的委托模式实现:Printer这个类要实现打印功能,它不是自己去实现,而是委托RealPrinter这个类来实现。更一般化的示例如下:其实委托就是一个方法,但是它可以被当作“First-class variable”来对待。即函数可以被存储,被传参,还可以从其它函数内部返回。拥有这种特性,同时大量采用这种特性的语言还有javascript,lua等,这也是现在我们津津乐道的函数式编程。c++中的函数指针,指向成员函数的指针、函数子对象都可以被存储、被传参,还可以从其它函数内部返回。而cocos2d-x里面也是大量采用了这种指向成员函数的指针来实现委托。二、 阅读全文
posted @ 2013-05-06 16:46 Clin 阅读(359) 评论(0) 推荐(0) 编辑
摘要: Cocos2d-x设计模式发掘——观察者模式1、应用场景在cocos2d-x中的CCNotificationCenter类,它除了应用单例模式以外,还应用了观察者模式。CCNotificationCenter类是观察者模式中的目标对象,而CCNotificationObserver则是观察者。一个目标对象可以注册多个观察者,当目标对象的状态改变的时候,可以通知观察者对象作出相应的响应。这是标准的观察者模式的实现,但是CCNotificationCenter稍微有些许差别。首先,CCNotificationCenter不是通过自身状态改变来通知观察者,而是通过显式地发送观察者感兴趣的消息(pos 阅读全文
posted @ 2013-05-06 16:44 Clin 阅读(494) 评论(0) 推荐(0) 编辑