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 platforms
void 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();
}