我所理解的Cocos2d-x 实时更新游戏对象

帧率

我们可以通过Director::setAnimationInterval()方法来设置帧频,只不过它的参数是帧率的倒数,即每两帧之间的间隔。
Application的实现很简单:在执行一次循环后,如果距离下一次更新还有空闲时间,则休眠,直至下一次循环更新的时间。

Scheduler

除了游戏自身的各个子系统,游戏引擎还必须提供某种机制更新程序员自定义的各种游戏对象。
Cocos2d-x使用一种更灵活的机制来实现游戏对象的状态更新,开发者通过向Scheduler注册一个回调函数来更新逻辑。

  1. 第一种类型与游戏循环的帧率保持一致,通过scheduleUpdate()方法注册。使用这种方法Scheduler会按照priority值从小到大的顺序进行更新回调。
  2. 第二种类型是通过schedule()方法注册自定义的更新回调。

第二种方法在实现上,每个自定义的更新回调需要使用一个Timer类来计时,而这将花费更多的内存及计算时间,且不能指定更新的优先级。所以在编写程序时应该尽量使用前者。

时间线

通常情况下,我们按真实的时间线处理游戏更新。但在某些情况下,我们需要使用一种相对时间线,如快进、减慢甚至回退。

timeScale的值会影响所有使用向Scheduler注册的更新回调,包括2.5.4节即将讲述的ActionManager及物理碰撞检测。

逻辑更新优先级

Node基类提供了更方便的方法来注册更新回调:Node::scheduleUpdate()Node::scheduleUpdateWithPriority(int priority)

然而,这种按游戏对象来划分逻辑更新优先级的方式并不是一种合理的方式,尤其是当多个对象之间有交叉的状态读取时,各个对象状态的优先级则往往很难排列,这导致一个非常糟糕的结果,就是一个对象中会包含大量的逻辑(程序员需要记住大量无意义的游戏对象的优先级)。
在游戏设计中,对逻辑而不是游戏对象设计优先级往往更有意义。

性能问题

  1. 避免每帧查找。
  2. 对一些非频繁更新的状态进行缓存。
  3. 与UI元素绘制无关、即时性不强的算法应该减少其update()方法调用的频率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值