这里我们第一次加入一个Loadding界面。创建一个LoadScene.h文件和一个LoadScene.cpp文件。这里我不写其他代码,此篇只为展示一个场景类的基本配置。请看代码。
代码如下:
LoadScene.h
/** * Loadding场景的声明 */ #ifndef __LOAD_SCENE_H__ #define __LOAD_SCENE_H__ #include "cocos2d.h" USING_NS_CC; /** * 定义一个LoadLayer类继承自Layer类 */ class LoadLayer : public Layer { public: /** * 构造函数 */ LoadLayer(); /** * 析构函数 */ virtual ~LoadLayer(); /** * 创建当前场景并加入LoadLayer层 */ static cocos2d::Scene* createScene(); /** * 初始化LoadLayer层 */ virtual bool init(); /** * 创建LoadLayer层 */ CREATE_FUNC(LoadLayer); private: /** * 示例变量 */ int demoTag; }; #endif
LoadScene.cpp
/** * Loadding场景的实现 */ #include "LoadScene.h" /** * 构造函数,一般用来初始化变量 */ LoadLayer::LoadLayer():demoTag(0){} /** * 析构函数,一般用来释放内存 */ LoadLayer::~LoadLayer(){} /** * 创建场景,加入LoadLayer层 */ Scene* LoadLayer::createScene() { Scene* scene = Scene::create(); LoadLayer *layer = LoadLayer::create(); scene->addChild(layer); return scene; } /** * 初始化 LoadLayer */ bool LoadLayer::init() { if (!Layer::init()) { return false; } return true; }
以上的代码我本人并未在里面添加其他的层和精灵什么的。这里只是介绍一个场景类最原始的配置。下面分析下:
第一,在C++中已经说明了构造函数的存在
主要用于在类的对象创建时定义初始化的状态。很多码农喜欢在构造函数里面去做一般我们在init函数里面做的事情。从某种程度上来说这种编码习惯并不好。一般的,我们习惯于在构造函数里面只对类的对象或者变量进行初始化。
第二,CREATE_FUNC()宏的存在只是为了创建。我们可以翻开定义看看,如下,如果不用此句,那我们必须自己手动去写这个类似的代码。
#define CREATE_FUNC(__TYPE__) \ static __TYPE__* create() \ { \ __TYPE__ *pRet = new __TYPE__(); \ if (pRet && pRet->init()) \ { \ pRet->autorelease(); \ return pRet; \ } \ else \ { \ delete pRet; \ pRet = NULL; \ return NULL; \ } \ }
第三,请明确当前场景中分清createScene()函数和CREATE_FUNC()的作用,这两个做的事情完全不同,前者是创建场景并把后者加进去,后者是是cocos2dx的定义的一个创建宏,可以创建任何一个node,参数就是里面要创建的node,当前是创建一个层(这里是LoadLayer层),并对其初始化。