首先,是个敲代码的,基本上都知道程序的入口是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. 大数据系列(1)——Hadoop集群坏境搭建配置

    前言 关于时下最热的技术潮流,无疑大数据是首当其中最热的一个技术点,关于大数据的概念和方法论铺天盖地的到处宣扬,但其实很多公司或者技术人员也不能详细的讲解其真正的含义或者就没找到能被落地实施的可行性方 ...

  2. SQL数据库修改默认备份和恢复路径

    每次都做数据恢复和备份的时候,点Add文件,系统会自动指定到一个默认路径,是SQL的安装目录,但是我的数据库不是备份在这里,每次都要更改有点麻烦. 如上图,更改这个有三个方法. 方法一:找到注册表,手 ...

  3. 7 Must Read Python Books

    7 Must Read Python Books I started learning Python just two years ago. Coming from a C++ and Java ba ...

  4. Linux的主机规划和磁盘分区

    选择与Linux搭配的主机配置 CPU  只要不是老旧到让你的硬件系统死机的都能够支持 RAM 内存越大越好,内存的重要性要比CPU还要高,至少512MB Hard Disk 由于数据量与数据的访问频 ...

  5. tomcat的简单安装及配置

    实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验软件:apache-tomcat-8.0.24 jdk-8u60-linux-x64 jeecms-v6 一. ...

  6. [WPF系列]-DynamicResource与StaticResource的区别

    探讨: 1.当引用资源时,选择StaticResource还是DynamicResource的考虑因素: (1)在哪里创建资源?(资源的范围或层级) a. 资源是在一个Page/Canvas/Wind ...

  7. CI连接多个数据库

    参考http://codeigniter.org.cn/user_guide/database/connecting.html手册 首先,在database.php中设置多个数据库的连接信息,这里命名 ...

  8. JS入门学习,编写一个简易月历

    //今天最头疼的地方在于 getElementsByClassName()的 [] ~~ //错了N遍后只能说有点点头绪,如果不加[] 查找的就是全部吧 加上[]能精确控制的标签或者class < ...

  9. UVA数学入门训练Round1[6]

    UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...

  10. POJ2677 Tour[DP 状态规定]

    Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4307   Accepted: 1894 Description ...