我是iOS新手(虽然我确实有很多C ++经验),我正在使用gamecenter开发基于回合制的纸牌游戏。这是抓住 - 转牌的球员是裁判,等待所有其他球员在转牌结束前打牌。有没有办法在游戏中心这样做,所以所有玩家都选择了同时做什么,一旦所有人都这样做,法官会得到通知,做出决定,然后优先考虑下一个玩家?例如,假设我们从1开始。我问问题,@“你最喜欢的颜色是什么?”向所有玩家传递一个游戏状态,其中有一个问题而他们没有回答它。然后你回答,@“绿色”,我们的朋友史蒂夫回应@“蓝色”。然后,我决定哪个更好,给你们一个点,然后无论我给出什么点,都成为新的法官。我的问题是,我如何允许所有玩家同时响应,而不是顺序响应。我知道,最糟糕的情况是,我可以顺序循环播放玩家,直到它回到我身边,然后判断它,但这会减慢我的游戏速度并减少它的乐趣。有没有办法同时做到这一点?
答案 0 :(得分:1)
iOS API围绕顺序转弯模型构建。虽然您提到的解决方法可行,但无法让GC执行真正的并发转弯。对不起):
答案 1 :(得分:1)
我同意NSSplendid关于需要顺序转弯的基于转弯的游戏的API。唯一真正同步的方法是使用GKMatch的实时比赛,对于拥有多名玩家的游戏来说,这不是一个真正的选择。
但是,通过使用游戏中心的编程方法而不是默认的视图控制器,可以略微改进顺序版本。
结束转弯会通过游戏中心触发推送通知,并使用GKTurnBasedEventHandler的方法handleTurnEventForMatch:didBecomeActive :,您可以在应用中收到。当法官询问问题时,让用户将其显示为游戏的一部分,并将其响应存储在本地直到轮到他们。一旦它成为给定的玩家,他们就会收到通知,即使应用程序在后台也是如此。
在该方法中,如果他们已经回答,它可以检查本地存储的答案并立即结束转弯。如果没有,请在答案完成后发送转弯。这并不是真正的同步,但只要每个人都做出回应,法官就会得到答案,而玩家不必等待一个玩家完成才能输入自己的答案。
在打开应用程序之前,玩家不会收到法官已经结束轮回的通知,但是如果不这样做,他们就无法看到问题。另一种方法虽然有点浪费,但是在法官结束轮到他们的问题之后,就是在他们得到“你的回合”通知后立即对所有玩家结束轮回,所以每个人都知道一个问题被问到,然后从前两段做了一些步骤。