1

Game Center を使用する iOS マルチプレイヤー ゲームに取り組んでいます。

ユーザーが Game Center にログインして [今すぐプレイ] をタップすると、GC が 4 人のプレイヤーを接続し、ゲームが開始されます。問題は、データの一部が失われるため、ゲームが頻繁にフリーズすることです (これが原因だと思います)。ゲームは通常正常に動作しますが、サーバー (サーバーは一部のプレーヤー) から送信されたデータが失われ、ゲームがフリーズすることがあります。

この関数を使用してデータを送信します。

- (void)sendDataNSData *)data {
    NSError *error;

    BOOL success = [[GCHelper sharedInstance].match sendDataToAllPlayers:data withDataMode:GKMatchSendDataReliable errorerror];

    if (!success) {

        //NSLog(@"Error sending init packet");
        [self matchEnded];

    }
}

問題は、matchend が呼び出されないことです。そのため、データは送信されていると思いますが、失われます。

誰かが同様の問題を抱えていて、それを修正する方法を知っていますか?

4

1 に答える 1

2

私のユーザーはまた、ゲーム中に一部のデータが誤って失われる可能性があると不満を漏らしています。私はテストアプリを書きましたが、それGKMatchSendDataReliableは本当に信頼できるものではないことがわかりました. 弱いインターネット接続 (EDGE など) では、いくつかのパケットが Game Center API からのエラーなしで定期的に失われます。

したがって、唯一のオプションは、真に信頼性の高い配信を実現するための追加のトランスポート レイヤーを追加することです。

この目的のために、単純なライブラリ RoUTPを作成しました。送信されたすべてのメッセージを受信ごとに確認するまで保存し、失われたメッセージを再送信し、シーケンスが壊れた場合に受信したメッセージをバッファリングします。私のテストの組み合わせでは、「RoUTP + GKMatchSendDataUnreliable」は「RoUTP + GKMatchSendDataReliable」よりもさらにうまく機能します(もちろん、実際には信頼できない純粋な GKMatchSendDataReliable よりも優れています)。

于 2013-07-08T10:50:49.120 に答える