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的主要功能有下面几个:
比如在Win32的main里,就有这么一句:
Application的真正处理是AppDelegate 做的。AppDelegate的功能就是实现CCApplication所声明的那4个接口:
ApplicationProtocol定义了接口然后需通过CCApplication类继承,并添加消息处理函数,但是窗口的处理时通过AppDelegate来实现
参考文档: