2

我是 iOS 新手(虽然我确实有很多 C++ 经验),我正在使用 gamecenter 开发一款基于回合的纸牌游戏。这是关键 - 轮到的玩家是裁判,等待所有其他玩家在回合结束前打出一张牌。有没有办法在 Game Center 中做到这一点,让所有玩家同时选择要做什么,一旦所有人都这样做了,裁判就会收到通知,做出决定,然后将优先权传递给下一个玩家?例如,假设我们从第 1 回合开始。我问这个问题,@“你最喜欢的颜色是什么?” 给所有向他们传递一个游戏状态的玩家,该游戏状态有这个问题并且他们没有回答它。然后你回复@“Green”,我们的朋友史蒂夫回复@“Blue”。然后我决定哪个更好,给你们一个分数,然后,无论我给出的观点是谁,都会成为新的法官。我的问题是,我如何让所有玩家同时响应,而不是依次响应。我知道,在最坏的情况下,我可以依次循环播放玩家,直到它返回给我,然后判断它,但这会减慢我的游戏速度并降低它的乐趣。有没有办法同时做到这一点?

4

2 回答 2

1

我同意 NSSplendid 关于需要顺序回合的回合制游戏的 API。唯一真正同步的方法是使用来自 GKMatch 的实时比赛,而对于多人游戏来说,这并不是一个真正的选择。

但是,通过使用游戏中心的编程方法而不是默认视图控制器,可以稍微改进顺序版本。

结束回合会通过 Game Center 触发推送通知,并且通过使用 GKTurnBasedEventHandler 的方法 handleTurnEventForMatch:didBecomeActive:,您可以在您的应用程序中收到该通知。当法官提出问题时,让用户将其显示为游戏的一部分,并将他们的回答存储在本地,直到轮到他们为止。一旦轮到给定的玩家,他们就会收到通知,即使应用程序在后台。

在该方法中,它可以检查本地存储的答案,如果他们已经回答,则立即结束回合。如果他们没有,则在答案完成后发送回合。这并不是真正同时发生的,但只要每个人都做出回应,裁判就会得到答案,而玩家不必等待一名玩家完成后才能输入自己的答案。

玩家在打开应用程序之前不会收到裁判结束轮到的通知,但如果不这样做,他们无论如何都看不到问题。另一种方法虽然有点浪费,但在裁判结束他们的回合后,他们会在所有玩家收到“轮到你”的通知后立即结束他们的回合,这样每个人都知道一个问题被问到,然后执行前两段中的步骤。

于 2013-08-28T02:37:07.490 回答
1

iOS API 是围绕顺序转弯模型构建的。虽然您提到的解决方法可行,但没有办法让 GC 进行真正的并发轮次。对不起 ):

于 2013-05-08T10:50:11.713 回答