使用 iOS Game Center Challenge 发送对象?

Posted

技术标签:

【中文标题】使用 iOS Game Center Challenge 发送对象?【英文标题】:Send an object with iOS Game Center Challenge? 【发布时间】:2014-02-26 04:39:15 【问题描述】:

我正在开发一款 ios 游戏,其中玩家构建一个对象并使用该对象完成一个定时挑战。我想使用 Game Center 让玩家能够使用相同的玩家构建对象挑战他的朋友以击败时间。挑战的时间部分很简单,但我怎样才能发送带有挑战的玩家构建对象?我知道如果球员参与比赛,您可以发送对象,但比赛并不真正适合我想要做的事情。如果对象可以作为 NSDictionary(或其他对象)与挑战一起发送,那将是最好的。这可能吗?如果有,怎么做?

【问题讨论】:

正如 Bram De Geyter 所指出的,如果您可以将播放器构建对象的数据打包成一个 64 位无符号整数(分数的上下文属性),那么您可以轻松地做到这一点,否则您需要使用您自己的服务器进行存储,在这种情况下,上下文将保存您的服务器存储对象的 id。 【参考方案1】:

我认为您有两种选择来实现这一点:

使用分数上下文

您将leaderboards 应用到您的 Game Center 游戏中,并使用挑战完成时间作为您的分数。您的 GKScore 对象有一个 context 属性,您可以使用它来传输对您的对象的引用。 context property 是一个整数值。您将需要实现自己的服务器来存储实际对象,或者使用后端即服务,例如Parse。

当您发出GKScoreChallenge 时,其他玩家可以读取score 属性,检索context,然后联系您的服务器以检索对象并设置他的游戏以尝试击败挑战。

使用回合制比赛

如果你真的不想建立自己的服务器,你可以使用回合制比赛,但它有局限性。当玩家构建一个对象时,您会创建一个回合制比赛。在这里,使用GKTurnBasedMatch 对象的matchData 属性可以轻松存储对象。然后,挑战朋友将包括邀请加入这个特定的回合制比赛。

最大的问题是你只能挑战 16 位朋友(一场比赛中的最大玩家人数)为你的一个玩家构建的对象,并且你的朋友必须轮流。

您可以通过使用相同的游戏数据创建更多匹配来解决玩家数量的限制。

必须等待一个朋友转弯,您可以通过将转弯超时设置得相当低来解决(不确定是否有限制),所以感觉就像没有转弯。或者,您可以使用交换系统将轮次传递给在轮次实际开始之前完成游戏的人。

【讨论】:

我担心是这样的。我只是希望避免它!呃。【参考方案2】:

我认为您要查找的内容可能类似于 Turn-Based Matches。

【讨论】:

是的,我可以使用匹配来完成我的任务,我知道我可以这样做,但它并不是真正的匹配。挑战更符合游戏的概念,如果我可以发送带有挑战的对象,它会更简单、更清晰。

以上是关于使用 iOS Game Center Challenge 发送对象?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 6 Game Center 在身份验证时崩溃

iOS 6 Game Center authenticateHandler取消后无法登录

有没有办法为 iOS 应用禁用 Game Center?

iOS 6 Game Center authenticateHandler 取消后无法登录

iOS 开发:验证 Game Center 用户的奇怪问题

iOS 8 beta 5 Game Center Sandbox 无法识别我的应用