Microsoft DirectX 8.0 (C++) |
Microsoft® DirectPlay® Voice をサポートするロビー可能ゲーム アプリケーションとロビー アプリケーションを作成するには、フォーカスをキャプチャするという概念が不可欠である。ゲーム アプリケーションがフォーカス キャプチャを適切に実装していない場合、ロビー アプリケーションから起動されたときに、音声通信が機能しない可能性がある。
この点を説明するため、DirectPlay Voice をサポートするロビー アプリケーションで、2 人のプレーヤーが会う場合について考える。2 人のプレーヤーがゲームの開始に合意する。ゲームの開始後に、両方のプレーヤーのコンピュータでロビー アプリケーションがフォーカスを失い、ゲーム アプリケーションの各コピーがフォーカスを取得する。ゲーム アプリケーションがロビー アプリケーションから正しくフォーカスを取得しないと、ゲーム アプリケーションの実行中も、ロビー アプリケーションにフォーカスが残る可能性がある。
たとえば、ゲーム セッション実行中に、1 番目のプレーヤーのロビー アプリケーションがフォーカスを失わず、2 番目のプレーヤーのゲーム セッションがロビー アプリケーションからフォーカスを取得すると、この状況が発生する。2 番目のプレーヤーからは、1 番目のプレーヤーの音声セッションが半二重に戻ってしまったように見える。2 番目のプレーヤーには 1 番目のプレーヤーの声が聞こえるが、1 番目のプレーヤーには 2 番目のプレーヤーの声が聞こえない。1 番目のプレーヤーからは、2 番目のプレーヤーの声が聞こえないため、音声セッションが終了したように見える。また、1 番目のプレーヤーには、2 番目のプレーヤーに自分の声が聞こえていることがわからない。
この動作は、意図されたものである。同様の状況で、1 番目のプレーヤーがロビー アプリケーションからゲーム セッションを開始するときに、問題が発生してセッションを開始できない場合について考えてみよう。2 番目のプレーヤーのセッションが問題なく開始した場合には、2 番目のプレーヤーには 1 番目のプレーヤーの声が聞こえるため、1 番目のプレーヤーから 2 番目のプレーヤーにゲーム セッションの失敗を知らせることができる。そうすれば、両者ともロビーに戻り、セッションの開始をもう一度試すことができる。
キャプチャ フォーカスを適正に処理するには、ゲーム アプリケーションで、DVSOUNDDEVICECONFIG 構造体の hwndAppWindow パラメータを、ゲームの実行中にフォーカスを持つウィンドウ ハンドルに設定する必要がある。この結果、Connect を呼び出して DirectPlay Voice セッションを作成できるようになる。ゲーム アプリケーションでは次に、DVMSGID_LOSTFOCUS メッセージと DVMSGID_GAINFOCUS メッセージを処理する必要がある。
詳細については、「フォーカス キャプチャの実装」を参照すること。