cocos--类的创建

一旦创建好一个cocos2dx的游戏项目,系统会自动创建好两个类:AppDelegate和HelloWorldScene,并自动生成4对应的文件,分别是AppDelegate.h , HelloWorldScene.h , AppDelegate.cpp 和HelloWorldScene.cpp。

 1. 分析AppDelegate类得AppDelegate.cpp文件的代码,如下:
     glview->setDesignResolutionSize(480, 320, ResolutionPolicy::EXACT_FIT);
    director->setDisplayStats(true);
    director->setanimationinterval(1.0 / 60);
     auto scene = HelloWorld::createScene();
    director->runWithScene(scene);
2. 分析HelloWorldScene类
HelloWorldScene.h:文件代码
#include "cocos2d.h"
USING_NS_CC;
// 自定义层
class HelloWorld : public cocos2d::Layer
{
public:
    /*静态的create函数创建Scene场景
    * 注意:在Cocos2d-x中没有Cocos2d-iPhone中的“id”,建议返回类实例的指针
     */
    static cocos2d::Scene* createScene();
    /**
     * init函数,完成初始化操作。
     * 注意:init函数在Cocos2d-x中返回bool值,而不是返回Cocos2d-iPhone中的“id”
     */
    virtual bool init();

    /* implement the "static create()" method manually,使用CREATE_FUNC宏创建当前类的对象,返回的对象将会由自动释放池管理内存的释放
    */
    CREATE_FUNC(HelloWorld);
};
HelloWorldScene.cpp文件代码
#include "HelloWorldScene.h"
#include "GameScene.h"
Scene* HelloWorld::createScene()
{
    // 创建一个场景对象,该对象将会由自动释放池管理内存的释放。'scene' is an autorelease object,
    auto scene = Scene::create();

    // 创建层对象,该对象将会由自动释放池管理内存的释放,'layer' is an autorelease object
    auto layer = HelloWorld::create();

    // 将GameSet层作为子节点添加到场景
    scene->addChild(layer);
    return scene;
}
//调用父类的init方法, on "init" you need to initialize your instance
bool HelloWorld::init()
{
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
}
     // 获得设备可见视图大小
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();

。。。
    return true;
}
 3. 总结出一个普通类的创建核心代码:
头文件(.h)必须包含的代码:
要包含的头文件和命名空间;
class 新类名称(英文名) : public(继承方式)Layer(父类)
{
public:
    static  Scene* createScene(); //1.场景创建方法
    virtual bool init();//2.对象初始化方法,
    CREATE_FUNC(新类名); // 3.对象创建宏
};
实现文件(.cpp)必须包含的代码(实现头文件中下面的2个方法):
要包含的头文件和命名空间;
Scene* 新类名称::createScene()
{
    auto scene = Scene::create();
    auto layer = 新类名::create();
    scene->addChild(layer);
    return scene;
}
//必须重写init方法,才能对对象创建宏创建出的布景层对象进行初始化
Bool  新类名::init()
{
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
}

中间写出屏幕上的具体内容,布景层中要呈现的精灵、文本标签或其它游戏元素的代码;

return true;
}

posted @ 2017-11-19 11:27  南风古  阅读(362)  评论(0编辑  收藏  举报