我正在使用 cocos2dx 2.1.4 创建游戏。它的FPS不断下降,永远不会恢复。请找到以下详细信息
关于我做事方式的背景:- 它关于向下滚动一些形状的游戏,每个形状由一些方形块组成。我有 7 种块。全部加载到 Sprite 表中,并使用此 sprite 表中的这些块创建一个形状。一个关卡文件由这些形状组成。我同时加载两个级别,一个在屏幕上,另一个在屏幕外,以使其无缝滚动。为了同时加载两个关卡,我使用了两个不同的 CCSprite 游戏批处理节点:-
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("56blackglow.plist");
_gameBatchNode1 = CCSpriteBatchNode::create("56blackglow.png", 200);
_gameBatchNode1->retain();
this->addChild(_gameBatchNode1,kForeground);
_gameBatchNode2= CCSpriteBatchNode::create("56blackglow.png", 200);
_gameBatchNode2->retain();
this->addChild(_gameBatchNode2,kForeground);
我面临的问题是,当我继续玩游戏时,帧率不断下降,从 60 fps 到 10 fps 并且永远不会恢复或可能在不久的将来恢复,正如我观察了 20 分钟但等待的时间太长了。
我的观察:-
1> 我使用了时间分析器,它显示最大时间在 draw() 调用中。此外,如果我玩游戏的速度非常快,赛道上的时间峰值会增加,这应该没问题,因为我要做更多的工作,但是一旦达到峰值,即使我让游戏闲置,它也只会保持在那个高度。正常吗?根据我的说法,一旦当前的工作完成,它应该会恢复到正常的峰值。
2> 我认为它发生的一些地方,因为我使用了两个批处理节点并在用户触摸时立即删除它的子节点可能会导致它变慢,但在删除子节点之后它应该运行正常。给出一个想法是否可以立即从批处理节点中删除 10 个子节点?有些人说它的过程非常缓慢。只是为了检查这是否导致问题,我做了:-
我没有删除它们,而是将孩子的可见性设置为 false。但 FPS 仍然下降并且永远不会恢复。
请分享您对此的看法。