1

GKTurnbasedMatchMakerViewController新しいターンベースのゲームを開始したり、既存のゲームをチェックしたりするために使用していますが、問題なく動作しています。しかし、私はこのケース シナリオで立ち往生しています: プレイヤーが携帯電話でゲーム センター アプリを開き、そこに既存のターンベースの試合が表示されているとします。彼は試合をクリックし、ボタンビューターン/プレイターン(現在のターンに応じて)をクリックして、彼を私のアプリに連れて行きます。GKTurnbasedMatchMakerViewControllerここで必要なのは、適切な UI を彼に表示できるように、didFindMatch デリゲートから取得したような一致データです。

現在、たくさん読んだ後、GKLocalPlayerListner私が探しているものがあるかもしれません。だからここに私がしたことがあります。

クラス拡張機能に GKLocalPlayerListner を追加しました。

ユーザーの認証中に、ローカル プレーヤーのリスナーを登録します。

func authenticateLocalUser() {

        println("Authenticating local user...")
        if GKLocalPlayer.localPlayer().authenticated == false {
            GKLocalPlayer.localPlayer().authenticateHandler = { (view, error) in
                if error == nil {
                    println("authentication")
                    self.authenticated = true
                    GKLocalPlayer.localPlayer().registerListener(self)
                } else {
                    println("\(error.localizedDescription)")
                }
            }
        } else {
            println("Already authenticated")
//            GKLocalPlayer.localPlayer().registerListener(self)
        }
    }

クラスに GKLocalPlayerListener デリゲート メソッドを追加しました。

// MARK: GKLocalPlayerListener

func player(player: GKPlayer!, didAcceptInvite inviteToAccept: GKInvite!) {
    println("turnbased: didAcceptInvite")
    let mmvc = GKMatchmakerViewController(invite: inviteToAccept)
    mmvc.matchmakerDelegate = self
    presentingViewController.presentViewController(mmvc, animated: true, completion: nil)
}

func player(player: GKPlayer!, didRequestMatchWithOtherPlayers playersToInvite: [AnyObject]!) {
    println("turnbased: didRequestMatchWithOtherPlayers")
}
func player(player: GKPlayer!, receivedTurnEventForMatch match: GKTurnBasedMatch!, didBecomeActive: Bool) {
    println("turnbased: received turnbased match with didBecomeActive = \(didBecomeActive) and match = \(match.description)")
}

func player(player: GKPlayer!, didReceiveChallenge challenge: GKChallenge!) {
    println("turnbased: Challenge received")
}

しかし、gamecenter アプリからゲームに入るときに、これらのいずれも取得できません。

まず第一に、 GKLocalPlayerListener は私が達成しようとしていることさえしますか? そうでない場合、iOSでも私が望むものを達成することは可能ですか? これで私を助けてください。

4

2 に答える 2

1

とにかく、IOS8.4 の時点でこれを行う方法は見つかりませんでした。ReceivedTurnEventイベントが生成されたときにのみ発生します。gameCenter からアプリを起動しても、イベントが生成されないようです。引数を介して渡され、環境変数に設定されたパラメーターを調べましたが、gameCenter アプリでどの一致が選択されたかについてまだヒットを見つけていません。

関連: iOS Game Center アプリで選択したターン/ゲームを Game Center 対応アプリで処理する

于 2015-07-18T21:23:28.680 に答える