草庐IT

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

coder 2023-09-14 原文

我的游戏使用 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/

有关swift - 如何处理游戏中心的滞后峰值的更多相关文章

  1. ruby-on-rails - Enumerator.new 如何处理已通过的 block ? - 2

    我在理解Enumerator.new方法的工作原理时遇到了一些困难。假设文档中的示例:fib=Enumerator.newdo|y|a=b=1loopdoy[1,1,2,3,5,8,13,21,34,55]循环中断条件在哪里,它如何知道循环应该迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)? 最佳答案 Enumerator使用Fibers在内部。您的示例等效于:require'fiber'fiber=Fiber.newdoa=b=1loopdoFiber.yieldaa,b=b,a+bendend10.times.m

  2. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  3. Ruby - 如何处理子类意外覆盖父类(super class)私有(private)字段的问题? - 2

    假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案

  4. ruby - 我需要从 facebook 游戏中抓取数据——使用 ruby - 2

    修改(澄清问题)我已经花了几天时间试图弄清楚如何从Facebook游戏中抓取特定信息;但是,我遇到了一堵又一堵砖墙。据我所知,主要问题如下。我可以使用Chrome的检查元素工具手动查找我需要的html-它似乎位于iframe中。但是,当我尝试抓取该iframe时,它​​是空的(属性除外):如果我使用浏览器的“查看页面源代码”工具,这与我看到的输出相同。我不明白为什么我看不到iframe中的数据。答案不是它是由AJAX之后添加的。(我知道这既是因为“查看页面源代码”可以读取Ajax添加的数据,也是因为我有b/c我一直等到我可以看到数据页面之后才抓取它,但它仍然不存在)。发生这种情况是因为

  5. python - Ruby 或 Python 的 3d 游戏引擎? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion是否有适用于这些的3d游戏引擎?

  6. ruby-on-rails - 我如何处理 View 中的 nils? - 2

    我设置了以下模型:classContact:no_freq?validates_presence_of:freq,:if=>:no_band?protecteddefno_freq?freq.nil?enddefno_band?band.nil?endendclassBand当我在我的新View中输入频率时,如果输入了频率,则不允许指定波段。这在我的其他观点中造成了问题,因为band现在为零。我如何允许不指定band并在我的index和showView中显示为空,然后在editView中允许在以后指定一个。通过执行以下操作,我已经能够让我的索引显示空白:contact.band&&co

  7. ruby - 如何处理树顶左递归 - 2

    我有一个grammarfile对于我正在尝试构建的一种新的通用编程语言。我正在努力使该语言健壮且易于使用(它深受Ruby等启发),为此我引入了一些左递归规则。我看到一些例子似乎表明了以下左递归规则:rulel_recursel_recurse/'somethingelse'end可以通过将其更改为非左递归:ruler_recurse'somethingelse'/r_recurseend对我来说,这看起来会有不同的问题并且仍然会失败。我是对的,还是这会“奏效”?我试图(查找和)消除的特定左递归可以在这个grammarfile中找到.我不确定哪些规则受到影响,但至少somewerepoi

  8. ruby - Ruby 如何处理嵌套类的继承? - 2

    在下面的测试用例中:classPackageclassComponentdefinitializep[:initialize,self]endendendclassPackage_A结果:[:initialize,#]#[:initialize,#]#如何获取特定的Package_A.component和Package_B.component? 最佳答案 ClassComponent是在Package中声明的,所以看起来是正确的。::指示在Package_A范围内查找名称Component。由于那里没有Component,它会查找父

  9. ruby - 使用 Ruby 编写 Unity 游戏 - 2

    所以我看到unity支持c#、JS和Boo。我可以学习其中一个,但我想制作一个“编译器”或类似的东西,让我可以编写ruby​​代码并输出JS代码或制作一个可以被Unity编译器读取的层。这有可能吗?我愿意在这方面投入很多时间并且有相当多的经验。 最佳答案 如果您的问题实际上是“我如何将Ruby编译为JavaScript”,那么这更容易回答:Opal:RubytoJavaScriptcompiler但是,学习其中一种受支持的语言会更好。当运行的是用另一种语言解释的代码时,很难调试“您的”代码。

  10. c - 如何处理 ruby​​ ffi gem 中的 ruby​​ 数组? - 2

    我想使用ruby​​ffigem调用一个c函数,该函数将一个数组作为输入变量,输出是一个数组。也就是说,c函数看起来像:double*my_function(doublearray[],intsize)我创建了ruby​​绑定(bind):moduleMyModuleextendFFI::Libraryffi_lib'c'ffi_lib'my_c_lib'attach_function:my_function,[:pointer,int],:pointer我想用ruby​​代码调用:result_array=MyModule.my_function([4,6,4],3)我该怎么做?

随机推荐