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。
  • 相关阅读:
    Pydev Console中文提示乱码的问题
    pg_dump命令帮助信息
    Aptana下Django1.6以后的项目模板结构改造
    老外的项目开发在线服务网站资源
    淘宝技术交流笔记
    Python并发编程的几篇文章
    gevent程序员指南
    IOS UITableView拖动排序功能
    Codeforces 300A Array
    一次mysql优化经历
  • 原文地址:https://www.cnblogs.com/rainmer/p/4674049.html
Copyright © 2011-2022 走看看