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

|| 大多数游戏开发人员在开发游戏时应该至少遇到过一次“低帧率”问题。但是,另一方面,我正在制作类似数独的益智游戏,因为它没有不断移动的子画面/元素,因此低帧率不是问题,事实上,我计划降低帧率以减少游戏耗时。 CPU时间,从而降低了iDevice的功耗;所有这一切只是出于对玩家的礼貌:) 我已经知道可以通过修改animationInterval来控制Cocos2d-iphone中的帧速率:
[[CCDirector sharedDirector] setAnimationInterval:1.0/60];
但是我在何时降低帧频以及何时恢复为正常帧频(60Hz)的策略上遇到了麻烦。此时,我仅设法定义了触摸事件的策略,即:   从较低的帧速率开始。在ccTouchBegan上,恢复为正常帧率。在ccTouchEnded上,切换到较低的帧速率。确保对多点触摸进行了相应的处理。 我还有两个条件: 在CCNode上处理CCAction:只要某些CCNode具有运行中的动作,请还原为正常帧速率。 粒子系统:只要有一些发射粒子的粒子系统,恢复为正常帧速率。 基本上,我需要能够检测在任何子画面/图层/场景上是否仍在运行动作,以及是否某些粒子系统仍在发射粒子。我宁愿不对单个对象进行检查,而宁愿有一个简单的
[SomeClass isActionRunning]
。我想我可以通过检查“预定”对象的列表来做到这一点,但是我不确定如何做到。如果您还可以提出其他一些需要恢复正常帧频的条件,我们将不胜感激。     
已邀请:
嗯..我建议您将其设置为30fps。.是的。它的屏幕刷新率..但是最重要的是您如何编写游戏代码..它必须高效..而不是运行额外的进程来检查是否某些东西正在运行或没有运行..它可能会消耗更多的处理能力。     
尽管我知道这不是一种很干净的方法,但是您可以修改CCScheduler类并检查scheduleMethods中是否有任何对象。我猜因为Cocos2d本身安排了一些类,所以您必须检查对象是否属于您。     
这可能是您正在寻找的内容,至少与操作有关。 运行动作时,可以在动作结束时调用一个块,在该块中重置帧速率。
[[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]];
    

要回复问题请先登录注册