我正在使用 GKSession 和 GKPeerPickerController 开发 iOS 游戏。我发现连接两个 iOS 设备的过程缓慢且不可靠,即使它们彼此相邻。我们将我的设备称为“设备 A”和“设备 B”。
通常会发生以下情况:
在每台设备上,我都点击了应用程序的连接按钮。然后,每个设备都会显示“iPad、iPhone 或 iPod touch”窗口。
通常,两个设备很快就会注意到对方的存在。
然后,我告诉其中一台设备(例如设备 A)连接到另一台设备。
很快,设备 B 的窗口显示设备 A 不可用。
这就是令人烦恼的地方。经过大约1秒到没有的一段时间后,设备B上会弹出一个窗口,表示设备A想要连接,并询问设备B是否愿意接受连接。
如果确实弹出上述窗口,则一切正常。但这有时需要很长时间,有时根本不会发生。
我有三台设备,无论使用哪两台,我都会遇到类似的问题。
我能做些什么吗?
我的连接方法非常简单:
-(void) findPeerPickerOpponents {
GKPeerPickerController *picker;
picker = [[GKPeerPickerController alloc] init];
picker.delegate = self;
[picker show];
[self.connectionDelegate disableIdleTimer];
}
好的,你应该做什么:
- 假设您有设备 A、B 和 C
- 设备A正在扫描,设备B刚刚开始扫描
- 设备 A 将设备 B 视为新对等方 - 它向 B 发送邀请
- 设备 B 收到邀请 - 它会自动批准它,两个设备都已连接,除了设备出现在大厅中之外,不会向用户显示任何通知
- 设备C出现
- 设备 A 和 B 尝试连接到它,它们会自动连接并出现在大厅
- 玩家在设备 A 上触摸设备 B
- 设备 A 向 B 发送 WANNAPLAY 数据包
- B 弹出窗口询问玩家是否想和 A 一起玩 - 玩家回答“是”
- 设备 B 向 A 发送 ACCEPTED,并断开除 A 之外的所有人的连接(通过发送 DISCONNECT)
- 设备 A 获得接受并断开除 B 之外的所有人的连接(通过发送 DISCONNECT)
- 设备 C 获得 2x DISCONNECT 并从其大厅中删除 A 和 B
它比标准方法要好得多,即使它的工作量多了 10 倍 - 我两种方法都做了,这是一个非常好的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)