我正在尝试使用 [[GKMatchmaker sharedMatchmaker] startBrowsingForNearbyPlayersWithReachableHandler:]
在GameKit中进行本地匹配 . 基本上,我是当地附近的一名球员,我想连接并开始比赛 . 重要的是,我想为本地玩家做这件事:我想通过互联网自动匹配.1717704_
我在iTunes iTunes中为我的应用启用了Game Center,并在我用来测试的每台设备上注册了一个不同的沙盒帐户 .
我已经尝试了与 GKMatchmakerViewController
(在验证本地播放器之后)和与 startBrowsingForNearbyPlayersWithReachableHandler:
进行程序化匹配的两个匹配,在我的桌面上彼此相邻的iPhone 4和第四代iPod Touch上运行相同的代码 . 都没有找到另一个;当使用 GKMatchmakerViewController
时,寻找附近玩家的界面仍在
寻找玩家......
微调器,当使用 startBrowsingForNearbyPlayersWithReachableHandler:
时,通知块永远不会被调用 .
这是我目前的测试代码块:
-(void)connectLocal
{
if( ![GKLocalPlayer localPlayer].isAuthenticated )
{
// authenticateLocalPlayer calls connectLocal again after authentication is complete
[ self authenticateLocalPlayer ];
return;
}
[[GKMatchmaker sharedMatchmaker] startBrowsingForNearbyPlayersWithReachableHandler:^(NSString *playerID, BOOL reachable) {
NSLog(@"Reachability changed for player %@", playerID );
} ];
}
文档在这个主题上有点稀疏和混乱,特别是当涉及到本地多人游戏和互联网上的比赛之间的差异时 . 例如,似乎有必要在找到加入该匹配的玩家之前验证本地玩家并创建匹配(Creating Any Kind of Match Starts with a Match Request) . 但是this little nugget似乎暗示:
标准用户界面允许玩家发现附近的其他玩家,即使这两个玩家当前都没有直接连接到Game Center .
另外,在Searching For Nearby Players中描述的流程中,在通过传递给 startBrowsingForNearbyPlayersWithReachableHandler:
的通知块找到玩家之后,直到步骤3才创建匹配请求 . 不幸的是,我从来没有这么远 .
所以,问题:
1)我认为我可以在验证本地播放器之前调用 startBrowsingForNearbyPlayersWithReachableHandler:
吗? GameKit并没有假设's OK. This may be a rash assumption. Whether I authenticate or not doesn'似乎有很大的不同 .
2)有没有人使用 [GKMatchmaker sharedMatchmaker] startBrowsingForNearbyPlayersWithReachableHandler:
成功实现了本地自动匹配?是否有好的示例代码可以说明完整的流程,从浏览播放器到开始匹配,都是以编程方式进行的?
3)关于是否可以在iOS模拟器中测试启用GameKit的应用程序,网上似乎存在相互矛盾的报道 . 普遍的共识似乎没有,并且最好在iOS硬件上进行测试 . 我一直在使用iPhone 4和第四代iPod Touch . 对于那些已成功测试本地多人游戏的人,您使用了哪些测试设置和方法?
3 回答
您需要按以下顺序执行以下操作:
验证本地播放器
安装邀请处理程序
开始浏览附近的玩家
需要身份验证 - 这会将您的应用程序注册到Game Center并将播放器记录下来 . 在大多数情况下,您甚至不需要访问Internet即可执行此操作 .
还需要安装邀请处理程序,我认为这是您缺少的步骤 . 这可让您的应用知道在收到入站邀请时该怎么做 . 如果您不这样做,设备将不会注册为附近 .
只有在完成上述两项操作后才开始浏览 .
这里有一些示例代码可以帮助您实现目标 . 应用启动后调用此方法:
*** IMPORTANT *** 如果您're using iOS8, you don' t安装邀请处理程序 . 您改为将对象注册为侦听协议GKLocalPlayerListener,并实现以下方法:
If you don't implement these methods on iOS8, it won't work!
然后,在验证本地播放器后通过调用此链接将GKMatchmaker链接到该对象:
确保在.h文件中声明实现协议的对象:
如果您执行了所有操作但仍然无法正常工作,请确保在应用程序中正确设置了包ID(单击应用程序,单击“目标”,确保填写“包标识符和版本”),然后单击“ “功能”选项卡(XCode 6),并确保游戏中心已启用 .
转到成员中心并确保使用该捆绑包ID的应用程序还为其配置文件启用了Game Center . 如有必要,请下载并重新应用您的配置文件 .
确保GameCenter下的“设置”中的沙盒开关已打开,并确保“允许邀请”和“附近播放器”开关已打开 .
最后,确保您转到iTunes Connect并验证是否已为您的应用启用了Game Center .
没有
startBrowsingForNearbyPlayersWithReachableHandler
通过宣传现有玩家和浏览其他玩家的方式工作,但最重要的是,它用于识别玩家的信息是playerID
......在玩家进行身份验证之前不可用 .GameCenter身份验证,成就和排行榜在模拟器中工作,其他一切都应该在真实硬件上进行测试 . 我实际上推荐用于身份验证测试的模拟器,因为它避免了沙盒/ 生产环境 开关,它可以在设备上进行详细的验证测试有点令人困惑 . 其他所有东西只能在设备上测试 . 模拟器不能很好地支持接收推送通知,这会打破匹配设置,并且通用硬件配置不同,无论如何都不能正常工作 .
所以,请记住iOS7和iOS8之间的差异 . 此代码适用于任一版本,并依次调用'updateNearbyPlayer' .
由于潜在的Bonjour服务有一些延迟,这种机制很有效 . 但是,需要通过适当的调用来 balancer :
每当您使用其中一个报告的GKPlayers / PlayerID Build 匹配项或将其添加到现有匹配项时,您应该停止浏览 . 比赛完成,关闭或取消后,再次开始浏览 . 否则,在第二次尝试连接到附近的设备时,您将失败 .