Gamecenter init/authentication 使 SpriteKit 的精灵运动滞后

Posted

技术标签:

【中文标题】Gamecenter init/authentication 使 SpriteKit 的精灵运动滞后【英文标题】:Gamecenter init/authentication makes SpriteKit's sprite movement lagging 【发布时间】:2014-02-18 22:40:01 【问题描述】:

我有一个简单的场景(默认 SpriteKit 模板):一个 ViewController 和一个 MyScene SpriteKit 场景。 在我的 ViewController 中,我在 viewDidLoad 中管理了游戏中心初始化,但我的场景在启动后立即开始无限快速的精灵移动(背景视差滚动)。

一切正常,但直到 GameCenter 完成身份验证程序,我的精灵移动滞后、中断、运行不流畅。

我可以采取什么做法来最小化这种情况(保持视差精灵运动运行)?

我正在 iPhone4 设备 (ios7.03) 上测试这个

【问题讨论】:

您是否尝试过 Instruments 有问题的调用是什么? 是的,尝试分析,但 Instruments 崩溃了(使用 XCode 5.0) 这是重复的:***.com/questions/9450281/… 它不是 SpriteKit 特有的,所以在这方面它也是一个比这个更好的措辞问题。 如果您使用 Multipeer Connectivity 但忘记停止广告/浏览服务,则会出现类似的减速,因为这会妨碍从对等点传输数据包的速度。可能这里也是一样,可能是频繁启动Game Center认证或者其他方式造成的。没有任何代码是不可能的。 【参考方案1】:

GameCenter 身份验证实际上是导致游戏延迟一段时间的原因。人们有几种方法可以绕过它,这实际上取决于应用程序和程序员的品味。

    在 GameCenter 身份验证期间暂停游戏 这通常是最简单的方法,而且非常简单。

    将身份验证放在另一个线程上 如果您想要从菜单到游戏玩法的流畅选项,这将是您的最佳选择。 只需使用 GCD 启动一个新线程并在其中运行 GameCenter 身份验证即可。

希望这会有所帮助。可能还有其他几种方法,但这是我见过最多的两种。我通常只使用第一种方法。

【讨论】:

谢谢 Milam,关于 No1,你建议让应用保持静止,直到 localPlayer.authenticateHandler 提供 isAuthenticated==YES? 是的。在 isAuthenticated 返回 true 之前,游戏不会开始。我想补充一点,我不只是让它保持静止,我使用一个带有动画计时器的等待弹出窗口让用户知道这不仅仅是随机冻结(比如如果你自己没有暂停它可能会发生什么) )。用户习惯于加载屏幕。

以上是关于Gamecenter init/authentication 使 SpriteKit 的精灵运动滞后的主要内容,如果未能解决你的问题,请参考以下文章

不可预测的 GameCenter 断开连接错误 [沙盒]

GameCenter 未注册分数

GameCenter 成就图像的大小是多少?

GameCenter 挑战在 Sandbox 中不起作用?

如何实现 GameCenter 排行榜? [关闭]

UINavigationbar 的阴影效果,如 GameCenter