Cocos2dx示例学习笔记(一):HelloCpp工程结构分析
研究版本:cocos2dx-2.2.2
打开vs2010工程文件后,先看HelloCpp工程。
在main函数中
1、定义了一个AppDelegate;
2、初始化了CCEGLView;
3、return CCApplication::sharedApplication()->run();
run()中运行message loop(一个线程只能有一个MessageLoop被实例化。)
简化的消息循环形式如下:
MSG msg while( GetMessage(&msg,NULL,0,0) ) { TranslateMessage(&msg); DispatchMessage(&msg); }
AppDelegate看,它是继承自CCApplication,main中实际上是将AppDelegate run起来了。因此,main函数的作用是当程序进入到引擎层后,初始化CCEGLView,生成并运行AppDelegate对象。
AppDelegate字面的意思是“app委派者“,其实AppDelegate就是整个程序的入口,可以说AppDelegate run起来之后游戏才真正开始运行。
AppDelegate继承与Application类,它控制着整个游戏的生命周期。除了构造函数和析构函数外,还有三个虚函数:按照加载的顺序,分别为:
AppDelegate() ---> applicationDidFinishLaunching()
---> applicationWillEnterForeground()
---> applicationDidEnterBackground()
---> ~AppDelegate()
加粗的都是虚函数,必须实现。
其中尤为重要的是applicationDidFinishLaunching()方法,在该方法中主要的工作时初始化一个导演对象,最后创建一个场景实例,并调用导演的runWithScene()方法run该场景。
HelloWorld类继承与CCLayer类,然而HelloWorld类并没有实现CCLayer类中的所有虚构函数,显然它也是一个抽象类,然而该类中的静态函数scene()中创建了一个CCScene,并同时创建了一个HelloWorld(其实就是执行的CCLayer中的creat())添加到场景中。
之后的init()函数做了一些初始化工作,生成一些东西并添加到了前面创建的CCLayer中。在init()函数中我们可以设置schedule,并在update()函数中处理游戏逻辑,完成游戏的更新。
工程中,还有一个AppMacros.h的文件,里面定义了一些宏,便于其他地方的调用。