2016-08-25 9 views
2

私はiOSアプリケーションにGame Centerを実装し始めています。プレーヤーIDをアプリ内のどこか別のIDとして使用したいと思います。私は、変数を宣言しようとすると、しかし、:インスタンスメンバー 'playerID'はタイプ 'GKPlayer'で使用できません

var playerID: String? { GKPlayer.playerID } 

を私はエラーInstance member 'playerID' cannot be used on type 'GKPlayer'.が、私は私を助けることができる(ただし、簡単に私ではなく、ドキュメント可能性があり)何も見つかりませんでしたゲームセンターのドキュメントを通して見ると取得します。 playerIDを宣言する前に実行する必要があるコードはありますか?これは、ローカルプレイヤーを認証した後ですべて実行されます。

単一のローカルユーザーのIDを取得するには、loadPlayers(forIdentifiers:withCompletionHandler:)を使用する必要がありますか?

+0

申し訳ありませんが、これは明らかですが、どうすればよいですか? – adsigel

+0

これを行うには、 'loadPlayers(forIdentifiers:withCompletionHandler:)'を使う必要があるようです。私はそれを得ることができるかどうかを確認します。ありがとう。 – adsigel

答えて

1

プレーヤーのオブジェクトを最初に取得する必要があります。その後、それぞれのプレーヤーのIDを調べることができます。 loadPlayersは、loadPlayersを呼び出すときに必要なplayerIDを既に知っている必要があるため、助けにはなりません。

プレイヤーオブジェクトを取得できる場所は2つあります。まず、デバイスのGame Centerにログインしている「ローカルプレーヤー」があります。第2に、リアルタイムおよびターンベースの両方の試合には、その時点でその試合に参加しているすべての選手のリストが含まれています。

私は迅速な構文を知らないが、OBJ-Cには、地元のプレイヤーのIDを取得すると、次のようになります。

GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 
NSString *playerID = localPlayer.playerID 

マッチオブジェクトは、その中でプレイヤーのセット全体のためのオブジェクトの配列を持つことになります一致。リアルタイムではGKMatchオブジェクトでは、このプロパティはplayersと呼ばれます。ターンベースのGKTurnBasedMatchオブジェクトでは、プロパティはparticipantsとなります。

for (GKTurnBasedMatchParticipant *participant in match.participants) 
{ 
    GKPlayer *player = participant.player; 
    NSString *playerID = player.playerID; 
} 

(注)6人の選手、たとえば、の一致を作成するとき、ターンベースの試合でその、作成者(ローカル:ターンベースのマッチの参加者のリストを取得する、例えば、次のようになりますプレーヤー)が第1のスロットを占める。参加者2-6は、プレイヤーが実際にゲームに参加するまで(最初の順番に)空になります。

playerIDを取得したら、それを残りのコードの識別子として使用できます。後で、プレーヤーの詳細を調べる場合は、参照するplayerIDを使用してloadPlayersに電話することができます。

+0

'var localPlayer = GKLocalPlayer.localPlayer()'と 'var playerID = localPlayer.playerID'は構文的には動作しますが、署名されたユーザに対しては' playerID'が返されません。名前は 'me'(' localPlayer'には期待されます)ですが、 'localPlayer'配列の' alias'と 'playerID'は両方ともnilです。 – adsigel

+0

それを考え出した。認証が完了する前に 'playerID'を宣言していました。私は必要なものを得ました、ありがとう! – adsigel

関連する問題