首先,是个敲代码的,基本上都知道程序的入口是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() = ; virtual void applicationDidEnterBackground() = ; virtual void applicationWillEnterForeground() = ; virtual void setAnimationInterval(double interval) = ; virtual void initGLContextAttrs() {} virtual LanguageType getCurrentLanguage() = ; virtual const char * getCurrentLanguageCode() = ; virtual Platform getTargetPlatform() = ; virtual bool openURL(const std::string &url) = ;
};

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

   virtual bool applicationDidFinishLaunching()=0;

这个函数是负责初始化的

  virtual void applicationDidEnterBackground()=0;

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

  virtual void applicationDidEnterForeground()=0;

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

  virtual void initGLContextAttrs()=0;

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

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

cocos2d-x打飞机实例总结(一):程序入口分析和AppDelegate,Application,ApplicationProtocol三个类的分析的更多相关文章

  1. cocos2d-x打飞机实例总结

    写了一个cocos2d-x的打飞机游戏,为了深入了解,准备进入引擎内部,深入分析一下打飞机,顺便梳理一下相关的知识 打算分为几个部分: 1.程序入口和场景切换模块分析:简单了解HelloWorld怎样 ...

  2. Android 在安装完成界面,点击打开应用程序。在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开

    Android 在安装完成界面,点击打开应用程序.在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开. etong_123的专栏 - 博客频道 - CSDN.NET htt ...

  3. WPF:如何实现单实例的应用程序(Single Instance)

    原文:WPF:如何实现单实例的应用程序(Single Instance) 好吧,这是我将WPF与Windows Forms进行比较的系列文章的第四篇,讨论一下如何实现单实例(single instan ...

  4. C++ 容器的综合应用的一个简单实例——文本查询程序

    C++ 容器的综合应用的一个简单实例——文本查询程序 [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例.通过实现一个简单的文本查 ...

  5. [转]微信小程序之加载更多(分页加载)实例 —— 微信小程序实战系列(2)

    本文转自;http://blog.csdn.net/michael_ouyang/article/details/56846185 loadmore 加载更多(分页加载) 当用户打开一个页面时,假设后 ...

  6. Singleton单例模式是最简单的设计模式,它的主要作用是保证在程序执行生命周期中,使用了单类模式的类仅仅能有一个实例对象存在。

                                                                                                        ...

  7. Android清单文件具体解释(三)----应用程序的根节点&lt;application&gt;

    <application>节点是AndroidManifest.xml文件里必须持有的一个节点,它包括在<manifest>节点下.通过<application>节 ...

  8. Java基础笔记(2) 程序入口 关键字 标识符 常量 变量

    提醒:关于那些和我一样新鸟来看资料的,能看懂多少看多少,看不懂的就是不重要,重要的你想我自己学习肯定要标注的,这些信息明白每个知识点实际作用就好了,其他的比如等会讲的常量内存,常量池这些都是我找的资料 ...

  9. 设计模式(一)单例模式:创建模式 ASPNET CORE WEB 应用程序的启动 当项目中 没有STARTUP.CS 类如何设置启动 配置等等

    设计模式(一)单例模式:创建模式 先聊一下关于设计的几个原则(1)单一原则(SRP):一个类应该仅有一个引起它变化的原因 :意思就是 (一个类,最好只负责一件事情,并且只有一个引起它变化的原因(2)开 ...

随机推荐

  1. iOS 本地推送通知

    1.什么是本地推送通知 不需要联网的情况下,应用程序经由系统发出的通知 2.本地推送的使用场景 定时提醒,如玩游戏.记账.闹钟.备忘录等 3.实现本地推送通知的步骤 创建本地推送通知的对象UILoca ...

  2. h5滑动方向、手机拖动层

    做h5时需对手指滑动方向判断及拖动浮动层,本文代码适用于手机端h5页面,pc页面可使用onMouseDown.onMouseUp.onMouseMove.(本方法仅为功能实现原理和演示,可根据自己的需 ...

  3. 使用xhprof分析php代码性能

    推荐在Linux平台使用xhprof,win下xhprof目前稳定版本在php5.5 安装xhprof 下载地址 http://pecl.php.net/get/xhprof-0.9.4.tgz 与p ...

  4. 对express中引入文件时提示Error: Cannot find module错误的理解

    打算写个小demo,在引入一个routes文件时,一直提示Error: Cannot find module('./routes')的错误,经过一番了解. 如果要把整个文件夹下所有的模块都引进来  v ...

  5. ubuntu下怎么给普通用户赋予sudo权限

    ununtu系统安装过程中,系统会提示建立一个默认用户,比如用户名为:zhuhui.这个默认用户具有一定的管理功能,即可以通过sudo命令执行root权限的操作.由于Ubuntu系统默认不允许通过ro ...

  6. [原创]基于rsync算法的目的性改进-RexSync

    rsync是一种文件差异传输的算法,特点是高效且相似块识别率较高.具体算法这边就不赘述,网上很多,官方文档也描述的很清楚. rsync提高文件比对效率的一个核心算法之一就是rolling checks ...

  7. java HashMap

    HashMap 的性能因子 1. 容量:表示桶位的数量. 2. 初始容量: 表在创建是所拥有的桶位数.   如果你知道将要在HashMap存储多少项,创建一个初始容量合适的HashMap将可以避免自动 ...

  8. MySql access denied for user错误

    MySql access denied for user错误 | 浏览:2812 | 更新:2014-11-27 11:16 MySql access denied for user错误 方法/步骤 ...

  9. 配置windows路由表,使电脑同时连接内网外网方法

    1.环境一(系统:windows xp,内网.外网不是同一类地址,内网地址固定): 外网:通过笔记本的无线网卡连接: 内网:通过笔记本的本地连接: 第一步,连接网线,配置本地连接地址,注意IP地址不要 ...

  10. [WPF系列]-高级部分 需要区分的东东

    ContentControl VS ContentPresenter What's the difference between ContentControl and ContentPresenter ...