我正在构建一个应用程序(顺便说一句,它已经在应用程序商店中了,名为MotAMot):一个讨价还价的免费应用程序。
该游戏提出了几种不同的游戏模式:独立游戏,多个玩家使用相同的iDevice,多个玩家同时玩相同的棋盘,但每个玩家都使用自己的iDevices。
我使用一个GKPeerPickerController实例来管理这两个设备之间的连接。
我唯一关心的是,我无法决定谁是iPhone,谁将扮演服务器角色,谁是客户端。当玩家向对方发出邀请时,很酷,我可以决定这个玩家将是服务器。
比如说,玩家1邀请玩家2加入游戏。但是在同一时间(或者仅仅几秒钟后),玩家2在获得设备上显示的邀请弹出之前邀请了1号玩家。我的问题是:我如何确定player 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;
}
}有人会知道这件事吗?
发布于 2011-12-22 14:08:35
为什么你不能用老办法解决这个问题呢?例如,文明IV使您进入服务器房屏幕,在这种情况下,您是等待客户端的服务器,不接受任何新的连接是有意义的。
我会做一些类似的事情。事实证明,this person有一个问题(稍微相关),据我理解,它是以类似的方式解决的。
https://stackoverflow.com/questions/8604980
复制相似问题