2

I'm writing a game with cocos2d and I have noticed that the frame rate drops as the game progresses. I've checked for leaks but everything looks fine so I'm at a loss as to what to do next. Sorry if this is a really basic question but what sort of factors cause frame rate loss?

The problem seems to get worse when I clear the sprites from a layer. Sometimes the framerate jumps back to 60 but occasionally it drops down to 30 or lower and never recovers. After a few minutes the animations are noticably slower and the game pretty much grinds to a halt. I'm not sure if this is specific to cocos2d or a common issue in game development, but it renders the game unplayable :(

4

4 回答 4

3

您如何测试内存泄漏?在您完全确定之前,我认为您不应该将其排除为原因,因为这听起来像是经典的“内存泄漏行为”。

还要确保你没有像日志这样的东西,或者内存中的东西,每帧都在不断变大(我这么说是因为过去发生在我身上)。

还要确保你不会随着游戏的进行不断地加载新的对象和/或精灵。尝试将所有加载调用保留在逻辑的初始化部分中。

于 2009-06-21T03:16:57.877 回答
1

如果你添加更多的精灵,你的帧率将会下降,显然,因为它有更多的处理。

现在,我对 cocos2d 一无所知,但是当您“从图层中清除精灵”时,听起来好像除了存储它们现在隐藏的事实之外,它只是将它们隐藏在视图之外。

也许尝试使用更少的精灵?

于 2009-06-21T00:17:34.713 回答
1

您是否在重复使用预加载的纹理?如果你不是,你应该。一次又一次地加载相同的纹理既慢又是泄漏。

此外,您是否发布了已完成的纹理?即使精灵消失了,纹理仍然存在。

于 2009-07-01T20:52:04.470 回答
0

我最近遇到了一个涉及图形光栅化逐渐减慢的 Flash 问题,因此这里可能会发生类似的事情。当系统必须执行太多工作时,通常会出现减速。内存泄漏是显而易见的,因为内存的过度分配和碎片从来都不是好事,但考虑一下:

我发现我忘记在 Graphics 对象上调用“clear”,所以每次我重绘精灵的边框时,它都会绘制另一个圆角矩形,并且绘制命令是累积的。经过几十次交互后,它在自身上画了一百次填充的圆角矩形。着色器、代码等都占用了不到 1% 的渲染时间,但过度光栅化正在扼杀我的帧率。

所以我建议检查对象创建、忘记清除东西、绘制方法等。确保系统没有做不必要的工作或积累不必要的操作,而不仅仅是内存对象。

于 2013-12-20T20:03:59.000 回答