zoukankan      html  css  js  c++  java
  • 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;
    }
    
    
  • 相关阅读:
    C++ 从文件中读取数据的代码及优化
    EOF在C++中的含义
    利用"中值滤波原理"过滤异常数据(转载)
    Hive差集运算详解
    H5 玩出新花样(一) -- 森林领导术不倒流
    C++中怎么暂停几秒
    c语言中 srand(time(NULL)); 这句话是什么意思(尤其是 NULL)
    C++ 码代码的风格(推荐)
    c/c++编译器的安装
    jquery的$(selector).each,$.each的区别
  • 原文地址:https://www.cnblogs.com/nanfenggu/p/7899978.html
Copyright © 2011-2022 走看看