与GKPeerPickerController的连接问题

时间:2011-05-19 00:55:17

标签: ios iphone gamekit gksession gkpeerpickercontroller

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

以下是典型情况:

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

  2. 通常很快,两个设备都注意到另一个存在。

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

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

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

  6. 如果弹出上面的窗口,一切都会正常进行。但这有时需要很长时间,有时根本不会发生。

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

    我能做些什么吗?

    我的连接方法非常简单:

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

2 个答案:

答案 0 :(得分:0)

好的,你应该做什么:
- 假设您有设备A,B和C
- 设备A正在扫描,设备B刚开始扫描
- 设备A将设备B视为新对等设备 - 它将邀请发送给B
- 设备B获得邀请 - 它自动批准它,两个设备都已连接,没有通知给用户,除了设备出现在大厅中 - 设备C显示
- 设备A和B尝试连接到它,它们自动连接并出现在大厅
- 玩家触摸设备A上的设备B. - 设备A将WANNAPLAY数据包发送到B
- B弹出询问玩家是否想玩A - 玩家回答是
- 设备B向A发送ACCEPTED并断开除A之外的所有人(通过发送DISCONNECT)
- 设备A获得ACCEPTED并断开除B之外的所有人(通过发送DISCONNECT)
- 设备C获得2x DISCONNECT并从其大厅中移除A和B

它比标准方法更好,即使它的工作量增加了10倍 - 我做到了两种方式,这是一个非常好的解决方案。

答案 1 :(得分:0)

我完全放弃了peerPickerController。查看Apple的GKRocket示例代码。 - 使用GKSession和同行的表视图。我现在的设备上有点儿麻烦,原因我不清楚,但是我使用了基本的类:GameLobby和SessionManager让设备很好地连接起来。还有一个优点,就是不限制你到一个同伴。