Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 试图对我的游戏中心游戏设置时间限制_Ios_Game Center - Fatal编程技术网

Ios 试图对我的游戏中心游戏设置时间限制

Ios 试图对我的游戏中心游戏设置时间限制,ios,game-center,Ios,Game Center,我已经创建了一个基于2人回合的游戏。我希望每个球员都有24小时的轮到时间。如果他们没有达到这个时限,我想结束比赛 我尝试过使用NSTimer,并使用下面的函数作为选择器 func timerCalled() { for part in currentMatch!.participants! { (part ).matchOutcome = .Tied

我已经创建了一个基于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启动计时器。我该怎么做

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

你使用计时器的方法不会有效,因为正如你所看到的,你不能依靠player2来轮流启动计时器或在计时器启动时处于活动状态。而且,正如你所看到的,玩家1不能强迫玩家2结束回合

当您调用
endTurnWithNextParticipants
时,您可以设置
turnTimeout
参数,基本上是说,“我完成了这个回合,下一个玩家有这么长的时间来完成他们的回合。”但是,根据WWDC的一个视频,回合中的最后一个玩家永远不会超时。因此,在双人游戏中(实际上,在任何回合制的比赛中),最后一名玩家总是具有竞争优势,因为他们永远不会超时


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

可能的解决方法:如果第一名玩家结束回合,为“下一名参与者”(第二名玩家,然后是第一名玩家)提供两名玩家,那么当第二名玩家超时时,回合将传递给第一名玩家。它对我有用。“下一个参与者”数组总是有两个玩家(无限循环),所以技术上没有“最后一个玩家”@Anton,我不认为这是一个解决办法,我认为这是解决方案。我对文件的理解是,所有参与者都应该包括在末尾(包括下一个参与者…)。我在文档中没有看到关于不包括特定玩家的内容。。。