我所理解的Cocos2d-x 应用程序架构
2016-07-21 16:55
351 查看
游戏生命周期
一个游戏对应一个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则定义了一个游戏循环所有事件和内容。游戏循环的步骤如下:
检测玩家输入事件的发生。因为玩家操作的是他看到的内容,他看到的一切元素位置都是由上一帧绘制确定的,所以这样做能保证程序处理的也是玩家期望的结果。
执行动画更新。同样,动画更新也应该被优先处理,因为在动画计算之后,程序逻辑可能还会对值进行修改。
物理模拟碰撞。注意,这里并不是绝对的,Cocos2d-x中的物理更新实现为Scene向Scheduler注册一个优先级为0的更新处理,应用程序可能注册一个优先级更高的逻辑更新,可能先于物理模拟被处理。
程序逻辑更新。
UI树的遍历。
渲染系统开始根据元素的逻辑绘制顺序进行绘制,全部元素绘制完成之后,交换前后缓冲区,以将当前帧的内容绘制到屏幕上。
最后,PoolManager会释放掉当前帧的所有autorelease对象。
相关文章推荐
- 我所理解的Cocos2d-x UI树
- 我所理解的Cocos2d-x Cocos2d-x 内存管理机制
- cocos2dx-3.11 使用创建Lua项目以及运行自定义场景
- Cocos2d-x 添加安卓按键监听事件
- cocos creater阅读笔记
- cocos2dx - 安卓蓝牙游戏(c++调用)
- cocos creator关于scrollView
- cocos2dx v3.x之CCAction变化
- cocos creator 运用预制件和配置文件添加对象
- 【转载】cocos2d-x中getParent()的使用
- 系列文章之二 用cocos2d-js和pomelo开发MMORPG传奇手游-启动游戏(一)
- opengl之vsh、fsh简易介绍+cocos2dx 3.0 shader 变灰
- Cocos2d-x 3.11.1 Mac 编译Android Studio
- Cocos2d-x V3.x内存管理分析
- Cocos2dx学习笔记(二)、点击事件
- 基于 Cocos2d-x-lua 的游戏开发框架 Dorothy 简介
- 我所理解的Cocos2d-x 全新的Cocos2d-x3.0
- 六 cocos2dx(3.X)中使用shader
- cocos2dx 3.4 lua加密 和 解密
- cocos2dx 在windows下开启console