2011-05-19 43 views
3

我正在使用GKSession和GKPeerPickerController处理iOS游戏。我发现连接两个iOS设备的过程很慢并且不可靠,即使它们彼此相邻。让我们打电话给我的设备“设备A”和“设备B”。GKPeerPickerController的连接问题

下面是通常的情况:

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

  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]; 
} 

回答

0

OK,你应该做的:
- 可以说你有设备A,B和C
- 设备A扫描,设备B刚刚开始扫描
- 设备A将设备B视为新对等设备 - 它将邀请发送给B
- 设备B获得邀请 - 自动批准该设备,两台设备都已连接,除了设备出现在大厅内外,没有任何通知显示给用户
- 设备C显示了
- A,B设备尝试连接到它,它们会自动连接,并在大堂
显示 - 玩家在设备触摸设备B A
- 设备A发送WANNAPLAY包到B
- B提出询问是否玩家想要玩A - 播放器答案YES
- 设备B发送ACCEPTED给A并断开除A之外的所有人(通过发送DISCONNECT)
- 设备A获得ACCEPTED并断开除B之外的所有人(通过发送DISCONNECT )
- 设备C获得2x DISCONNECT并从其大厅中删除A和B

与标准方法相比,它的工作性能要好得多,即使它的工作量增加了10倍 - 我做到了这两点,这是一个非常好的解决方案。

0

我完全放弃了peerPickerController。查看Apple的GKRocket示例代码。 - 使用GKSession和同级表格。现在我的设备上有点bug,因为我不清楚,但我使用了基本的类:GameLobby和SessionManager来让设备连接得很好。还具有不限制你同行的优势。