学习Cocos2d-x有半年时间了,版本从2.1.3到3.0,对于这个引擎的感觉就是跨平台做的好,用起来简单,但是在开发的过程中难免还是遇到一些问题,这里做下汇总:
1、在Android系统上游戏崩溃,错误是由于内存访问越界
一般出现这种情况主要是由于Cocos2d-x中的对象大部分都是会自动进行内存管理,在Win32平台上可能不会出现什么问题,但是到了Android上面就会出现,要避免这个问题的出现就需要按照一些原则来使用Coco2d-x引擎中的对象
1、当某个Cocos2d-x的对象是属于类成员对象,那么在创建它的之后需要调用retain函数,以免出现所属类对象还存在,而该作为成员的对象却已经被自动回收了
2、当在某个函数中创建某个全局的Cocos2d-x引擎的对象时,也需要调用其retain函数,以免在函数退出后,对象被释放,之后对全局对象的访问出现崩溃。
3、Cocos2d-x框架中的Array类是非常容易被释放掉的,如果使用的Array对象要被作为参数传递,或被多次在不同函数中被使用,那么在创建这类Array对象也要调用它的retian 函数,以免程序崩溃。
2、关于Cocos2d-x多线程的替代方案的思考
在Cocos2d-x的主线程中调用的很多属于其框架下含有函数retian,autorealease等的调用的对象时是没有问题的,但是这些对象是不是线程安全的,因此就算输可以使用pthread这样跨平台的线程库也很不方便,不过有另外一种方法可以实现类线程的效果,那就是使用schedule函数对需要并行的逻辑进行定时调用,schedule的定时调用时线程安全的,因此可以利用该机制去实现