Cocos2dx 2.1.4游戏,连续性FPS下降,从不恢复

我正在使用cocos2dx 2.1.4创build一个游戏。 它的FPS不断下降,永远不会恢复。 请详细说明如下

关于我做事的方式的背景:关于向下滚动某些形状的游戏,每个形状都由一些方块组成。我有7种块。 所有加载在Sprite Sheet中,并使用这个Sprite Sheet中的这些块创build一个形状。 级别文件由这些形状组成。 我同时加载两个级别在屏幕上和另一个屏幕上,使其无缝滚动。 为了同时加载两个级别,我使用了两个不同的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.But仍然FPS下降,不会恢复。

请分享你的想法。

虽然SpriteBatchNodes对于高效地绘制大量元素通常是相当不错的,但我认为最好用于静态/不那么dynamic的元素。 在你的情况下,如果你有很多元素不在屏幕上,但仍然活着, draw()函数将不得不做一些检查,这样会损害你的性能(即使你设置了isVisible(false);明确地说,仍然nedds被检查)。

在你的情况下,我认为如果你通过一些基于时间的函数简单地在屏幕之外添加新的形状,并且如果它们在视图之外滚动,只需从场景中移除它们,而不使用batchNodes。

刚刚发现,每触摸一次,我都会在图层中添加8个新的精灵,每次触摸时都会添加新的精灵。 所以随着时间的推移,我正在做越来越多的工作。 这就是问题

实际上,我想每次都在8个地方用一个触摸来代替这个精灵:

 _colorBottom1=CCSprite::createWithSpriteFrameName(png[0]); this->addChild(_colorBottom1,kForeground); _colorBottom1->setPosition(ccp((_colorPanelLeftPad)*_blockWidth,_blockWidth)); 

正是这个精灵被每一次触碰都加上了。

但它应该是(replace纹理而不是再次创buildSprite): –

 CCSpriteFrame *frame1=CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(png0); _colorBottom1->setDisplayFrame(frame1); 
Interesting Posts