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窗口上下文的函数

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

posted @ 2016-10-09 22:12  LT.C#  阅读(1056)  评论(0编辑  收藏  举报