java游戏匹配_游戏中心以编程方式查找匹配项

博客内容涉及到在游戏开发中实现多人匹配系统的挑战。作者遇到的问题是,当两个玩家开始游戏后,第三个和第四个玩家不能立即加入,且在某些设备上玩家离开后,系统无法正确更新玩家ID和状态。作者尝试使用`GKMatchmaker`来寻找和添加玩家,并对`addPlayersToMatch`方法的调用时机和设备选择感到困惑。尽管在某些情况下手动触发按钮能解决问题,但仍然存在设备间同步和状态更新的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我只是无法弄清楚这是如何工作的 . 我想要做的是让两个玩家玩游戏,如果第三个玩家加入它可以立即加入游戏,如果第四个和最后一个玩家加入它也可以立即加入游戏 . 他们也可以随时出于任何原因离开游戏,如果发生这种情况,应该为另一个人或同一个人重新连接打开一个空间 . 这就是主意 .

现在我得到的是以下内容 . 我出于显而易见的原因验证了本地播放器 . 然后我像这样搜索一个匹配:

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来添加更多玩家 . Luckely这种方法存在,但是如何运作呢?在这种情况下你什么时候打电话?我决定将它放在一个按钮下,这样我就可以在找到匹配项时手动执行它 .

我发现当我在第一个设备上按下它时,最后第三个设备可以找到第一个和第二个设备所在的匹配 . 事实上,第二个和第三个设备包含所涉及的每个设备的playerID . 这是件好事 . 但是有两个问题 .

哪个设备实际上应该调用addPlayersToMatch方法?如何将它限制为执行该方法的一个设备?再加上什么时候打电话给它?

为什么在调用该方法的设备上,不是更新了playerID?

[[GKMatchmaker sharedMatchmaker] addPlayersToMatch:matchCurrent matchRequest:matchRequest completionHandler:^(NSError *error) {

//matchCurrent.playerIDs is not updated?!

}];

实际上他们已经更新了 . 当我看到第二个和第三个设备上出现播放器ID时,我手动更新设备1上的matchCurrent.playerIDs,突然它确实识别出播放器 . 然而,当在设备1上发现新玩家时,甚至不会调用玩家的'didChangeState' .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值