• 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
  • 相关阅读:
    重打技术征集系统第七稿开发第1、2天
    关于centos7右上角网络图标消失的解决办法
    记录一下hbase踩的坑
    在jsp中,单选按钮的点击事件(点击隐藏或显示输入框)
    input中禁止输入特殊字符
    《软件方法》阅读笔记——1
    随手快递app开发第十七天
    Codeforces Round #284 (Div. 1) B. Name That Tune(最大流)
    hihocoder 1310岛屿(dfs,一个搜索技巧)
    Codeforces Round #294 (Div. 2) E. A and B and Lecture Rooms(lca+思维,树上寻找与给定两个点距离相等的点的个数)
  • 原文地址:https://www.cnblogs.com/YTYMblog/p/5944032.html
Copyright © 2020-2023  润新知