加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我所理解的Cocos2d-x 应用程序架构

发布时间:2020-12-14 17:08:12 所属栏目:百科 来源:网络整理
导读:游戏声明周期 一个游戏对应一个Application对象。Application的职责是管理游戏生命周期并设置默认游戏窗口,获取平台及本地化信息等。在Cocos2d-x中,通常不直接创建Application对象。Cocos2d-x脚本在帮助我们创建应用程序项目时,通常会实现一个Application

游戏声明周期

一个游戏对应一个Application对象。Application的职责是管理游戏生命周期并设置默认游戏窗口,获取平台及本地化信息等。在Cocos2d-x中,通常不直接创建Application对象。Cocos2d-x脚本在帮助我们创建应用程序项目时,通常会实现一个Application的子类供程序员自定义生命周期的各个阶段的处理,这个子类教AppDelegate。
在applicationDidFinishLaunching事件中,我们需要创建和初始化一个Director,并为Director创建一个OpenGL ES窗口,然后创建第一个场景,并将场景交给Director绘制出来。在多屏设备中,一个Application还可以创建多个Director,每一个Director对应于一个屏幕。此外,在程序启动事件中还可以做其他一些设置工作,例如分辨率、帧率、资源搜索目录等。
在应用程序启动后,我们需要响应应用程序的切换事件。

窗口尺寸

应用程序中关于窗口方面最常用的操作是通过Director查询当前的窗口尺寸。Director提供了几种不同概念的窗口尺寸。WinSize表示实际的画布大小,VisibleSize表示屏幕上可见区域的大小,但都表示设计分辨率。winSizeInPixel可以获取屏幕的实际分辨率。

场景管理

Director提供两种方法从一个场景切换到另一个场景:

  • 使用replaceScene()方法直接替换。
  • 使用场景栈来管理这些场景。

    使用场景栈需要注意内存问题,因为所有场景都不会被释放,所以只有一些小型的临时场景才需要使用场景栈。

游戏循环

Application::run是整个应用程序的入口,Director::mainLoop则定义了一个游戏循环所有事件和内容。

游戏循环的步骤如下:

  1. 检测玩家输入事件的发生。因为玩家操作的是他看到的内容,他看到的一切元素位置都是由上一帧绘制确定的,所以这样做能保证程序处理的也是玩家期望的结果。
  2. 执行动画更新。同样,动画更新也应该被优先处理,因为在动画计算之后,程序逻辑可能还会对值进行修改。
  3. 物理模拟碰撞。注意,这里并不是绝对的,Cocos2d-x中的物理更新实现为Scene向Scheduler注册一个优先级为0的更新处理,应用程序可能注册一个优先级更高的逻辑更新,可能先于物理模拟被处理。
  4. 程序逻辑更新。
  5. UI树的遍历。
  6. 渲染系统开始根据元素的逻辑绘制顺序进行绘制,全部元素绘制完成之后,交换前后缓冲区,以将当前帧的内容绘制到屏幕上。
  7. 最后,PoolManager会释放掉当前帧的所有autorelease对象。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读