zoukankan      html  css  js  c++  java
  • 五毛的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。
  • 相关阅读:
    mysql5.7安装
    win10 安装docker
    快速去水印(win10换图3D工具)
    爬虫---国家食品药品监督管理总局
    食品伙伴网爬虫
    驴妈妈旅游爬虫
    天气预测(CNN)
    ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?
    C#线程篇---线程池如何管理线程(6完结篇)
    C#线程篇---Task(任务)和线程池不得不说的秘密(5)
  • 原文地址:https://www.cnblogs.com/rainmer/p/4674049.html
Copyright © 2011-2022 走看看