菜鸟教程小白 发表于 2022-12-13 07:51:06

cocoa-touch - 如果按下主页按钮则结束比赛


                                            <p><p>如果按下设备上的主页按钮,我将如何结束比赛/断开对面玩家的连接和/或移除比赛制作器标准界面 (GameKit)?我在屏幕上还有一个“主菜单”按钮,如果按下该按钮,我想结束比赛/断开对方玩家的连接。我正在使用 GameKit 来查找和开始比赛。</p>

<p>我是多人游戏新手,因此感谢您的帮助。</p>

<pre><code>-(void) match:(GKMatch*)match player:(NSString*)playerID didChangeState:(GKPlayerConnectionState)state
{
    switch (state)
    {
      case GKPlayerStateConnected:
            ;
            break;
      case GKPlayerStateDisconnected:
            CCLOG(@&#34;Disconnected&#34;);
            ;
            break;
    }

    if (matchStarted == NO &amp;&amp; match.expectedPlayerCount == 0)
    {
      matchStarted = YES;
      ;
    }
}


-(void) disconnectCurrentMatch
{
    CCLOG(@&#34;Quit Match&#34;);
    ;
    currentMatch.delegate = nil;
    ;
    currentMatch = nil;
}
</code></pre>

<p>这就是我用来断开玩家连接的全部内容。然后当玩家按下“主菜单”按钮时,这就是代码。</p>

<pre><code>-(void)Menu: (id) sender
{
    didQuit = YES;

    if (isSingle == YES)
    {
      GameKitHelper* gkHelper = ;
      ;
      gkHelper.delegate = nil;
    }

    [ replaceScene: ];
    CCLOG(@&#34;Return Main Menu&#34;);
}
</code></pre>

<p>它将场景替换为主菜单,但从不将状态更改为断开连接。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>乔恩,</p>

<p>按下主页按钮时,您的应用程序委托(delegate)将收到 <code>-(void)applicationDidEnterBackground:(UIApplication*)application</code> 回调。</p>

<p>您有大约 5 秒的时间(在 Springboard 终止您的应用程序之前)执行您需要做的任何事情来清理您的应用程序(除非您需要更多时间,您可以向 iOS 请求,但不能保证会收到)。 </p>

<p>你如何“清理”?正如您所提到的 - 您的比赛有 2 名玩家,因此玩家断开连接或退出对游戏的影响相同 - 结束游戏(假设玩家无法继续自己玩)。</p>

<p>您的离开玩家将向 GameKit 发送 <code>-disconnect</code> 消息。</p>

<p>玩家留下的程序需要有一个符合 <a href="http://developer.apple.com/library/ios/#documentation/GameKit/Reference/GKMatchDelegate_Ref/Reference/Reference.html#//apple_ref/occ/intfm/GKMatchDelegate/match%3adidReceiveData%3afromPlayer%3a" rel="noreferrer noopener nofollow">GKMatchDelegate</a> 的对象。协议(protocol)并作为 <code>GKMatch</code> 的委托(delegate)接收回调。</p>

<p>当对方玩家断开连接时,GKMatch 将调用代表:</p>

<pre><code>- (void)match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state`
</code></pre>

<p>所以,现在您的被遗忘代码的玩家也会收到通知。在该方法中,检查它是否断开连接 - 如果是,请按照您自己的逻辑来确定玩家“挂断”时想要发生的事情。</p></p>
                                   
                                                <p style="font-size: 20px;">关于cocoa-touch - 如果按下主页按钮则结束比赛,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/6171349/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/6171349/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: cocoa-touch - 如果按下主页按钮则结束比赛