Iphone 为什么我的设备无法使用此游戏套件连接代码找到彼此?
我正在尝试使用游戏套件通过蓝牙连接两台设备。第一个设备运行的应用程序中包含以下代码:Iphone 为什么我的设备无法使用此游戏套件连接代码找到彼此?,iphone,cocoa-touch,ios,gamekit,Iphone,Cocoa Touch,Ios,Gamekit,我正在尝试使用游戏套件通过蓝牙连接两台设备。第一个设备运行的应用程序中包含以下代码: -(void)connect { GKPeerPickerController* picker; picker = [[GKPeerPickerController alloc] init]; picker.delegate = self; //picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;
-(void)connect
{
GKPeerPickerController* picker;
picker = [[GKPeerPickerController alloc] init];
picker.delegate = self;
//picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;
picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;
[picker show];
}
- (void)viewDidLoad {
[super viewDidLoad];
peerStatus = kServer;
gamePacketNumber = 0;
currentSession = nil;
gamePeerId = nil;
NSString *uid = [[UIDevice currentDevice] uniqueIdentifier];
gameUniqueID = [uid hash];
[self connect];
}
- (void)peerPickerController:(GKPeerPickerController *)picker didSelectConnectionType:(GKPeerPickerConnectionType)type {
// GKSessionModeClient
// GKSessionModeServer
[self.currentSession initWithSessionID:kTankSessionID displayName:nil sessionMode:GKSessionModeClient];
currentSession.available = YES;
currentSession.delegate = self;
}
- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session
{
self.gamePeerId= peerID;
//self.currentSession = session;
self.currentSession.delegate = self;
[self.currentSession setDataReceiveHandler: self withContext:nil];
// Remove the picker.
picker.delegate = nil;
[picker dismiss];
[picker autorelease];
// Start your game
}
- (void)peerPickerControllerDidCancel: (GKPeerPickerController *)picker
{
NSLog(@"peerPickerControllerDidCancel");
picker.delegate = nil;
[picker autorelease];
}
- (void)session: (GKSession*)session peer:(NSString*)peerID didChangeState:(GKPeerConnectionState)state
{
NSLog(@"finding and connecting to others sessions");
if(state == GKPeerStateAvailable){
NSLog(@"aviable and ready to conect");
[session connectToPeer:peerID withTimeout:60];
session.available =NO; //put YES si volem multiconexions sino es tancarà la sesio en conectarse 2
}
}
- (void)session:(GKSession *)session didReceiveConnectionRequestFromPeer:(NSString *)peerID{
NSLog(@"lisetn for others sessions");
NSError *error=nil;
if(amAcceptingConnetions){
if(![session acceptConnectionFromPeer:peerID error:&error]){
//Handler error
}
}else{
[session denyConnectionFromPeer:peerID];
}
}
第二个设备正在运行另一个应用程序,该应用程序使用与上述相同的代码,只是更改了以下部分:
[self.currentSession initWithSessionID:kTankSessionID displayName:nil sessionMode:GKSessionModeServer];
两台设备上都会出现“正常”窗口,指示它们正在搜索其他设备,但这两台设备彼此无法识别。这里可能有什么问题?如果尚未分配currentSession,则需要分配它。或许可以尝试改变:
[self.currentSession initWithSessionID:kTankSessionID displayName:nil sessionMode:GKSessionModeClient];
为此:
self.currentSession = [[GKSession alloc] initWithSessionID:kTankSessionID displayName:nil sesssionMode:GKSessionModeClient];
您可能还希望添加一个检查,查看会话是否已分配,如果已分配,则在创建新会话之前释放它。我注意到,如果每次设备尝试连接时都重置会话,而不是重复使用同一会话,则性能和可靠性会有所提高。您还必须将PeerPickerController与GameKit/GameKit.h一起导入。如果你想知道更多,请参考 或