【问题标题】:cocos2d gradual FPS dropcocos2d 逐渐下降 FPS
【发布时间】:2011-05-13 02:52:55
【问题描述】:

嘿,我在 iPhone 4 上运行 cocos2d、box2d 和几个粒子系统。
我已经完成了我的第一个级别,其中也分配了许多精灵。
我已将 FPS 限制设置为 30fps。
当游戏第一次运行时,它运行良好,稳定在 30fps。这将持续大约 3-4 分钟的流畅游戏。
但过了一段时间,fps开始下降,然后逐渐下降,直到达到12fps左右。

我记得我之前放弃的游戏有这个问题。
这是由内存泄漏引起的,可能是由于没有释放项目?

在我的 (void)dealloc 方法中,我输入了所有已分配的版本,我会错过一个吗?还是我没有考虑其他一些可能性?

谢谢!

【问题讨论】:

  • 尝试使用 Instruments - cimgf.com/2008/04/02/…
  • 可能是粒子系统造成的,能不能发下你的粒子代码...

标签: objective-c cocos2d-iphone box2d objective-c++


【解决方案1】:

听起来您的资源快用完了。我会按照 SB 的建议尝试仪器。仪器可以使用分配仪器检查泄漏。你也可以试试 OpenGL 分析套件。

【讨论】:

  • 是的,看来你是对的。我有 3 个内存泄漏:GeneralBlock-512 GeneralBlock-512 和 NSConcreteMapTable。 Leaked Bytes 的总量永无止境!不知道如何解决这个问题,我玩弄了。
  • 在 Allocations 工具中,您可以跟踪每个已分配对象的 alloc/retain/release/autorelease 历史记录。您可以查看每个事件的堆栈跟踪。这会导致你直接找到有问题的代码。
【解决方案2】:

我有同样的问题,我无法得到解决方案。当我卸载整个场景并重新加载时,一切都恢复正常。所以它肯定似乎是某个地方的泄漏,但即使有仪器我也找不到它的来源。

总内存使用量没有增长,没有泄漏报告,所以我感觉 Cocos2d 或 Chipmunk 中的某些东西增加了负载。

我正在使用以随机方式进出屏幕的精灵,并且每次都创建和销毁它们。会不会是某些东西没有正常释放,Cocos 或者 Chipmunk 还在用这些东西计算?

【讨论】:

  • 确保您不会在游戏循环中不断地重新分配 CCAction。那是我的问题
  • 谢谢,我正在代码中执行此操作,但我认为完全解除分配项目会解除分配相关操作。我将尝试提前采取行动,并在需要时使用它们。让我们看看。
  • 嗨奥利弗,我发现了问题。我试图重用动作和动画,将它们放入保留变量中并在其他对象中使用它们。根据您的建议,我通过在需要的地方创建和使用动作和动画来重新编码整个游戏。即使我几乎同时创建 10-12 个新对象,帧速率也稳定在 60fps。我已经杀死了我所有的“保留”,因为它们正在造成内存泄漏。最后一切似乎都很完美。再次感谢。
猜你喜欢
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 2016-12-27
  • 2015-12-08
相关资源
最近更新 更多