帧率-手动控制cocos2d iphone游戏策略的帧率



大多数游戏开发者在开发游戏时应该至少遇到过一次"低帧率"问题。但另一方面,我正在制作一款类似数独的益智游戏,低帧率不是问题,因为它没有不断移动的精灵/元素,事实上我计划降低帧率,这样游戏就会占用更少的CPU时间,从而降低设备的功耗;这一切都是对玩家的礼貌:)

我已经知道我可以通过修改animationInterval:

来控制Cocos2d-iphone的帧率
[[CCDirector sharedDirector] setAnimationInterval:1.0/60];

但是我在何时降低帧率以及何时恢复到正常帧率(60Hz)的策略上遇到了麻烦。在这一点上,我只设法定义触摸事件的策略,即:

以较低的帧率开始。在ccTouchBegan上,恢复到正常帧率。在ccTouchEnded上,切换到较低的帧率。确保多点触控得到相应的处理。

我还剩下两个条件:

  1. 处理CCNodes上的CCActions:只要一些CCNodes有正在运行的动作,恢复到正常帧

  2. 粒子系统:只要存在一些正在发射粒子的粒子系统,恢复到正常帧率

基本上,我需要能够检测是否有动作仍在任何精灵/图层/场景上运行,以及是否有一些粒子系统仍在发射粒子。我不喜欢对单个对象进行检查,我宁愿有一个简单的[SomeClass isActionRunning]。我想象我可以通过检查"计划"对象列表来做到这一点,但我不确定如何做到这一点。如果你还能建议一些我需要恢复到正常帧率的其他条件,我将不胜感激。

嗯…我建议你把它设为30fps。是的. .它是屏幕刷新的速率。但最重要的是你如何编写游戏代码。它一定很有效率……而不是运行额外的进程来检查某些东西是否正在运行。它可能会稍微消耗更多的处理能力。

虽然我知道这不是一个非常干净的方式,但你可以破解CCScheduler类并检查是否有任何对象在scheduledMethods。我猜你需要检查一下这些对象是不是你的因为cocos2d自己会安排一些类

这可能是您正在寻找的,至少是关于操作。

当你运行一个动作时,你可以在动作结束时调用一个block,在这个block中你可以重置帧率。

[[CCDirector sharedDirector] setAnimationInterval:1.0/60];//set your fast frame rate
[self runAction:[CCSequence actions:
                 [CCMoveBy actionWithDuration:0.5f position:ccp(100,100)], //Do whatever action it is you want to do
                 [CCCallBlock actionWithBlock:^
                  {
                      [[CCDirector sharedDirector] setAnimationInterval:1.0/30]; //Revert to slow frame rate... could also check within the block for other actions
                  }],
                 nil]];

最新更新