如果按下主页按钮则结束匹配

时间:2011-05-30 00:30:17

标签: cocoa-touch ios cocos2d-iphone gamekit

如果按下设备上的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");
}

它将场景替换为主菜单,但从不将状态更改为断开连接。

1 个答案:

答案 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`

所以,现在你的玩家已经被通知了。在那种方法中,检查它是否断开 - 如果是,请按照你自己的逻辑,当玩家“挂断”时你想要发生什么。