cocos2d游戏生命周期

来源:互联网 发布:spss软件安装教程 编辑:程序博客网 时间:2024/04/27 23:42

class CC_DLL CCApplicationProtocol
{
public:

    virtual ~CCApplicationProtocol() {}   //析构函数

    virtual bool applicationDidFinishLaunching() = 0; // 程序初始化接口

    virtual void applicationDidEnterBackground() = 0;   //进入后台接口

    virtual void applicationWillEnterForeground() = 0; //进入前台接口

    virtual void setAnimationInterval(double interval) = 0;  //设置动画间隔

    virtual ccLanguageType getCurrentLanguage() = 0;   // 获取当前语言
    virtual TargetPlatform getTargetPlatform() = 0;  //获取当前平台
};

 

class CC_DLL CCApplication : public CCApplicationProtocol
{
public:
    CCApplication();
    virtual ~CCApplication();

    int run();     //重中之重,消息处理,前端最重要的部分

    static CCApplication* sharedApplication();   //返回调用该方法的当前应用指针,该指针指向调用该方法的APP

    virtual void setAnimationInterval(double interval);  //重载协议
    virtual ccLanguageType getCurrentLanguage();   //重载语言接口    
    virtual TargetPlatform getTargetPlatform();    //重载平台接口

    /**
     *  Sets the Resource root path.
     *  @deprecated Please use CCFileUtils::sharedFileUtils()->setSearchPaths() instead.
     */
    CC_DEPRECATED_ATTRIBUTE void setResourceRootPath(const std::string& rootResDir);    //设置启动资源路径

    /**
     *  Gets the Resource root path.
     *  @deprecated Please use CCFileUtils::sharedFileUtils()->getSearchPaths() instead.
     */
    CC_DEPRECATED_ATTRIBUTE const std::string& getResourceRootPath(void);

    void setStartupScriptFilename(const std::string& startupScriptFile);    //设置启动的脚本文件

    const std::string& getStartupScriptFilename(void)     //获取启动脚本文件
    {
        return m_startupScriptFilename;
    }

protected:    //私有变量
    HINSTANCE           m_hInstance;
    HACCEL              m_hAccelTable;
    LARGE_INTEGER       m_nAnimationInterval;
    std::string         m_resourceRootPath;   //资源启动路径
    std::string         m_startupScriptFilename;  //启动脚本文件

    static CCApplication * sm_pSharedApplication;    //指针
};

class  AppDelegate : private cocos2d::CCApplication                   //AppDelegate私有继承 CCApplication
{
public:
    AppDelegate();
    virtual ~AppDelegate();

    /**
    @brief    Implement CCDirector and CCScene init code here.
    @return true    Initialize success, app continue.
    @return false   Initialize failed, app terminate.
    */
    virtual bool applicationDidFinishLaunching();             //完成启动

    virtual void applicationDidEnterBackground();            //进入后台

    virtual void applicationWillEnterForeground();           //进入前台

};

cocos2.0以后将applicaionpotol作为第一个基类,然后通过CCApplication继承,然后在通过代理继承并实现

其中消息处理函数run()以及私有变量都是添加在中间层CCApplication里面实现    APPDelegeta只负责实现窗口的切换

Application的主要功能有下面几个:

   1)初始化程序,构建运行窗口;

   2)程序初始化完毕通知;

   3)程序被切换到后台通知;

   4)程序切换到前台通知;

   5)设置屏幕窗口原点:设备是水平的还是垂直的,在左边还是在右边(或者顶端还是底部)

   6)程序运行(进行消息循环处理)

   7)取得当前语言配置

   8)所有对Application的访问都通过CCApplication::sharedApplication()提供

 

    其中1到4都是纯虚函数,就是接口声明。

    比较了下WIN32下的Application的声明和IOS下的Application的声明,发现几乎一样,只是Win32的多了一些Protected的成员变量。

  其实Application更像一个协议,它声明了初始化,前后台切换的接口。然后真正的实现由它的代理来做。

  比如在Win32的main里,就有这么一句:

   AppDelegate app;

    return cocos2d::CCApplication::sharedApplication().run();
   Application的真正处理是AppDelegate 做的。AppDelegate的功能就是实现CCApplication所声明的那4个接口:

    virtual bool initInstance();

    virtual bool applicationDidFinishLaunching();

    virtual void applicationDidEnterBackground();

    virtual void applicationWillEnterForeground();

    不同的平台这里的处理是不同的。

 

   ApplicationProtocol定义了接口然后需通过CCApplication类继承,并添加消息处理函数,但是窗口的处理时通过AppDelegate来实现

 

 

参考文档:

http://blog.sina.com.cn/s/blog_a17b071c010133fj.html

0 0
原创粉丝点击