OGeek|极客世界-中国程序员成长平台

标题: cocoa-touch - 如果按下主页按钮则结束比赛 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 07:51
标题: cocoa-touch - 如果按下主页按钮则结束比赛

如果按下设备上的主页按钮,我将如何结束比赛/断开对面玩家的连接和/或移除比赛制作器标准界面 (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-推荐答案


乔恩,

按下主页按钮时,您的应用程序委托(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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4