我正在构建一个 iOS 游戏,我注意到该游戏在 XCode 调试器中正常运行时运行良好。但是,当我从 Instruments(产品-> Profile 以跟踪泄漏)中运行它时,当 Instruments 在左侧边栏中显示“分析过程”时,游戏会冻结。在那之后,游戏的所有状态都混乱了,因为正在分析的游戏的某些部分冻结了,而其他部分继续进行。
这是我可以/需要解决的问题,还是足以确保游戏在发行版中运行?
如果需要修复,我需要做什么才能使其正常工作?
更新1:
所以我们发现了问题 - 即使我们正在玩游戏,同样的问题也会重现,按下主页按钮并单击游戏图标并继续玩。
问题是我们的大部分工作都是在 update 方法中完成的,它依赖于 (ccTime)dt 参数的值。dt 的值通常小于 0.1 秒,偶尔会达到 0.5 秒。当我们暂停(通过单击主页按钮,或者当仪器暂停游戏以拍摄快照时)并继续播放时,dt 的值是几个秒!这会使我们所有的计算超出范围。
我们尝试了一个临时的(但丑陋的)解决方法来解决这个问题:在更新方法的开头,我们添加了这个:
if(dt > 1)
return;
它现在按预期工作 - 不会不同步。但是,这不是一个永久的解决方案,因为有时 dt 的值合理地接近 1 秒,并且在资源紧张的情况下,这可能会导致卡顿(或更糟)。
我们还考虑了另一种(同样丑陋的)存储先前 dt 值的解决方案,然后检查更新方法:
if(dt > 10 * prevDt)
{
return;
}
我们尝试调用's并调用方法unscheduleUpdate
,但该方法不起作用。AppDelegate.m
applicationDidEnterBackground
scheduleUpdate
applicationWillEnterForeground
处理由于外部暂停而导致时间值不稳定的更新的最佳方法是什么?
谢谢阿南德