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;
}