cocos2d游戏生命周期

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

strings.com 是强大的纯DOS环境 下的文本处理工具 STRINGS常用方法: 1、把文本文件 LIST.TXT 包含的行数赋值给变量 LN STRINGS LN=LINESIZE LIST.TXT 2、把文本文件 LIST.TXT 的大小传递给变量FS STRINGS FS=FILESIZE LIST.TXT 3、读取文本文件 LIST.TXT 的第5行内容并赋值给变31333137量 LN STRINGS LN=READ LIST.TXT,5 4、把变量 N 在原有基础上+1 和 -1 STRINGS N=ADD %N%,1 STRINGS N=SUB %N%,1 5、把字符串 ABCDEFG 中第四个字符以及后面共3个字符传递给变量 LX (DEF) STRINGS LX=MID ABCDEFG,4,3 6、查找字符串 ABCDEFG 中D所在的位置并赋值给变量DX,如果没找到DX=0 STRINGS DX=FIND ABCDEFG,D 7、找出字符串 ABCD EFG HIJ KLMN 中第二个单词并赋值给变量L2 STRINGS L2=PARSE ABCD EFG HIJ KLMN ,2 应用举例:逐一显示文件 LIST.TXT 各行内容 @ECHO OFF REM 读取LIST.TXT大小如果是0就转入 ERROR段 STRINGS FS=FILESIZE LIST.TXT IF %FS%*==0* GOTO ERROR REM 读取 LIST.TXT 行数 并用N作计数器以循环方式显示 LIST.TXT各行内容。 STRINGS L=LINESIZE LIST.TXT STRINGS L=ADD %L%,1 SET N=0 :LOOP STRINGS N=ADD %N%,1 STRINGS LX=READ LIST.TXT,%N% ECHO %LX% IF %N%*==%L%* GOTO END GOTO LOOP :ERROR ECHO LIST.TXT IS NULL :END SET FS= SET L= SET N= SET LX= --------------------------------------------- NSET 的常用方法: 1、把某一命令的执行结果传递给变量。 A.把 DIR 命令执行结果第7行中的第2个单词传递给变量 DIRX DIR /A /S |NSET /L7 DIRX=$2 B.把当前路径传递给变量 CDX CD |NSET CDX=$0 2、获取 LIST.TXT 文件第5行第2个单词的内容并赋值给变量 L52 NSET /L5 L52=$2 <LIST.TXT 举例:显示出 LIST.TXT 文件中第二个单词是 SYSTEM 的行的内容。 @ECHO OFF REM 读取LIST.TXT大小如果是0就转入 ERROR段 STRINGS FS=FILESIZE LIST.TXT IF %FS%*==0* GOTO ERROR REM 读取 LIST.TXT 行数 并用N作计数器以循环方式显示 LIST.TXT中第二个单词是 REM SYSTEM 的行的内容,每找到一个符合条件的行,就把变量M在原有基础上+1。 STRINGS L=LINESIZE LIST.TXT STRINGS L=ADD %L%,1 SET N=0 SET M=0 :LOOP STRINGS N=ADD %N%,1 STRINGS LX=READ LIST.TXT,%N% REM STRINGS LX2=PARSE %LX%,2 NSET /L%N% LX2=$2 diskn.txt REM 如果存在DISKN2.TXT 就删除之 if exist diskn2.txt del diskn2.txt >nul REM 获取DISKN.TXT文件行数并用N做计数器逐行判断,并把需要的信息传递给DISKN2.TXT REM 如果该行前两个字符是 NO 说明没有硬盘,就退出脚本 RE
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值