gpt4 book ai didi

swift - 如何处理游戏中心的滞后峰值

转载 作者:可可西里 更新时间:2023-11-01 00:59:45 25 4
gpt4 key购买 nike

我的游戏使用 Game Center 作为计分板。在应用程序开始时,我要求 Game Center 登录。

问题是,在经过一段可变的时间后,Game Center 会弹出“欢迎回来......”的内容,这会在我的应用程序中造成巨大的延迟峰值,而该应用程序的资源已经很低了。

我玩过完成处理程序,试图在横幅完成时找到某种回调……但什么也没有!

我该如何处理?我有一个加载屏幕,我是否可以在它弹出之前完成加载?

这是我现在使用的代码

func authenticateLocalPlayer()
{
Holder.loggedIn = false
print("Start Authenticate")
let localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = {(viewController, error) -> Void in
if (viewController != nil)
{
self.presentViewController(viewController!, animated: false, completion: {self.authenticated()})
}
}
}

最佳答案

我见过同样的事情,甚至看到同一网络上彼此相邻的不同设备的登录时间不同。我认为我的策略最初来自 Apple 的文档或 WWDC 视频,但我没有方便的引用,是在启动时立即启动身份验证,就像在我的第一个 View Controller 的 viewDidAppear 中一样:

  1. 禁用开始游戏按钮,这样用户即使无法登录也无法尝试游戏。
  2. 开始认证
  3. 做所有其他启动内容、动画等。
  4. 在认证处理程序中,如果成功,启用开始游戏按钮

通过这种方式,我将延迟痛苦转移到了应用程序启动上,这可能会被正常的应用程序启动延迟、启动动画等等所掩盖。当我实际启动游戏 session 时,我已确保不会出现登录开销(或失败)。

顺便说一句,与您的问题没有直接关系,但我注意到在您的身份验证处理程序中,如果 View Controller 存在,您将提供它,如果 View Controller 为零,则假定用户已通过身份验证。请注意,当发生错误时,会设置错误值,但 View Controller 为 nil。因此,零 VC 可能意味着用户已通过身份验证,但也可能意味着身份验证失败。始终首先检查 error 的值。

    localPlayer.authenticateHandler = {(viewController, error) -> Void in
if (error)
{
//check and process the error.

//bail out because we are NOT authenticated
return;
}

if (viewController != nil)
{
self.presentViewController(viewController!, animated: false, completion: {self.authenticated()})
}
}

关于swift - 如何处理游戏中心的滞后峰值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36541999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com