1

したがって、私の試合には2人のプレーヤーがいます。プレーヤー 1 が新しい試合を作成するとき、endTurnWithNextParticipantsメソッドを使用して、2 人の参加者を持つ GKTurnBasedMatch の参加者配列プロパティを nextParticipants に提供します。

しかし、プレーヤー 1 のデバイスでは、自分の番だと言い続けます。プレイヤー 2 のデバイスには、「自分の番」と表示されます。

- (void)endTurnWithNextParticipants:(NSArray<GKTurnBasedParticipant *> *)nextParticipants
                        turnTimeout:(NSTimeInterval)timeout
                          matchData:(NSData *)matchData
                  completionHandler:(void (^)(NSError *error))completionHandler

助言がありますか?

編集:

これが私がどのように使用したかですendTurnWithNextParticipantscurrentTurnBasedMatchGKTurnBasedMatch のインスタンスです。インスタンスに 2 人の参加者 (プレーヤー 1 と 2) が正しく含まれていることを確認しました。そして、完了にはエラーはありません。

[self.currentTurnBasedMatch endTurnWithNextParticipants:self.currentTurnBasedMatch.participants turnTimeout:GKTurnTimeoutDefault matchData:data completionHandler:^(NSError * _Nullable error) {
    MyNSLogSys2O(@"completion error:", error);  //default 1 week timeout
}];
4

1 に答える 1

2

ここには 2 つの問題があります。

何よりもまず、すでにマッチに保存されている配列を再利用しています。これは変更不可能な配列であり、単純に再度渡すとendTurnWithNextParticipants、時々機能する可能性のあるあらゆる種類の奇妙な動作が発生しますが、ほとんどの場合、本当に奇妙な問題が発生します。私はこれを自分自身で難しい方法で学びました: GameCenter: endTurnWithNextParticipants not Advance . まったく新しい配列を作成し、参加者をそこにコピーします。その新しい配列をに渡しますendTurnWithNextParticipants

第二に、配列内の参加者の順序を調整して、次のプレーヤーに変更したいことを示しているようには見えません。(試合で不変配列を再利用しても、いずれにせよ正しく動作しませんでしたが、それでも実行する必要があります) プレイヤーが 2 人しかいない場合は、上記のリンクで使用した方法を使用できます。2 人以上のプレイヤーがいる場合は、次の質問で受け入れられている回答のようなことを行う必要があります: Game Center の Auto-match と endTurnWithNextParticipants

于 2015-11-27T20:01:18.457 に答える