UML
点击查看【processon】
一个游戏对应一个Application对象,Application的职责就是管理游戏生命周期并设置默认窗口,获取平台及本地化信息等。不同平台初始化对应的平台实现的Application。cocos脚本工具会帮我们创建一个Applicatioin的子类AppDelegate,通过它我们可以自定义生命周期各个阶段的处理。
ApplicationProtocol
抽象基类,规定了一个Application必须实现的接口。
class ApplicationProtocol{public://Implement Director and Scene init code here//true Initialize success, app continue.//false Initialize failed, app terminate.virtual bool applicationDidFinishLaunching() = 0;//程序进入后台时,被调用,比如处理音乐virtual void applicationDidEnterBackground() = 0;//程序 enters foreground时,被调用,比如处理音乐virtual void applicationWillEnterForeground() = 0;//设置帧刷新速率(interval是两帧的时间间隔)//director会调用它来设置速率,已由cocos内部实现。virtual void setAnimationInterval(float interval) = 0;// 在创建GL Window前,用于设置以下GL上下文属性(Context Attrs)// 1、设置默认帧缓冲的颜色、深度、模板缓冲的分量大小(bit depth)// 颜色缓冲:R、G、B、A bit// 深度缓冲:depth bit// 模板缓冲:stencil bit// 2、设置纹理采样点数,用于多重采样(抗锯齿),默认只为0,表示不开启多重采样。virtual void initGLContextAttrs() {}// 一般如下设置:// void AppDelegate::initGLContextAttrs(){// // 数值依次对应R bit、G bit、B bit、A bit、depth bit、stencil bit和采样点数// GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8, 0};// GLView::setGLContextAttrs(glContextAttrs);// }//Get current language config.virtual LanguageType getCurrentLanguage() = 0;//Get current language iso 639-1 code.virtual const char * getCurrentLanguageCode() = 0;//Get target platform.virtual Platform getTargetPlatform() = 0;//Get application version.virtual std::string getVersion() = 0;//Open url in default browser.//True if the resource located by the URL was successfully opened; otherwise false.virtual bool openURL(const std::string &url) = 0;};
AppDelegate
这里列举的是比较常见的实现。
// if you want a different context, modify the value of glContextAttrs// it will affect all platformsvoid AppDelegate::initGLContextAttrs(){// set OpenGL context attributes: red,green,blue,alpha,depth,stencil, 采样点数(0为不开启采样)GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8, 0};GLView::setGLContextAttrs(glContextAttrs);}bool AppDelegate::applicationDidFinishLaunching(){// *********************************************// *** 初始化director// *********************************************auto director = Director::getInstance();auto glview = director->getOpenGLView();// *********************************************// *** 创建GL Window// *********************************************if(!glview) {glview = GLViewImpl::create("Cpp Tests");director->setOpenGLView(glview);}director->setDisplayStats(true);director->setAnimationInterval(1.0f / 60);// *********************************************// *** 设置资源搜索路径,不同分辨率使用不同资源// *********************************************std::vector<std::string> searchPaths;......FileUtils::getInstance()->setSearchPaths(searchPaths);// *********************************************// *** 屏幕适配// *********************************************auto screenSize = glview->getFrameSize();auto designSize = Size(480, 320);glview->setDesignResolutionSize(designSize.width, designSize.height, ResolutionPolicy::NO_BORDER);return true;}void AppDelegate::applicationDidEnterBackground(){// 暂停声音Director::getInstance()->stopAnimation();}void AppDelegate::applicationWillEnterForeground(){// 恢复声音Director::getInstance()->startAnimation();}
