我正在用cocos2d编写游戏,我注意到随着游戏的进行,帧速率会下降。我检查了泄漏但是一切都很好,所以我不知道下一步该做什么。很抱歉,如果这是一个非常基本的问题,但是哪种因素会导致帧丢失?
当我清除图层中的精灵时,问题似乎变得更糟。有时候帧速率跳回到60但有时会下降到30或更低,永远不会恢复。几分钟后,动画明显变慢,游戏几乎停止了。我不确定这是否特定于cocos2d或游戏开发中的常见问题,但它使游戏无法播放:(
答案 0 :(得分:3)
您如何测试内存泄漏?我不认为你应该排除这个原因,直到你绝对肯定,因为这听起来像经典的“内存泄漏行为”。
还要确保你没有日志或内存中的东西,每一帧都不断变大和变大(我这样说是因为过去发生在我身上)。
此外,请确保在游戏进行过程中不再持续加载新对象和/或精灵。尝试将所有加载调用保留在逻辑的初始化段中。
答案 1 :(得分:1)
如果你添加更多的精灵,你的帧率会下降,显然,因为它有更多的处理。
现在,我对cocos2d一无所知,但是当你“从一个层中清除精灵”时,除了存储它们现在被隐藏的事实之外,它听起来好像只是将它们隐藏起来。
也许尝试使用更少的精灵?
答案 2 :(得分:1)
您是否正在重复使用预加载的纹理?如果你不是你应该。一次又一次地加载相同的纹理既缓慢又是泄漏。
此外,您是否正在发布已完成的纹理?即使精灵消失了,纹理仍然存在。
答案 3 :(得分:0)
我最近遇到了一个涉及图形光栅化渐进式减速的Flash问题,所以也许类似的事情可能会发生在这里。当系统必须执行太多工作时,通常会发生减速。内存泄漏是显而易见的,因为内存的过度分配和碎片永远不会好,但请考虑这一点:
我发现我曾在图形对象上调用“清除”,因此每次重新绘制精灵的边框时,它都会绘制另一个圆角矩形并且绘制命令是累积的。在几十次交互之后,它将这个填充的圆角矩形绘制了一百倍。着色器,代码等都占用了不到1%的渲染时间,但过度光栅化会破坏我的帧速率。
所以我建议检查对象创建,忘记清除事物,绘制方法等等。确保系统没有做不必要的工作或累积不必要的操作,而不仅仅是内存对象。