Zan*_*aes 4 iphone gamekit game-center
我希望在我的回合制游戏中有一个"快速匹配"模式,玩家可以自动匹配第一个可用的玩家.我正在使用自己的自定义UI.到目前为止,我的代码如下所示:
- (void)quickMatch {
GKMatchRequest *request = [[GKMatchRequest alloc] init];
request.minPlayers = 2;
request.maxPlayers = 2;
request.playersToInvite = nil;
[GKTurnBasedMatch findMatchForRequest:request withCompletionHandler:^(GKTurnBasedMatch *match, NSError *error) {
NSLog(@"MATCH: %@ %@ %@ %d",error,match,match.matchID,(int)match.status);
}];
Run Code Online (Sandbox Code Playgroud)
这成功创建了一个匹配项,但匹配中的第二个参与者具有nullID(playerID:(null) status:Matching).
我想如果我在另一个实例上运行相同的代码,使用不同的Game Center ID,那么这两个用户将相互匹配......但这似乎不正确.每当我调用该GKTurnBasedMatch loadMatchesWithCompletionHandler函数时,我会继续检索相同的匹配,每个匹配只有1个有效参与者(本地播放器).
此问题似乎与iOS开发类似:如何在Game Center中自动匹配玩家?这表明设置request.playersToInvite = nil;应该完成自动匹配,但这似乎并不适合我.
如何让Game Center自动匹配这些玩家?
小智 7
让我来解决你在这里看到的问题.首先,没有必要将playersToInvite属性设置为nil,因为这是默认状态,除非玩家被分配给它,但这不会导致你的"问题".我把它放在引号中,因为你实际上正确地编写了代码,并且只能感知到不存在的问题.让我带您了解findMatchForeRequest完成后会发生什么.
当调用完成块时,Game Center创建了一个新的GKTurnBasedMatch对象,其中有两个参与者,第一个是本地玩家(你),第二个实际上是一个空参与者,玩家ID为零.这样做的原因是,当与随机(未分配)对手创建匹配时,Game Center不会分配所有参与者.在向他们发送转弯时分配随机参与者.在你的游戏中,这个匹配不会出现在云端,供其他人玩,直到你第一次转弯.
现在,在您的其他设备/游戏中心ID上调用loadMatchesWithCompletionHandler将不会自动显示匹配,除非您特别邀请该玩家使用playerToInvite(并且已按照上面的指定轮到您).想想这样:如果它以这种方式工作,世界上的每个玩家在调用loadMatchesWithCompletionHandler时都会看到存在的每个自动匹配.
另一个游戏中心ID实际上必须调用findMatchForRequest而不设置playerToInvite属性,以便匹配您的其他ID创建的游戏中可用的空座位.这样就可以保留创建匹配时"它总是轮到你"的范例,但该播放器现在位于第二个插槽中,而不是第一个插槽.只需在第二个ID上创建游戏,就像在第一个ID上完全相同,你的游戏将由两个参与者创建,第一个来自最初创建它的ID,第二个是加入匹配的ID通过调用findMatchForRequest.这里的关键是如果playersToInvite为零,则findMatchForRequest不会始终创建新的匹配.如果存在与开放座位的现有匹配,则它将简单地将本地玩家与该匹配.
快乐的编码!
科尔宾
| 归档时间: |
|
| 查看次数: |
752 次 |
| 最近记录: |