Microsoft DirectX 8.0 (Visual Basic)

ピアツーピア ゲームの通常のプレー

Microsoft® DirectPlay® のメッセージは、基本的には、セッション内のメンバに送信されるゲーム関連のデータ ブロックである。DirectPlay は、データ ブロックの内容や形式を限定せずに、ユーザーどうしがデータをやり取りするためのメカニズムのみを提供する。ゲームの進行中には、通常、各セッション メンバから残りのセッション メンバ全員に対して、メッセージが間断なく送信される。これらのメッセージの主な目的は、各ユーザーのアプリケーションに同じ UI を表示するために、ゲームの状態の同期をとることにある。ただし、メッセージは、これに限らずゲーム固有の多様な目的に使用できる。

ゲーム (特に変化の速いゲーム) では、メッセージングを慎重に管理しなければならない場合が多い。DirectPlay は、流出するメッセージを、ターゲットが処理できるレベルに減速 (スロットリング) する。重要なメッセージを確実に届けるため、メッセージをあまり高速で送信しないように注意しなければならない。DirectPlay での効率的なメッセージング処理については、「ネットワーキングの基本」を参照すること。

ほかのセッション メンバにメッセージを送信するには、DirectPlay8Peer.SendTo を呼び出す。DirectPlay が、データを指定してそのメンバの DirectPlay8Event.Receive メソッドを呼び出す。特定のプレーヤーにメッセージを送信するには、DirectPlay8Event.CreatePlayer メソッドが呼び出されたときに受け取ったプレーヤー ID を、idSend パラメータに設定する。また、idSend を DPNID_ALL_PLAYERS_GROUP に設定すれば、セッション内のプレーヤー全員にメッセージを送信できる。プレーヤーのグループを定義すると、SendTo を 1 回呼び出すだけで、グループのメンバ全員にメッセージを送信できる。

  ほかのユーザーに情報を送信するには、DirectPlay8Peer.SetPeerInfo メソッドを使用してもよい。DirectPlay が、この情報を指定してそれらのメンバの DirectPlay8Event.InfoNotify メソッドを呼び出す。ただし、この送信方法はあまり効率的でないので、通常のメッセージングでは使用しないこと。

グループの使用

多くのゲームは、プレーヤーをグループ分けできるようになっている。たとえば戦略型ゲームでは、通常、プレーヤーを複数のグループに分け、グループ単位で指示を出すことができる。Microsoft® DirectPlay® でも、プレーヤー グループを編成できる。DirectPlay のグループは、基本的にはメッセージングを簡略化する手段である。グループを定義すると、DirectPlay8Peer.SendTo を 1 回呼び出すだけで、グループ メンバ全員にメッセージを送信できるようになる。DirectPlay のグループは、通常はゲームで定義されるグループに対応するが、グループ作成の目的が限定されているわけではない。

DirectPlay のグループを作成するには、DirectPlay8Peer.CreateGroup を呼び出す。DirectPlay が、詳細を指定してセッション メンバ全員の DirectPlay8Event.CreateGroup メソッドを呼び出す。メソッドの lGroupID パラメータには、グループにメッセージを送信するために使用するグループ ID が設定される。

グループを作成したら、次に DirectPlay8Peer.AddPlayerToGroup を呼び出してプレーヤーを追加する。この結果、DirectPlay が、新しくプレーヤーが追加されたグループの ID を指定して、メンバ全員の DirectPlay8Event.AddRemovePlayerGroup を呼び出す。

グループを確立すると、そのグループにデータを送信できるようになる。これには、idSend パラメータにグループ ID を設定して DirectPlay8Peer.SendTo を呼び出す。この結果、DirectPlay が、データを指定してグループ メンバ全員の DirectPlay8Event.Receive メソッドを呼び出す。

グループからプレーヤーを削除するには、DirectPlay8Peer.RemovePlayerFromGroup を呼び出す。DirectPlay が、プレーヤーの ID を指定してセッション メンバの DirectPlay8Event.AddRemovePlayerGroup メソッドを呼び出す。

最後に、グループを使い終わったら、DirectPlay8Peer.DestroyGroup を呼び出せば破棄できる。DirectPlay が、グループ ID を指定してセッション メンバ全員の DirectPlay8Event.DestroyGroup メソッドを呼び出す。