2009-06-24 7 views
2

GameKitフレームワークを使用して複数のiPhone/iPodをBluetoothで接続して再生できるマルチプレイヤーゲームを作成しました。GameKitでiPhone bluetoothでクライアントからホストに伝える方法

私は最初に再生できるデバイスを選択する方法を考えています。論理的な解決策は、接続のホストを選択することです。 GKSessionにはサーバーとクライアントがありますか?彼らはすべて仲間ですか?私が必要とするものを達成するためにどのルートを取るべきですか?

答えて

6

基本的には、好きなようにセッションを構成する必要があります。アップルのドキュメントから

セッションは、セッションが初期化 があるときに設定されている セッションモードに基づい ネットワーク上の他のピアを発見します。アプリケーションは のセッションをサーバーに設定することができます。 ネットワークにサービスタイプをアドバタイズする 、 広告サーバーを検索するクライアント。または がクライアントのようにサーバのようにアドバタイズし、 を同時に検索するピア。 GKSessionModeServerまたは GKSessionModePeerのいずれかのセッションモードで :のdisplayName:sessionMode

サーバーとして動作し、アプリケーションのコピーが initWithSessionIDを呼び出し ことでセッションを初期化します。 アプリケーションがセッションを構成した後、 は、 セッションのisAvailableプロパティをYESに設定してサービスをアドバタイズします。 GKSessionModeClientまたは GKSessionModePeerのいずれかのセッションモードで :のdisplayName:sessionMode

クライアントとして動作するアプリケーションのコピーが initWithSessionIDを呼び出し ことでセッションを初期化します。 セッションを設定した後、 広告サーバーのネットワーク によって、セッションのisAvailable属性 をYESに設定して検索します。 GKSessionModePeer セッションモードでセッションが に設定されている場合は、上記のようにサーバーとして をアドバタイズします。

したがって、GKSessionModePeerを使用してセッションを初期化すると、ピア(サーバーとクライアントの両方として動作する)が存在します。サーバーとクライアントを区別したい場合は、GKSessionModeServerを使用してサーバーを初期化します。

大切にしてください。

+0

しかし、私のコードでは1つのアプリケーションなので、私は決定を下す必要があります:サーバーまたはクライアント。しかし、これは動作しません。私は1つのサーバーと1つのクライアントとしてアプリケーションのインスタンスを持つ必要があります。 最初に再生を開始するプレイヤーを選択する方法は他にありません。 – Dimitris

+4

この場合、任意のピアがサーバーとなるように任意にまたは偶然に(たとえば、トインをコスで)決定する必要があります。他はクライアントになります。 実際の例を見るには、AppleのサンプルコードGKTankを参照してください。 GKTankソースコードから: //コイントス状態を入力してマルチプレイヤーゲームを開始し、誰がサーバー/クライアントであるかを判断します。 self.gameState = kStateMultiplayerCointoss; コードはコインを投げる方法を説明し、結果に応じて、ピアの1つがクライアントとして機能し、もう1つはサーバーです。その先端のために –

+0

ありがとう!私はすでに、それぞれのデバイスがロールして、ロールを他のものと比較する「ランダムロール」方式を実装しています...それは動作しますが、私は間違いなくGKTankを見ていきます。 – Dimitris

関連する問題