如果按下设备上的主页按钮,我将如何结束比赛/断开对面玩家的连接和/或移除比赛制作器标准界面 (GameKit)?我在屏幕上还有一个“主菜单”按钮,如果按下该按钮,我想结束比赛/断开对方玩家的连接。我正在使用 GameKit 来查找和开始比赛。
我是多人游戏新手,因此感谢您的帮助。
-(void) matchGKMatch*)match playerNSString*)playerID didChangeStateGKPlayerConnectionState)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");
}
它将场景替换为主菜单,但从不将状态更改为断开连接。
Best Answer-推荐答案 strong>
乔恩,
按下主页按钮时,您的应用程序委托(delegate)将收到 -(void)applicationDidEnterBackgroundUIApplication*)application 回调。
您有大约 5 秒的时间(在 Springboard 终止您的应用程序之前)执行您需要做的任何事情来清理您的应用程序(除非您需要更多时间,您可以向 iOS 请求,但不能保证会收到)。
你如何“清理”?正如您所提到的 - 您的比赛有 2 名玩家,因此玩家断开连接或退出对游戏的影响相同 - 结束游戏(假设玩家无法继续自己玩)。
您的离开玩家将向 GameKit 发送 -disconnect 消息。
玩家留下的程序需要有一个符合 GKMatchDelegate 的对象。协议(protocol)并作为 GKMatch 的委托(delegate)接收回调。
当对方玩家断开连接时,GKMatch 将调用代表:
- (void)matchGKMatch *)match playerNSString *)playerID didChangeStateGKPlayerConnectionState)state`
所以,现在您的被遗忘代码的玩家也会收到通知。在该方法中,检查它是否断开连接 - 如果是,请按照您自己的逻辑来确定玩家“挂断”时想要发生的事情。
关于cocoa-touch - 如果按下主页按钮则结束比赛,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/6171349/
|