我正在构建一个应用程序(顺便说一下,已经在应用程序商店中称为MotAMot):一个令人讨厌的免费应用程序。
该游戏提出了几种游戏模式:独立的,使用相同iDevice的多个玩家和MULTI,其中2个玩家同时玩同一游戏板,但每个玩家都使用自己的iDevice。
我正在使用GKPeerPickerController实例来管理2个设备之间的连接。
我唯一担心的是,我无法确定谁的iPhone将扮演服务器角色,谁是客户端。当一个播放器向另一个发送邀请时,我觉得很酷,我可以决定将这个播放器作为服务器。
假设玩家1邀请玩家2加入游戏。但是与此同时(或之后几秒钟),玩家2在其设备上显示邀请弹出窗口之前邀请玩家1。我的问题:如何确定玩家1邀请玩家2首先(或相反)?我的意思是,我当然得到了一些回调,因为我正在实现GKPeerPickerControllerDelegate协议。但是,无论谁真正发起连接,似乎我在两个设备上都收到相同的消息。
// New connection
- (void)peerPickerController:(GKPeerPickerController *)picker
didConnectPeer:(NSString *)peer
toSession:(GKSession *)session
{
// Set the session
[self setCurrentSession:session];
// I'm implementing the GKSessionDelegate protocol
[session setDelegate:self];
// I'll handle any received data from my enemy
[session setDataReceiveHandler:self withContext:nil];
// I'm cleaning the room
[myPicker setDelegate:nil];
[myPicker dismiss];
[myPicker autorelease];
myPicker = nil;
}
// A peer changed its state
- (void)session:(GKSession *)session peer:(NSString *)peer didChangeState: (GKPeerConnectionState)state
{
switch (state)
{
case GKPeerStateConnected:
[self peerConnected:peer];
break;
case GKPeerStateDisconnected:
// Libération de la session
[currentSession release];
currentSession = nil;
break;
case GKPeerStateAvailable:
break;
case GKPeerStateConnecting:
break;
case GKPeerStateUnavailable:
break;
}
}
有人对此有任何想法吗?
最佳答案
您为什么不能解决这种老式方法?例如,《文明IV》将您带入服务器机房屏幕,在这种情况下,您是等待客户端的服务器,因此您不接受任何新连接是很有意义的。
我会做类似的事情。原来this person有一个问题(略有关联),据我所知,它是通过类似的方式解决的。