UML

点击查看【processon】
一个游戏对应一个Application对象,Application的职责就是管理游戏生命周期并设置默认窗口,获取平台及本地化信息等。不同平台初始化对应的平台实现的Application。cocos脚本工具会帮我们创建一个Applicatioin的子类AppDelegate,通过它我们可以自定义生命周期各个阶段的处理。

ApplicationProtocol

抽象基类,规定了一个Application必须实现的接口。

  1. class ApplicationProtocol{
  2. public:
  3. //Implement Director and Scene init code here
  4. //true Initialize success, app continue.
  5. //false Initialize failed, app terminate.
  6. virtual bool applicationDidFinishLaunching() = 0;
  7. //程序进入后台时,被调用,比如处理音乐
  8. virtual void applicationDidEnterBackground() = 0;
  9. //程序 enters foreground时,被调用,比如处理音乐
  10. virtual void applicationWillEnterForeground() = 0;
  11. //设置帧刷新速率(interval是两帧的时间间隔)
  12. //director会调用它来设置速率,已由cocos内部实现。
  13. virtual void setAnimationInterval(float interval) = 0;
  14. // 在创建GL Window前,用于设置以下GL上下文属性(Context Attrs)
  15. // 1、设置默认帧缓冲的颜色、深度、模板缓冲的分量大小(bit depth)
  16. // 颜色缓冲:R、G、B、A bit
  17. // 深度缓冲:depth bit
  18. // 模板缓冲:stencil bit
  19. // 2、设置纹理采样点数,用于多重采样(抗锯齿),默认只为0,表示不开启多重采样。
  20. virtual void initGLContextAttrs() {}
  21. // 一般如下设置:
  22. // void AppDelegate::initGLContextAttrs(){
  23. // // 数值依次对应R bit、G bit、B bit、A bit、depth bit、stencil bit和采样点数
  24. // GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8, 0};
  25. // GLView::setGLContextAttrs(glContextAttrs);
  26. // }
  27. //Get current language config.
  28. virtual LanguageType getCurrentLanguage() = 0;
  29. //Get current language iso 639-1 code.
  30. virtual const char * getCurrentLanguageCode() = 0;
  31. //Get target platform.
  32. virtual Platform getTargetPlatform() = 0;
  33. //Get application version.
  34. virtual std::string getVersion() = 0;
  35. //Open url in default browser.
  36. //True if the resource located by the URL was successfully opened; otherwise false.
  37. virtual bool openURL(const std::string &url) = 0;
  38. };

AppDelegate

这里列举的是比较常见的实现。

  1. // if you want a different context, modify the value of glContextAttrs
  2. // it will affect all platforms
  3. void AppDelegate::initGLContextAttrs()
  4. {
  5. // set OpenGL context attributes: red,green,blue,alpha,depth,stencil, 采样点数(0为不开启采样)
  6. GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8, 0};
  7. GLView::setGLContextAttrs(glContextAttrs);
  8. }
  9. bool AppDelegate::applicationDidFinishLaunching()
  10. {
  11. // *********************************************
  12. // *** 初始化director
  13. // *********************************************
  14. auto director = Director::getInstance();
  15. auto glview = director->getOpenGLView();
  16. // *********************************************
  17. // *** 创建GL Window
  18. // *********************************************
  19. if(!glview) {
  20. glview = GLViewImpl::create("Cpp Tests");
  21. director->setOpenGLView(glview);
  22. }
  23. director->setDisplayStats(true);
  24. director->setAnimationInterval(1.0f / 60);
  25. // *********************************************
  26. // *** 设置资源搜索路径,不同分辨率使用不同资源
  27. // *********************************************
  28. std::vector<std::string> searchPaths;
  29. ......
  30. FileUtils::getInstance()->setSearchPaths(searchPaths);
  31. // *********************************************
  32. // *** 屏幕适配
  33. // *********************************************
  34. auto screenSize = glview->getFrameSize();
  35. auto designSize = Size(480, 320);
  36. glview->setDesignResolutionSize(designSize.width, designSize.height, ResolutionPolicy::NO_BORDER);
  37. return true;
  38. }
  39. void AppDelegate::applicationDidEnterBackground()
  40. {
  41. // 暂停声音
  42. Director::getInstance()->stopAnimation();
  43. }
  44. void AppDelegate::applicationWillEnterForeground()
  45. {
  46. // 恢复声音
  47. Director::getInstance()->startAnimation();
  48. }