- 本帖最后由 dempsey 于 2012-8-21 20:52 编辑 *
----------------------------------------------------说明---------------------------------------------------
本文所有内容均转载自
http://blog.csdn.net/honghaier/article/details/7887873
因为发现其分析之透彻,让人一目了然,就先将其大家分享之.待原文作者来这里发表时,可将本贴删除.
ps:论坛的验件码终于改进了,不再是眼花缭乱的字母,不再会跑.
但是发现不能将一篇文章全部copy过来,故将其分为几篇,很多功能有待改善…
----------------------------------------------------正文----------------------------------------------------
不能免俗,一切都从“HelloWorld!”开始.打开HelloWorld工程,里面有两个文件目录Classes和win32。Classes下有HelloWorldScene.h/cpp ,AppDelegate.h/cpp.win32下有main.h/cpp 首先看一下win32目录下的main.h,其中定义了使用win32平台进行编译的宏和一些Windows编程头文件。
#ifndef __MAIN_H__
#define __MAIN_H__
//定义使用WIN32平台进行编译的宏
#define WIN32_LEAN_AND_MEAN
// 所用到的Windows编程所用头文件
#include <windows.h>
#include <tchar.h>
// Cocos的C语言头文件
#include "CCStdC.h"
#endif// __MAIN_H__
再打开main.cpp.
//加入main.h头文件
#include "main.h"
//加入使用的AppDelegate类头文件
#include "../Classes/AppDelegate.h"
//WinMain主函数
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
//UNREFERENCED_PARAMETER用于在VC编译器下告知编译器,不必检测改变量是否使用的警告。
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// 创建一个Cocos2d-x程序实例
AppDelegate app;
// 运行程序实例
return cocos2d::CCApplication::sharedApplication().run();
}
代码看着就这么几行,好像非常简单。那是因为Cocos2d-x把很多WINDOWS窗口程序的代码都封装到了内部。这也使得它更加简单易学。但我们也应该明白这里面是怎么一回事。 咱们转到AppDelegate.h,可以看到AppDelegate类是一个私有继承Cocos2d命名空间中的CCApplication类。它的成员函数均是重载了CCApplication类的成员函数。顾名思义,CCApplication代表了程序类。我们打开它的声明文件看一下
#ifndef __CC_APPLICATION_WIN32_H__
#define __CC_APPLICATION_WIN32_H__
//Windows头文件
#include <Windows.h>
//Cocos2d-x公共头文件,声明了一些公共函数以及语言类型枚举ccLanguageType
#include "CCCommon.h"
//使用cocos2d的命名空间来包括后面的代码
NS_CC_BEGIN;
//声明一下CCRect类,在CCApplication中会用到CCRect类指针
class CCRect;
class CC_DLL CCApplication
{
public:
//构造
CCApplication();
//析构
virtual ~CCApplication();
//初始化
virtual bool initInstance() = 0;
//程序启动后调用的函数,在这里创建设备与场景
virtual bool applicationDidFinishLaunching() = 0;
//当程序转入后台,如电话打入时调用
virtual void applicationDidEnterBackground() = 0;
//当程序转入前台,再次恢复时调用
virtual void applicationWillEnterForeground() = 0;
//在“设备”设置FPS时调用的函数,设置帧间隔时间
void setAnimationInterval(double interval);
//声明一个枚举,列出当前设备的摆放方向
typedef enum
{
/// 垂直方向, home 键在下面
kOrientationPortrait = 0,
/// 垂直方向, home 键在上面
kOrientationPortraitUpsideDown = 1,
/// 水平方向,home键在右边
kOrientationLandscapeLeft = 2,
/// 水平方向,home健在左边
kOrientationLandscapeRight = 3,
} Orientation;
//在“设备”改变了摆放方向后调用的函数,设置设备摆放方向
Orientation setOrientation(Orientation orientation);
//取得窗口的状态栏所在的矩形位置
void statusBarFrame(CCRect * rect);
//运行程序
int run();
//取得当前的程序实例,这种用法可参考C++模式设计中的“单件”模式
static CCApplication& sharedApplication();
//取得当前的语言类型
static ccLanguageType getCurrentLanguage();
protected:
//程序实例句柄
HINSTANCE m_hInstance;
//加速键句柄
HACCEL m_hAccelTable;
//声明为帧间隔,实际上是每两帧之间的频率次数
LARGE_INTEGER m_nAnimationInterval;
//单件的程序实例指针
static CCApplication * sm_pSharedApplication;
};
NS_CC_END;
#endif// __CC_APPLICATION_WIN32_H__
通过对于CCApplication_win32.h的代码分析,我们可以清楚CCApplication的功能是对于程序的控制。我们转到CCApplication类的cpp文件CCApplication_win32.cpp再来分析一下。 读前小提示: CCDirector代表显示设备管理器。也是一个单件类。通过其静态函数CCDirector::sharedDirector()来访问唯一的显示设备。