精通Cocos2d-x游戏开发(基础卷)
上QQ阅读APP看书,第一时间看更新

3.7 不要忘记init

在Cocos2d-x的诸多对象中,大部分都提供了create方法,它将返回一个new出来的对象,并且这个对象调用了init和autorelease函数。在Cocos2d-x的对象中,往往都没有把初始化放在构造函数中,而是放在init函数中,当手动new了一个对象而忘记调用它的init的时候,可能会出现各种错误,如图3-2所示。

图3-2 未初始化导致的崩溃

这种先构造再初始化的方法,被称为“二阶段构造机制”。而这个二阶段构造机制,简单地说,就是因为在构造函数中可能需要初始化很多东西,因此就有可能出现失败的情况,而我们知道,构造函数是没有返回值的,所以要捕获在构造函数中出现的错误,则比较麻烦,而将要初始化的内容放到init回调函数中,就可以很直观地知道这个对象是否成功初始化,这比在对象中添加一个错误码,或者使用try-catch,要方便、简单得多,所以在new一个对象之后,请随手调用它的init如果有的话。

由于3.0将很多对象的构造函数和析构函数取消了public,所以多数情况下只能使用create来创建Cocos2d-x对象。