プレーヤーが接続する前に、ゲームのいくつかのルールを動的に設定し、(GCがプレーヤー/オートマチックを検索している間に)それらのルールについて可能なプレーヤーに通知する必要があります。ゲームをホスト/開始したいとし、賭けユニットの開始量(10 ... 1000)、難易度(0 ... 10)、スコアリングシステム(0..3)などを設定したいとします。これは、この情報を提供するセルを備えたテーブルのようなものだと思います。そのため、プレーヤーは、そのようなルールに参加してゲームをプレイするかどうかを決定します。それを実装する方法は?
AFAIK GKMatchは、プレーヤーの検索中に最小数と最大数のプレーヤーのみを使用します。そのような情報を招待して提供することはできますが、ルールを含む既存のゲームを閲覧するなど、自分でゲームを探している他のプレーヤーのために必要です。ゲームが開始されてからゲームに参加できませんが、セッションに必要な数のプレーヤーをなんとかして埋める必要があります。たとえば、1人のプレーヤーだけでプレイしたい場合は、プレーヤー数= 2(およびいくつかのカスタムルール)でゲームを開始するので、反対側のプレーヤーを見つけるのに役立つGCが必要です。そして、そのプレイヤーは私に加わる前に私のルールセットについて知らされるべきです。
1 に答える
2つの可能性があります:
次のプロパティを使用しますGKMatchRequest
:
@property(nonatomic, assign) uint32_t playerAttributes
ローカルプレイヤーがゲームで果たしたい役割を指定するマスク。
この値が0(デフォルト)の場合、このプロパティは無視されます。値がゼロ以外の場合、自動化はその値をマスクとして使用し、プレーヤーがグループ内で果たすことができる役割を制限します。プレーヤー属性との自動マッチングは、次の2つのルールに従います。
新しいプレーヤーを試合に追加できるのは、そのプレーヤーのマスクのビット単位のANDと、すでに試合に参加しているプレーヤーのマスクが0x00000000に等しい場合のみです。マッチ内のすべてのプレーヤーのマスクのビットごとのORが0xFFFFFFFFになるまで、プレーヤーがマッチに追加されます。詳細については、ゲームキットプログラミングガイドを参照してください。
@property(nonatomic, assign) NSUInteger playerGroup
試合への参加を許可されたプレーヤーのサブセットを識別する番号。
ゲームでplayerGroupプロパティが設定されている場合、リクエストが同じplayerGroup値を共有するプレーヤーのみがGameCenterによって自動化されます。プレーヤーグループには任意の値を使用できます。たとえば、さまざまなplayerGroup値を定義して、次のフィルターのいずれかを実装できます。
ゲームは、スキルレベルに基づいてプレーヤーを制限する可能性があります。複数のゲームを提供するゲームは、それを使用して、プレーヤーをプレイしたい特定のゲームにフィルターすることができます。複数の勝利条件(キャプチャーザフラッグ、サバイバルなど)を持つゲームは、同じルールに関心のある他のプレイヤーとプレイヤーを一致させることができます。アプリ内購入を通じてボーナスコンテンツを提供するゲームは、同じコンテンツを互いに所有しているプレーヤーと一致する可能性があります。
これにより、プレーヤーを検索する前にいくつかのゲーム構成が可能になります。
複雑なルールの場合、一致が検出されてプレーヤーが接続された後に構成データを送信する必要があります(GKMatch APIを参照)。ここでは、信頼できる伝送モードを使用する必要があります。
これら2つのアイデアを組み合わせることもできます。