我只是无法弄清楚它是如何工作的。我想要做的就是让两个玩家玩一个游戏,如果第三个玩家加入它可以立即加入游戏,如果第四个和最后一个玩家加入,也可以立即加入游戏。他们也可以随时出于任何原因离开游戏,如果发生这种情况,应该有一个空间可以让另一个人或同一个人重新连接。这是主意。以编程方式查找比赛的游戏中心
现在我得到的是以下内容。我出于显而易见的原因认证本地玩家。然后,我搜索了比赛,像这样:
if (matchRequest) [matchRequest release];
matchRequest = [[GKMatchRequest alloc] init];
matchRequest.minPlayers = 2;
matchRequest.maxPlayers = 4;
[[GKMatchmaker sharedMatchmaker] findMatchForRequest:matchRequest withCompletionHandler:^(GKMatch *match, NSError *error) {
if (error) {
// An error occured
} else {
if (matchCurrent) [matchCurrent release];
matchCurrent = [match retain];
matchCurrent.delegate = self;
}
}];
如果我执行三个不同的设备这部分,他们两个会找到对方,三是仍在寻找。所以我认为在找到匹配请求后发现它将被执行一次的最小数量的玩家。所以我需要的是一种使用我保留的matchCurrent来添加更多球员的方法。幸运的是,这种方法存在,但如何工作?在这种情况下,你什么时候打电话?我决定把它放在一个按钮下,这样我就可以在找到匹配的时候手动执行它。
我发现当我在第一个设备上按下它时,最后第三个设备可以找到第一个和第二个设备所在的匹配。实际上,第二个和第三个设备包含所涉及的每个设备的playerID。这是一件好事。但是有两个问题。
- 哪个设备应该实际调用addPlayersToMatch方法?你怎么能限制它到一个执行该方法的设备?另外,你应该什么时候打电话?
为什么在调用该方法的设备上不是更新了playerIDs?
[[GKMatchmaker sharedMatchmaker] addPlayersToMatch:matchCurrent matchRequest:matchRequest completionHandler:^(NSError *error) { //matchCurrent.playerIDs is not updated?! }];
其实它们被更新。当我看到playerID出现在第二和第三个设备上时,我手动更新设备1上的matchCurrent.playerID,并突然识别出该玩家。但是,即使是在设备1上发现新玩家时,也不会调用播放器的“didChangeState”。
这是基于一个服务器 - 客户端模型或P2P模式? 正在使用什么来初始化一个连接,tcp,udp,http? 当前连接的球员的数据在哪里? – 2010-11-09 13:10:36
“我试图做的是让两个玩家玩一个游戏,如果第三个玩家加入” - 你可以在你的第二句和第三句中加入一些分号和逗号?实际上,在运行句子中,很难判断每个if-子句是修改前一个还是后一个独立的子句。 – LarsH 2010-11-12 19:35:55