3

我正在使用 GKSession 和 GKPeerPickerController 开发 iOS 游戏。我发现连接两个 iOS 设备的过程缓慢且不可靠,即使它们彼此相邻。让我们称我的设备为“设备 A”和“设备 B”。

以下是通常发生的情况:

  1. 在每台设备上,我点击了我的应用程序的连接按钮。然后,每台设备都会显示“iPad、iPhone 或 iPod touch”窗口。

  2. 通常很快,两个设备都会注意到对方的存在。

  3. 然后我告诉其中一个设备(比如设备 A)连接到另一个。

  4. 很快,设备 B 的窗口显示设备 A 不可用。

  5. 这是令人讨厌的地方。大约1秒到永远不等的一段时间后,设备B上弹出一个窗口说设备A要连接,并询问设备B是否要接受连接。

  6. 如果确实弹出上述窗口,则一切正常。但这有时需要很长时间,有时根本不会发生。

我有三个设备,无论我使用哪两个,我都有类似的问题。

对此我能做些什么吗?

我的连接方法非常简单:

-(void) findPeerPickerOpponents {
    GKPeerPickerController *picker;
    picker = [[GKPeerPickerController alloc] init]; 
    picker.delegate = self;
    [picker show]; 
    [self.connectionDelegate disableIdleTimer];
}
4

2 回答 2

0

好的,你应该做什么:
- 假设你有设备 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 倍——我两种方式都做了,这是一个非常好的解决方案。

于 2011-11-14T18:03:56.017 回答
0

我完全放弃了 peerPickerController。查看 Apple 的 GKRocket 示例代码。- 使用 GKSession 和 peer 的 tableviews。现在我的设备有点问题,原因我不清楚,但我使用了基本类:GameLobby 和 SessionManager 来很好地连接设备。还具有不将您限制在一个同行的优势。

于 2013-09-16T17:09:14.443 回答