• 五毛的cocos2d-x学习笔记02-基本项目源码分析


      class AppDelegate : private cocos2d::Application
      private表示私有继承,cocs2d是一个命名空间。私有继承下,Application类中的private、protected、public属性的成员在AppDelegate都会变成private的。

      main.cpp入口方法有一段代码:return Application::getInstance()->run();这段代码中调用了AppDelegate的run方法;run方法调用了AppDelegate的applicationDidFinishLaunching方法,applicationDidFinishLaunching方法中创建了HelloWorld场景类auto scene = HelloWorld::createScene();,并运行这个场景类director->runWithScene(scene);。HelloWorld场景类的createScene方法调用了HelloWorld的静态方法create方法。是不是奇怪,因为在HelloWorld场景类中并没有看到有这个方法,其实这个方法是由宏CREATE_FUNC(HelloWorld);实现的。在CREATE_FUNC这个宏定义中,调用了HelloWorld的init方法,所以一个场景类至少要实现3个方法:createScene、init、CREATE_FUNC。

    Scene* HelloWorld::createScene(){
         auto scene = Scene::create();
         auto layer = HelloWorld::create();//执行的是CREATE_FUNC(MyHelloWorldScene);
         scene->addChild(layer);
         return scene;
    }
    
    CREATE_FUNC(__TYPE__):
    /**
    * define a create function for a specific type, such as Layer
    * @param \__TYPE__  class type to add create(), such as Layer
    */
    #define CREATE_FUNC(__TYPE__) 
    static __TYPE__* create() 
    { 
        __TYPE__ *pRet = new(std::nothrow) __TYPE__(); 
        if (pRet && pRet->init()) 
        { 
            pRet->autorelease(); 
            return pRet; 
        } 
        else 
        { 
            delete pRet; 
            pRet = NULL; 
            return NULL; 
        } 
    }

    场景本身是没有意义的,当我们向场景中添加各种层,精灵,菜单后,场景才变得有意义。

    Scene继承自Node。3.x版本的Scene集成了物理引擎的功能。所以场景可以看做一个物理世界。
    但是很奇怪,HelloWorldScene继承自Layer,而不是Scene。
  • 相关阅读:
    PHP str_replace() 函数
    PHP str_pad() 函数
    查看带有A-TIME的执行计划
    B. Recursive Queries 打表
    [AHOI2013]作业 莫队 树状数组
    SP1487 PT07J
    SP10628 COT
    洛谷P1494 [国家集训队]小Z的袜子
    [SDOI2013]森林 主席树 启发式合并
    [CQOI2015]任务查询系统 主席树_差分
  • 原文地址:https://www.cnblogs.com/rainmer/p/4674049.html
Copyright © 2020-2023  润新知