如果按下设备上的Home按钮,我将如何结束匹配/断开对方玩家和/或移除匹配器标准界面(GameKit)?我在屏幕上也有一个“主菜单”按钮,如果按下,我想结束比赛/断开对方球员。我正在使用GameKit来查找和开始比赛。
我是多人游戏的新手,所以感谢任何帮助。
-(void) match:(GKMatch*)match player:(NSString*)playerID didChangeState:(GKPlayerConnectionState)state
{
switch (state)
{
case GKPlayerStateConnected:
[delegate onPlayerConnected:playerID];
break;
case GKPlayerStateDisconnected:
CCLOG(@"Disconnected");
[delegate onPlayerDisconnected:playerID];
break;
}
if (matchStarted == NO && match.expectedPlayerCount == 0)
{
matchStarted = YES;
[delegate onStartMatch];
}
}
-(void) disconnectCurrentMatch
{
CCLOG(@"Quit Match");
[currentMatch disconnect];
currentMatch.delegate = nil;
[currentMatch release];
currentMatch = nil;
}
这就是我用来断开玩家的所有内容。然后当玩家按下“主菜单”按钮时,这就是代码。
-(void)Menu: (id) sender
{
didQuit = YES;
if (isSingle == YES)
{
GameKitHelper* gkHelper = [GameKitHelper sharedGameKitHelper];
[gkHelper disconnectCurrentMatch];
gkHelper.delegate = nil;
}
[[CCDirector sharedDirector] replaceScene: [MainMenu scene]];
CCLOG(@"Return Main Menu");
}
它将场景替换为主菜单,但从不将状态更改为断开连接。
答案 0 :(得分:3)
乔,
按下主页按钮后,您的应用程序代表将收到-(void)applicationDidEnterBackground:(UIApplication*)application
回调。
你有大约5秒钟(在Springboard杀死你的应用程序之前)做任何你需要做的事情来清理你的应用程序(除非你需要更多的时间,你可以从iOS请求,但不保证接收)。
你如何“清理”?正如你所提到的 - 你的比赛有2名球员,所以任何一个球员断开连接或退出都会对比赛产生同样的效果 - 结束比赛(假设球员不能继续自己比赛)。
您的离开玩家将向GameKit发送-disconnect
消息。
玩家留下的程序需要有一个符合GKMatchDelegate协议的对象,并接收回调作为GKMatch
的代表。
当对方球员断线时,GKMatch将通过以下方式致电代表:
- (void)match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state`
所以,现在你的玩家已经被通知了。在那种方法中,检查它是否断开 - 如果是,请按照你自己的逻辑,当玩家“挂断”时你想要发生什么。