GameCenter:endTurnWithNextParticipants没有前进

时间:2015-02-15 03:44:53

标签: ios game-center ios8.1

在沙箱环境中,我无法将转牌匹配推进到下一位玩家。

初始条件:

  • 分别在设备A和设备B上播放器A和播放器B.
  • 两人都登录了沙箱
  • 两位玩家都可以看到彼此的GC状态消息
  • 玩家A创建一个匹配并邀请玩家B
  • 玩家A结束转弯

在我的“结束转弯”功能中,我执行以下操作:

    NSLog(@"size = %ld", updatedMatchData.length);

    //move the current player to the bottom of the list
    NSMutableArray *nextPlayers = (NSMutableArray *)theMatch.participants;
    NSLog(@"%@", [nextPlayers description]);

    GKTurnBasedParticipant *firstGuy = nextPlayers[0];
    [nextPlayers removeObjectAtIndex:0];
    [nextPlayers addObject:firstGuy];

    NSLog(@"------");
    NSLog(@"%@", [nextPlayers description]);

    //send the match to the servers
    //"theMatch" was recorded in turnBasedMatchmakerViewController:didFindMatch

    [theMatch endTurnWithNextParticipants:nextPlayers
                              turnTimeout:GKTurnTimeoutDefault
                                matchData:updatedMatchData
                        completionHandler:^(NSError *error)
    {
        if (error)
        {
            NSLog(@"WTF?");
        }
    }];

产生以下日志输出:

size = 26926
(
"<GKTurnBasedParticipant 0x174018630 - playerID:G:1084583147 (local player) status:Active matchOutcome:None lastTurnDate:(null) timeoutDate:(null)>",
"<GKTurnBasedParticipant 0x174018ba0 - playerID:G:12962188 status:Invited matchOutcome:None lastTurnDate:(null) timeoutDate:(null)>"
)
------
(
"<GKTurnBasedParticipant 0x174018ba0 - playerID:G:12962188 status:Invited matchOutcome:None lastTurnDate:(null) timeoutDate:(null)>",
"<GKTurnBasedParticipant 0x174018630 - playerID:G:1084583147 (local player) status:Active matchOutcome:None lastTurnDate:(null) timeoutDate:(null)>"
)

然而,玩家B没有收到邀请或转弯。玩家B的游戏中心应用程序显示没有活跃的游戏或转弯。玩家A的游戏中心继续显示他仍然有待轮次。每次我重新启动并重新执行测试时,玩家A都会进行另一次待定转弯。

玩家A在我结束转弯后立即触发玩家:receivedTurnEventForMatch:didBecomeActive,但didBecomeActive设置为NO。

然后我将超时更改为30秒。在球员A结束转弯30秒后,球员A点击了成为活动(不)。 PlayerB最终收到邀请提示。玩家B激活didBecomeActive,值为YES。

为什么在玩家A结束转弯后,我的回合不会立即提升到玩家B?为什么玩家A似乎有另一个转弯(然后超时并转移到玩家B)?

1 个答案:

答案 0 :(得分:0)

终于解决了这个问题。不要尝试编辑匹配对象。不要直接编辑matchData或匹配的任何其他组件。创建副本,对副本执行任何操作,然后重新提交副本。

我对玩家进行排序的尝试产生了各种不稳定的结果,直到我创建了一个完全独立的参与者数组并对其进行了排序。然后就像宣传的一样。