Cocos2dx 3.0 实战之—— 重写《超级马里奥》其五 一个场景的基本配置

这里我们第一次加入一个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层),并对其初始化。

第四,layer的init()函数的调用在CREATE_FUNC()里面。一个好的习惯是在层的初始化函数init()里面进行场景的设计而不是构造函数里面。
而这些代码其实在创建项目的时候,项目自带的已经说明的很清楚,作为一个游戏程序员,一个好的编程习惯是很重要的。OK,此篇就到这里。

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...