2

辞任ボタンの後ろに次のコードがあります。

currentMatch.currentParticipant.matchOutcome = GKTurnBasedMatchOutcomeWon;
nextParticipant.matchOutcome = GKTurnBasedMatchOutcomeLost;
[currentMatch participantQuitInTurnWithOutcome:GKTurnBasedMatchOutcomeLost 
                               nextParticipant:nextParticipant matchData:data
                             completionHandler:^(NSError *error) {
                                                    if (error) {
                                                        NSLog(@"%@", error);
                                                    }
                                                    else {
                                                        [statusLabel setString:@"You resigned"];
                                                    }];

「あなたは辞任しました」と書かれていますが、対戦相手には通知がなく、ターンは彼に渡されます。これで、対戦相手は移動できなくなります。そうしないと、エラーが発生します。ゲームを終了する唯一の方法は、対戦相手も辞任することです。

誰かが上記のコードの何が問題になっているのかわかりますか?

4

1 に答える 1

2

上記のコードに問題はありません。ゲームセンターのターンベースの作業では、次のプレーヤーが自分のターンを処理し、ゲームが終了したかどうかを判断して、ゲームを終了するか、ゲームを続行する必要があります(2人以上のプレーヤーの場合はより理にかなっています)。したがって、それを行うのはゲームコードの一部です。

辞任したプレイヤーを次の参加者として設定しない限り、プレイを続けることができるはずです。あなたができないこと。(ゲームを続行する場合は、結果をLostではなくGKTurnBasedMatchOutcomeQuitに設定する必要があります)

その瞬間にすべてのプレーヤーのゲームを本当に終了したい場合は、その試合の参加者に適切と思われるすべての結果を設定してから、

[currentMatch endMatchInTurnWithMatchData:data completionHandler:(void (^)(NSError *error))completionHandler];

すべてのプレイヤーのゲームを終了します。

于 2012-05-04T10:01:30.397 に答える