Cocos2d-x 的“HelloWorld” 深入分析之一

  • 本帖最后由 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()来访问唯一的显示设备。