我所理解的Cocos2d-x 实时更新游戏对象
2016-07-21 18:40
417 查看
帧率
我们可以通过Director::setAnimationInterval()方法来设置帧频,只不过它的参数是帧率的倒数,即每两帧之间的间隔。
Application的实现很简单:在执行一次循环后,如果距离下一次更新还有空闲时间,则休眠,直至下一次循环更新的时间。
Scheduler
除了游戏自身的各个子系统,游戏引擎还必须提供某种机制更新程序员自定义的各种游戏对象。Cocos2d-x使用一种更灵活的机制来实现游戏对象的状态更新,开发者通过向Scheduler注册一个回调函数来更新逻辑。
第一种类型与游戏循环的帧率保持一致,通过
scheduleUpdate()方法注册。使用这种方法Scheduler会按照priority值从小到大的顺序进行更新回调。
第二种类型是通过
schedule()方法注册自定义的更新回调。
第二种方法在实现上,每个自定义的更新回调需要使用一个Timer类来计时,而这将花费更多的内存及计算时间,且不能指定更新的优先级。所以在编写程序时应该尽量使用前者。
时间线
通常情况下,我们按真实的时间线处理游戏更新。但在某些情况下,我们需要使用一种相对时间线,如快进、减慢甚至回退。timeScale的值会影响所有使用向Scheduler注册的更新回调,包括2.5.4节即将讲述的ActionManager及物理碰撞检测。
逻辑更新优先级
Node基类提供了更方便的方法来注册更新回调:Node::scheduleUpdate()和
Node::scheduleUpdateWithPriority(int priority)。
然而,这种按游戏对象来划分逻辑更新优先级的方式并不是一种合理的方式,尤其是当多个对象之间有交叉的状态读取时,各个对象状态的优先级则往往很难排列,这导致一个非常糟糕的结果,就是一个对象中会包含大量的逻辑(程序员需要记住大量无意义的游戏对象的优先级)。
在游戏设计中,对逻辑而不是游戏对象设计优先级往往更有意义。
性能问题
避免每帧查找。对一些非频繁更新的状态进行缓存。
与UI元素绘制无关、即时性不强的算法应该减少其
update()方法调用的频率。
相关文章推荐
- 系列文章之二 用cocos2d-js和pomelo开发MMORPG传奇手游-启动游戏续(一)
- cocos2dx CCNotificationCenter的简单实用
- cocos2dx-js 绑定c++
- Cocos2dx中的一些设计到内存管理的宏
- 我所理解的Cocos2d-x 应用程序架构
- 我所理解的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学习笔记(二)、点击事件