首先,是个敲代码的,基本上都知道程序的入口是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 杂笔-17(堆区栈区等)

    栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方式类似于数据结构中的栈,即后进先出.先进后出的原则. 例如:在函数中申明一个局部变量int b; ...

  2. WebForm(一)——IIS服务器、开发方式和简单基础

    一.B/S和C/S 1.C/S C/S 架构是一种典型的两层架构,其全程是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据 ...

  3. MySQL InnoDB表--BTree基本数据结构

    MySQL InnoDB表是索引组织表这一点应该是每一个学习MySQL的人都会首先学到的知识,这代表这表中的数据是按照主键顺序存储,也就是说BTree的叶子节点存储了所有该行的数据. 我最开始是搞Or ...

  4. shell 1到指定数累加

    #!/bin/bash read -p "输入尾数:" a expr $(seq -s " + " $a) #seq命令可以指定生成一个数到另一个数之间的所有整 ...

  5. css div中内容绝对居中(多行内容)

    div中的内容绝对居中(不适合IE6哦,IE6我已经不考虑了),直接看代码吧. <!DOCTYPE HTML> <html> <head> <title> ...

  6. java中执行系统命令

    java程序中执行系统命令猛击下面的链接看看你就知道怎么用了 http://blog.csdn.net/a19881029/article/details/8063758 http://wuhongy ...

  7. windows socket编程select模型使用

    int select(         int nfds,            //忽略         fd_ser* readfds,    //指向一个套接字集合,用来检测其可读性       ...

  8. [Django]模型提高部分--聚合(group by)和条件表达式+数据库函数

    前言:本文以学习记录的形式发表出来,前段时间苦于照模型聚合中group by 找了很久,官方文章中没有很明确的说出group by,但在文档中有提到!!! 正文(最后编辑于2016-11-12): 聚 ...

  9. WIN7下django1.8下载安装

    前言:公司电脑上django是在pycharm上下载自动安装的,家里电脑没安pycharm,所以自己手动安装. django下载地址:https://www.djangoproject.com/dow ...

  10. selenium对Alert弹框的多种处理

    Alert弹框是一个很烦人的控件,因为当前页面如果弹出了该弹框,你必须要处理它,不然你就不能操作页面的其它元素,下面我列出了alert弹框在多种场景下的处理办法. 明确知道系统哪个地方会弹alert ...