在沙箱环境中,我无法将转牌匹配推进到下一位玩家。
初始条件:
在我的“结束转弯”功能中,我执行以下操作:
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)?
答案 0 :(得分:0)
终于解决了这个问题。不要尝试编辑匹配对象。不要直接编辑matchData或匹配的任何其他组件。创建副本,对副本执行任何操作,然后重新提交副本。
我对玩家进行排序的尝试产生了各种不稳定的结果,直到我创建了一个完全独立的参与者数组并对其进行了排序。然后就像宣传的一样。