我决定实现我自己的接口来连接两个运行我的游戏的设备,而不是使用 GKPeerPickerController。这实际上工作得很好。但我刚刚意识到,在创建 GKSession 时,我实际上并没有指定连接应该是无线还是蓝牙。我的界面中有一个选项可以让用户指定他们想要使用的连接方法。如何告诉 GKSession 我希望它通过蓝牙还是无线连接?
我认为当前发生的情况是,如果启用无线,则默认为无线,否则使用蓝牙。但是我想让用户指定哪种连接方式,这可能吗?
谢谢,唐娜
据我所知,你不能自己做到这一点。这就是 GKPeerPickerController 的用途。它默认通过蓝牙设置连接,但您也可以添加第二个掩码,以便用户选择他们的协议。基本上我一直在做的是设置掩码以允许用户选择蓝牙或“在线”(wifi):
_picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby|GKPeerPickerConnectionTypeOnline;
然后,如果他们在线选择,请关闭对等选择器并继续实现您的自定义界面。据我所知,会话应该以相同的方式创建。它没有很好的记录:/
要进行选择,您需要一个界面来询问用户是否要使用网络或蓝牙。如果是后者,它可以跳转到 peerpickercontroller 或实现 GK 调用自己。对于前者,您必须转储 GK 并手动对其进行编码。
这是一个相当复杂的话题,涉及设置 Bonjour 流和监听对象。它完全在 GameKit 之外工作,它只是蓝牙。
在 Apress 的更多 iPhone 3 开发 - 第 9 章中有一个关于如何实现网络协议的非常好的一章。这是一本非常好的书,仅此一章就值得一读,因为您正在尝试这样做。它很好地解释了所有问题,并引导您完成一个功能示例游戏。