GameCenter:endTurnWithNextParticipants 没有前进
GameCenter: endTurnWithNextParticipants not advancing
在沙盒环境中,我无法将回合制比赛推进到下一位玩家。
初始条件:
- 分别在设备 A 和设备 B 上播放器 A 和播放器 B。
- 都登录到沙箱
- 双方玩家都可以看到对方的 GC 状态消息
- 玩家 A 创建比赛并邀请玩家 B
- 玩家A结束回合
在我的 "end turn" 函数中,我执行以下操作:
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 在我结束回合后立即开火 player:receivedTurnEventForMatch:didBecomeActive,但 didBecomeActive 设置为 NO。
于是我把超时改成了30秒。 playerA 结束回合后 30 秒,playerA 触发 didBecomeActive(否)。 PlayerB 最终收到邀请提示。玩家 B 触发 didBecomeActive,值为 YES。
为什么我的回合没有在玩家 A 结束回合后立即进入玩家 B?为什么玩家 A 似乎有另一个回合(然后超时并传递给玩家 B)?
终于解决了这个问题。不要尝试编辑匹配对象。不要直接编辑匹配数据或匹配的任何其他组件。创建一个副本,对副本做任何你需要做的事情,然后重新提交副本。
我对玩家进行排序的尝试产生了各种不稳定的结果,直到我创建了一个完全独立的参与者数组并对其进行了排序。然后它像宣传的那样工作。
在沙盒环境中,我无法将回合制比赛推进到下一位玩家。
初始条件:
- 分别在设备 A 和设备 B 上播放器 A 和播放器 B。
- 都登录到沙箱
- 双方玩家都可以看到对方的 GC 状态消息
- 玩家 A 创建比赛并邀请玩家 B
- 玩家A结束回合
在我的 "end turn" 函数中,我执行以下操作:
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 在我结束回合后立即开火 player:receivedTurnEventForMatch:didBecomeActive,但 didBecomeActive 设置为 NO。
于是我把超时改成了30秒。 playerA 结束回合后 30 秒,playerA 触发 didBecomeActive(否)。 PlayerB 最终收到邀请提示。玩家 B 触发 didBecomeActive,值为 YES。
为什么我的回合没有在玩家 A 结束回合后立即进入玩家 B?为什么玩家 A 似乎有另一个回合(然后超时并传递给玩家 B)?
终于解决了这个问题。不要尝试编辑匹配对象。不要直接编辑匹配数据或匹配的任何其他组件。创建一个副本,对副本做任何你需要做的事情,然后重新提交副本。
我对玩家进行排序的尝试产生了各种不稳定的结果,直到我创建了一个完全独立的参与者数组并对其进行了排序。然后它像宣传的那样工作。