zoukankan      html  css  js  c++  java
  • cocos2d-x打飞机实例总结(一):程序入口分析和AppDelegate,Application,ApplicationProtocol三个类的分析

      首先,是个敲代码的,基本上都知道程序的入口是main函数,显然,就算在cocos2d-x框架中也一样

      我们看看main函数做了什么

    #include "main.h"
    #include "AppDelegate.h"
    #include "cocos2d.h"
    
    USING_NS_CC;
    
    int APIENTRY _tWinMain(HINSTANCE hInstance,
                           HINSTANCE hPrevInstance,
                           LPTSTR    lpCmdLine,
                           int       nCmdShow)
    {
        UNREFERENCED_PARAMETER(hPrevInstance);
        UNREFERENCED_PARAMETER(lpCmdLine);
    
        // create the application instance
        AppDelegate app;
        return Application::getInstance()->run();
    }

    之前写过一些windows窗口程序,也了解了windows编程的一些规范,显然,这是一个windows风格的窗口程序,mian函数的四个参数是句柄和命令行调用有关的,在此就不多说,重点是:

            首先,创建了一个AppDelegate类的自动对象 app

            接着,又用Application类得到一个实例,然后执行run()函数,是不是感觉很奇怪,既然要用Application类执行run()函数为什么还要AppDeletegate 的那个对象呢?

    好吧,我也是差不多弄了半天才整明白,明显,我们需要进入源码里面一谈究竟,好激动,源码耶!

    三个类:依次是:

          ApplicationProtocol类(基类,抽象类)

          Application类(public继承自Applicationprotocol类,抽象类)

          AppDelegate类(private继承自Application类)

    ApplicationProtocol类

    class CC_DLL ApplicationProtocol
    {
    public:
    
        enum class Platform
        {
            
            OS_WINDOWS,/** Windows */
            OS_LINUX,/** Linux */
            OS_MAC,/** Mac*/
            OS_ANDROID,/** Android */
            OS_IPHONE,/** Iphone */
            OS_IPAD,/** Ipad */
            OS_BLACKBERRY,/** BLACKBERRY */
            OS_NACL,/** Nacl */
            OS_EMSCRIPTEN,/** Emscripten */
            OS_TIZEN,/** Tizen */
            OS_WINRT,/** Winrt */
            OS_WP8/** WP8 */
        };
    
        virtual ~ApplicationProtocol()
    
        virtual bool applicationDidFinishLaunching() = 0;
    
        virtual void applicationDidEnterBackground() = 0;
    
       virtual void applicationWillEnterForeground() = 0;
    
        virtual void setAnimationInterval(double interval) = 0;
    
        virtual void initGLContextAttrs() {}
    
        virtual LanguageType getCurrentLanguage() = 0;
      
        virtual const char * getCurrentLanguageCode() = 0;
     
        virtual Platform getTargetPlatform() = 0;
        
        virtual bool openURL(const std::string &url) = 0;
    };

    这个类的大体情况:一个和平台相关的枚举,然后有很多都是适配平台的,先不管那些,瞄准黑体的那几个函数

       virtual bool applicationDidFinishLaunching()=0;

    这个函数是负责初始化的

      virtual void applicationDidEnterBackground()=0;

    这个函数是进入后台时调用的函数

      virtual void applicationDidEnterForeground()=0;

    这个函数是将要进入前台恢复工作的时候调用的函数

      virtual void initGLContextAttrs()=0;

    这个函数是初始化OPENGL窗口上下文的函数

      因为都是纯虚函数,所以都没有实现

    亲爱的听众朋友我是你的代班DJ
  • 相关阅读:
    hdu2988:Dark roads(最小生成树)
    hdu1596:find the safest road(最短路)
    hdu1596:find the safest road(最短路)
    CultureInfo中重要的InvariantCulture
    c#通过反射获取类上的自定义特性
    分享我们项目中基于EF事务机制的架构 【转载】
    ASP.NET MVC3中的路由系统(Routes) .
    为ASP.NET MVC应用添加自定义路由
    Mvc生成页面之t4模板相关
    LINQ to SQL语句对应SQL的实现
  • 原文地址:https://www.cnblogs.com/YTYMblog/p/5944032.html
Copyright © 2011-2022 走看看