手动控制Cocos2d-iPhone游戏策略的帧率

时间:2011-04-15 17:38:51

标签: cocos2d-iphone frame-rate

大多数游戏开发者在开发游戏时至少应该遇到一次“低帧率”问题。但另一方面,我正在制作类似数独游戏的益智游戏,其中低帧速率不是问题,因为它没有不断移动的精灵/元素,事实上我计划降低帧速率以使游戏花费更少CPU时间因此降低了iDevices的功耗;这一切只是为了对球员的礼貌:)

我已经知道我可以通过修改animationInterval来控制Cocos2d-iphone中的帧速率:

[[CCDirector sharedDirector] setAnimationInterval:1.0/60];

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

  

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

我还有两个条件:

  1. 在CCNode上处理CCActions:只要某些CCNode有正在运行的操作,就恢复到正常的帧速率。

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

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

3 个答案:

答案 0 :(得分:1)

虽然我知道这不是一个非常干净的方法,但你可以破解CCScheduler类并检查scheduledMethods中是否有任何对象。我想你必须检查那里的对象是否属于你的,因为cocos2d本身会安排一些类。

答案 1 :(得分:1)

嗯..我建议你把它设置为30fps ..是..它的屏幕刷新率..但最重要的是你如何编码游戏..它必须是高效的..而不是额外运行进程检查某些东西是否正在运行..它可能会消耗更多的处理能力..

答案 2 :(得分:0)

这可能是您正在寻找的,至少在行动方面。

当您执行某个操作时,您可以在操作结束时调用一个块,您可以在其中重置帧速率。

[[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]];