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窗口上下文的函数
因为都是纯虚函数,所以都没有实现