试图为我的Game Center游戏设置时间限制

时间:2016-05-26 21:48:40

标签: ios game-center

我创造了一个2人回合制游戏。我希望每位球员有24小时轮到他们。如果他们没有达到这个时间限制,我想结束比赛。

我尝试过使用NSTimer,下面的函数作为选择器。

func timerCalled() {
                        for part in currentMatch!.participants!  {
                            (part ).matchOutcome = .Tied
                        }
                        currentMatch?.endMatchInTurnWithMatchData(data!, scores: nil, achievements: nil, completionHandler: { (error) -> Void in
                            if error != nil {
                                print(error)
                            }
                            self.statusLabel?.text = "Game has ended"
                        })
                    }

然而,我的游戏在运行此功能时崩溃,并将其打印到控制台:“由于会话处于无效状态,因此无法完成请求的操作”。它崩溃是因为我在玩家转弯后启动计时器,所以当“他”结束游戏时不再轮到他了。我相信如果我让当前的玩家在时间结束时结束游戏,但是如何/何时启动计时器,它会起作用?当玩家1轮到他时,我必须用玩家2启动计时器。我该怎么做?

1 个答案:

答案 0 :(得分:0)

不幸的是,在撰写本文时,Game Center不支持您想要做的事情。

你使用计时器的方法不会有效,因为正如你所见,你不能依靠player2轮流启动计时器或在计时器启动时激活。而且,正如你所见,玩家1不能强迫玩家2结束。

你可以在拨打turnTimeout时设置endTurnWithNextParticipants参数,基本上说,“我已完成本回合,而下一位玩家有足够的时间来完成转弯。”但是,对于每个WWDC视频,转弯中的最后一个玩家将永远不会超时。所以,在一个双人游戏中(真的是在任何回合制比赛中),最后一个玩家总是具有竞争优势,因为他们永远不会超时。

作为一种解决方法,我从匹配数据中取出先前玩家的最后一个转弯日期,为其添加超时值,并检查当前时间是否超出该值。如果是的话,我在那里杀了转弯。然而,玩家2可能已经等了几天甚至几周才重新开始游戏。或者他们可能永远不会回来在这种情况下,基于回合的游戏陷入困境,除非/直到最终玩家返回,否则之前的玩家无法继续进行。