cocos2d-x应用窗口相关源码剖析1

来源:互联网 发布:自制数据采集卡 编辑:程序博客网 时间:2024/05/22 05:21

1 CCApplicationProtocol、CCApplication、AppDelegate类实现源码分析

什么是框架,框架最低要求

理论:

1)框架定义了一些协议(功能的抽象);目的:解耦合,通过函数指针实现。

2)框架实现了这层协议的调用,框架具有集成功能。

3)上层应用按照要求,去实现框架协议

 

代码兑现:

1)CCApplicationProtocol类定义了一套接口

2)CCApplication 实现了接口规则的调用

3)AppDelegate实现了接口

4)在CCApplication::run()利用多态特性,实现父类代码去调用子类(AppDelegate)重载函数;这也是多态的重要意义。典型的工程开发项目设计思路


问题1:是谁去调用了AppDelegate类的函数重载的函数? 

          virtualbool applicationDidFinishLaunching();

          virtualvoid applicationDidEnterBackground();

          virtualvoid applicationWillEnterForeground();

答案:

1)类继承分析:

          classCC_DLL CCApplication : public CCApplicationProtocol

          class  AppDelegate : private cocos2d::CCApplication

          AppDelegate->CCApplication->CCApplicationProtocol

2)在CCApplication中实现了协议的调用;

          CCApplication::run()函数实现了win消息窗体创建及消息注册。

          CCDirector::sharedDirector()->mainLoop();//后续分析

问题2:是谁调用了CCApplication::run()?

          return CCApplication::sharedApplication()->run();


问题3:代码实践  

23行,AppDelegate app;这句话能去掉吗?

28行,return CCApplication::sharedApplication()->run();换成app.run();     

问题4:应用程序对象是什么时候被创建的

CCApplication *CCApplication::sm_pSharedApplication = 0;

 

CCApplication::CCApplication()

: m_hInstance(NULL)

, m_hAccelTable(NULL)

{

   m_hInstance    =GetModuleHandle(NULL);

   m_nAnimationInterval.QuadPart = 0;

   CC_ASSERT(! sm_pSharedApplication);

   sm_pSharedApplication = this;

}

0 0