1.構成
図1に本実施形態のゲーム機の機能ブロック図を示す。なお本実施形態のゲーム機は図1の構成要素(各部)の一部を省略した構成としてもよい。
操作部160は、プレーヤがプレーヤキャラクタ(プレーヤが操作するプレーヤキャラクタ、移動体、プレーヤオブジェクト、ゲームキャラクタを含む)の操作情報を入力するためのものであり、その機能は、レバー、ボタン、ステアリング、マイク、タッチパネル型ディスプレイ、或いは筺体などにより実現できる。
記憶部170は、処理部100や通信部196などのワーク領域となるもので、その機能はRAM(VRAM)などにより実現できる。特に、本実施形態の記憶部170は、主記憶部172、描画バッファ174、第1のバッファ176、第2のバッファ178を有している。
なお、本実施形態の第1のバッファ176及び、第2のバッファ178には、ゲームデータを入力する。第1のバッファ176は、自機において操作情報を検出した検出結果を含むゲームデータが入力される。また、第2のバッファ178は、受信した他のゲーム機のゲームデータが入力される。
情報記憶媒体180(コンピュータにより読み取り可能な媒体)は、プログラムやデータなどを入力するものであり、その機能は、光ディスク(CD、DVD)、光磁気ディスク(MO)、磁気ディスク、ハードディスク、磁気テープ、或いはメモリ(ROM)、メモリカードなどにより実現できる。処理部100は、情報記憶媒体180に入力されるプログラム(データ)に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体180には、本実施形態の各部としてコンピュータを機能させるためのプログラム(各部の処理をコンピュータに実行させるためのプログラム)が記憶される。
表示部190は、本実施形態により生成された画像を出力するものであり、その機能は、CRT、LCD、タッチパネル型ディスプレイ、或いはHMD(ヘッドマウントディスプレイ)などにより実現できる。音出力部192は、本実施形態により生成された音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどにより実現できる。
通信部196は外部(例えば、他のゲーム機、サーバや他のゲームシステム)との間で通信を行うための各種制御を行うものであり、その機能は、各種プロセッサ又は通信用ASICなどのハードウェアや、プログラムなどにより実現できる。
なお、ゲーム機が、本実施形態の各部としてコンピュータを機能させるためのプログラム(データ)を、ネットワークを介してサーバからダウンロードし、情報記憶媒体180に記憶するようにしてもよい。このようなサーバに入力されているプログラムの出力も本発明の範囲内に含めることができる。
処理部100(プロセッサ)は、操作部160からの操作情報(操作データ)やプログラムなどに基づいて、ゲーム演算処理、画像生成処理、或いは音生成処理などの処理を行う。ここでゲーム処理としては、ゲーム開始条件が満たされた場合にゲームを開始する処理、ゲームを進行させる処理、キャラクタやマップなどのオブジェクトを配置する処理、オブジェクトを表示する処理、ゲーム結果を演算する処理、或いはゲーム終了条件が満たされた場合にゲームを終了する処理などがある。この処理部100は記憶部170内の主記憶部172をワーク領域として各種処理を行う。処理部100の機能は各種プロセッサ(CPU、DSP等)、ASIC(ゲートアレイ等)などのハードウェアや、プログラムにより実現できる。
処理部100は、ゲーム演算部110、ネットワーク設定部114、通信制御部115、バッファ制御部116、特定期間検出部117、入力情報制御部118、描画部120、音生成部130を含む。なおこれらの一部を省略する構成としてもよい。
本実施形態のゲーム演算部110は、第1のバッファから出力されたゲームデータと、第2のバッファから出力されたゲームデータとに基づいて、フレーム毎にゲーム演算を行う。
また、本実施形態のゲーム演算部110は、第1のバッファから出力されたゲームデータと第2のバッファから出力されたゲームデータとに基づいて、自機を使用するプレーヤの操作対象の第1のプレーヤキャラクタと、他のゲーム機を使用するプレーヤの操作対象の第2のプレーヤキャラクタとを動作させるゲーム演算を行うようにしてもよい。
また、本実施形態のゲーム演算部110が、第1のバッファから出力されたゲームデータ及び第2のバッファから出力されたゲームデータの少なくとも一方に基づいて、特定のイベントを発動させるゲーム演算を行うことができる。
また、本実施形態のゲーム演算部110は、バッファから出力された複数のゲームデータに基づいて、フレーム毎にゲーム演算を行ってもよい。例えば、所定のゲームデータのパターンに一定した場合には、プレーヤキャラクタに対して特殊な動作(例えば、投げ技)を行うような動作・演算を行うようにしてもよい。
また、本実施形態のゲーム演算部110は、オブジェクト空間設定部111、仮想カメラ制御部112、移動・動作処理部113とを含む。なおこれらの一部を省略する構成としてもよい。
オブジェクト空間設定部111は、プレーヤキャラクタ、移動体、建物、球場、車、樹木、柱、壁、マップ(地形)などの表示物を表す各種オブジェクト(ポリゴン、自由曲面又はサブディビジョンサーフェスなどのプリミティブで構成されるオブジェクト)をオブジェクト空間に配置設定する処理を行う。即ちワールド座標系でのオブジェクトの位置や回転角度(向き、方向と同義)を決定し、その位置(X、Y、Z)にその回転角度(X、Y、Z軸回りでの回転角度)でオブジェクトを配置する。
仮想カメラ制御部112は、オブジェクト空間内の所与(任意)の仮想カメラ(視点)から見える画像を生成するための仮想カメラの制御処理を行う。具体的には、仮想カメラの位置(X、Y、Z)又は回転角度(X、Y、Z軸回りでの回転角度)を制御する処理(視点位置、視線方向あるいは画角を制御する処理)を行う。また、画角を制御するようにしてもよい。
例えば仮想カメラによりオブジェクト(例えば、プレーヤキャラクタ、ボール、車)を後方から撮影する場合には、オブジェクトの位置又は回転の変化に仮想カメラが追従するように、仮想カメラの位置又は回転角度(仮想カメラの向き)を制御する。この場合には、移動・動作処理部で得られたオブジェクトの位置、回転角度又は速度などの情報に基づいて、仮想カメラを制御できる。或いは、仮想カメラを、予め決められた回転角度で回転させたり、予め決められた移動経路で移動させる制御を行ってもよい。この場合には、仮想カメラの位置(移動経路)又は回転角度を特定するための仮想カメラデータに基づいて仮想カメラを制御する。なお、仮想カメラ(視点)が複数存在する場合には、それぞれの仮想カメラについて上記の制御処理が行われる。
移動・動作処理部113は、モデル(キャラクタ、車、電車又は飛行機等)の移動・動作演算(移動・動作シミュレーション)を行う。すなわち操作部160によりプレーヤが入力した操作データや、プログラム(移動・動作アルゴリズム)や、各種データ(モーションデータ)などに基づいて、モデルをオブジェクト空間内で移動させたり、オブジェクトを動作(モーション、アニメーション)させたりする処理を行う。具体的には、オブジェクトの移動情報(位置、回転角度、速度、或いは加速度)や動作情報(オブジェクトを構成する各パーツの位置、或いは回転角度)を、1フレーム(1/60秒)毎に順次求めるシミュレーション処理を行う。なおフレームは、オブジェクトの移動・動作処理(シミュレーション処理)や画像生成処理を行う時間の単位である。
特に、本実施形態の移動・動作処理部113は、プレーヤからの操作情報に基づいて、プレーヤの操作対象のプレーヤキャラクタを移動・動作させる処理を行うことができる。また、前述した通信制御部115において、取得したパケットに含まれる他のゲーム機のゲームデータに基づいて、他のゲーム機を使用する第2のプレーヤの操作対象の第2のプレーヤキャラクタを、自機を使用するプレーヤの操作対象となる第1のプレーヤキャラクタと同一のオブジェクト空間において移動・動作させる処理を行うことができる。
要するに、本実施形態の移動・動作処理部113は、第1のバッファから出力されたゲームデータに基づいて、自機を使用するプレーヤの操作対象の第1のプレーヤキャラクタを動作させる演算と、第2のバッファから出力されたゲームデータに基づいて、他のゲーム機を使用するプレーヤの操作対象の第2のプレーヤキャラクタを動作させる演算を行うことができる。
また、本実施形態の移動・動作処理部113は、入力情報制御部113aを含む。
本実施形態の入力情報制御部113aは、所与の期間におけるプレーヤからの入力情報を無効にする。例えば、入力情報制御部113aは、第1のプレーヤキャラクタと、第2のプレーヤキャラクタとが共に動作している期間における各プレーヤからの入力情報を無効にする。
また、本実施形態の入力情報制御部113aは、プレーヤキャラクタ毎に入力情報フラグを設定し、フレーム毎に入力情報フラグの値を更新して入力情報の有効/無効を制御する。より具体的に説明すると、プレーヤキャラクタが動作していない期間中の入力情報フラグの値を真(1)に設定し、プレーヤキャラクタが動作している期間中の入力情報フラグの値を偽(0)に設定する。そして、プレーヤキャラクタ毎の入力情報フラグの値が偽である期間を、第1のプレーヤキャラクタと、第2のプレーヤキャラクタとが共に動作している期間として、各プレーヤからの入力情報を無効にする。
例えば、本実施形態の入力情報制御部113aは、入力情報フラグの初期値を真に設定する。そして、第1のプレーヤからの「右パンチ」の入力情報(ゲームデータ)に基づいて、第1のプレーヤキャラクタに「右パンチ」の動作をさせると判断すると、第1のプレーヤキャラクタに対応する入力情報フラグを偽に設定する。そして、「右パンチ」の動作期間(10フレーム分の期間)終了後に入力情報フラグを真に設定する。また、第1のプレーヤキャラクタと第2のプレーヤキャラクタとがヒットし、第2のプレーヤキャラクタが「右パンチ攻撃を受ける動作」を行うと判断すると、第2のプレーヤキャラクタに対応する入力情報フラグを偽に設定する。そして、「右パンチ攻撃を受ける動作」をさせる期間(例えば、10フレーム分の期間)終了後において、第2のプレーヤキャラクタに対応する入力情報フラグを真に設定する。
なお、本実施形態の入力情報制御部113aは、予めプレーヤからの入力情報の内容に応じたプレーヤキャラクタを動作させる期間を決定してもよい。例えば、「右パンチ」の動作期間を10フレーム、「右パンチ攻撃を受ける動作」の動作期間を10フレームの期間と決定する。また、プレーヤからの「投げ技」の入力情報に基づいて、「投げる」動作を行う場合には、「投げる」動作期間を60フレーム、「投げられる」動作期間を60フレームとして決定する。
また、入力情報制御部113aは、特定のイベントを発動させる期間における各プレーヤからの入力情報を無効にするようにしてもよい。例えば、格闘ゲームの場合には、プレーヤからの特定の操作情報(例えば、「必殺技」を行う操作情報)に基づいて、予め用意された特定のプログラムの実行によって特定のイベントを行う期間が300フレーム必要であると判断される場合には、300フレームの期間におけるプレーヤからの入力を無効にする。例えば、特定のプログラムの実行が開始された場合に、第1、第2のプレーヤキャラクタに対応する入力情報フラグを偽に設定し、特定プログラムの実行が終了された場合には、第1、第2のプレーヤキャラクタに対応する入力情報フラグを真に設定する。
なお、本実施形態の入力情報制御部113aは、第1、第2のプレーヤキャラクタのいずれか一方が動作していない期間を真に設定し、第1、第2のプレーヤキャラクタが共に動作している期間を偽に設定してもよい。
ネットワーク設定部114は、ゲームシステムで必要となるネットワーク情報を取得し、管理する処理等を行う。特に、本実施形態のネットワーク設定部は、各ゲーム機に個別に付与されるゲーム機識別情報(オンラインゲームに参加できるゲーム機を識別するために個別に付与されたデータ)と、ゲーム機識別情報に対応付けられたパケットの送信先を指定する宛先情報とを取得し、管理する処理を行う。
また、宛先情報とは、ゲームシステムを構成する各ゲーム機のIPアドレス、ポート番号とすることができる。IPアドレスは、インターネット上もしくはWANで特定のゲーム機を特定するためのグローバルIPアドレスとしてもよいし、LANで特定のゲーム機を特定するためのプライベートIPアドレスとしてもよい。
通信制御部115は、他のゲーム機(第2のゲーム機)に送信するパケットを生成する処理、パケット送信先のゲーム機のIPアドレスやポート番号を指定する処理、受信したパケットに含まれるデータを記憶部170に保存する処理、受信したパケットを解析する処理、その他のパケットの送受信に関する制御処理等を行う。
パケットとは、ネットワークを介して通信する固まりであり、送信元IPアドレス、送信先IPアドレスを含むネットワークに必要なヘッダーと、送信元において書き込まれたデータがペイロードとからなるデータのことをいう。
また、アプリケーションレベルの通信を実現するためには、使用するTCPやUDPプロトコルに応じたアプリケーションの種類を特定するポート番号を指定してパケットを生成する。例えば、TCPプロトコルは、データの送受信の信頼性が高く、例えば、確認応答や再送を利用している。また、TCPプロトコルは、紛失したデータの再送処理を行うことができ、さらにデータの送信順序を確保して送信先のゲーム機にパケットを送信することができる。一方、UDPプロトコルでは、送信の途中でデータを紛失しても再送されず、順番が入れ替わって伝送されることがある。しかし、UDPプロトコルは、TCPプロトコルに比べてオーバヘッドがないので、リアルタイムにデータを送信するオンラインゲームでは適している場合がある。UDPプロトコルを利用する場合には、バッファに入力するゲームデータが識別番号順(昇順)に入力するようにし、入力対象の識別番号のゲームデータが届いていない場合には、他のゲーム機に要求するようにしてもよい。本実施形態では、いずれのプロトコルにも対応することができる。なお、UDPプロトコルを利用する場合には、バッファへのゲームデータの入力順序を識別情報(識別番号)の昇順に入力するように制御するようにしてもよい。
本実施形態の通信制御部115は、画像を描画するフレームレートに応じてパケットを生成し、接続先の第2のゲーム機に生成したパケットを送信する処理を行う。具体的に説明すると、例えば、フレームレートが60fpsである場合には、1/60秒毎に、パケットのヘッダーの送信先IPアドレスと送信先ポート番号に、第2のゲーム機のIPアドレスと使用するポート番号指定し、ヘッダーの送信元のIPアドレスと送信元ポート番号に、第1のゲーム機のIPアドレスと使用するポート番号を指定して、ゲームデータを含むデータをパケットのペイロードに入力し、生成したパケットを第2のゲーム機に送信する処理を行う。なお、送信したゲームデータは、後述するバッファ制御部116において、所与の条件下、第1のバッファ176に入力される。
ここで、ゲームデータとは、フレーム毎にゲーム機を操作するプレーヤからの入力情報(操作情報も含む)を検出した検出結果を含むデータである。例えば、ゲームデータは、操作情報の有無や、操作情報が有る場合には操作情報の内容を示したデータとすることができる。例えば、ゲームエータを数値で示す場合には、操作情報が無い場合はゲームデータを「0」とし、操作情報があってその内容が「右方向」ボタンの入力である場合にはゲームデータを「1」、操作情報があってその内容が「左方向」ボタンの入力である場合にはゲームデータを「2」とすることができる。
また、ここで、識別情報とは、フレーム毎に付与される複数のゲーム機(第1、第2のゲーム機)において共通のデータである。本実施形態では、第1のゲーム機と第2のゲーム機との接続が確立されたときを基準に、経過時間を応じてフレーム毎に付与される情報とすることができる。例えば、ゲーム機において、フレームレートに応じて取得したゲームデータに対応付けるシーケンシャルな識別番号(0から始まる正の整数)とすることができる。
また、本実施形態では、複数のゲーム機それぞれにおいて(第1のゲーム機と第2のゲーム機それぞれにおいて)、共通の識別情報を使用している。
例えば、フレームレートが60fpsである場合を考えると、1/60毎に取得したゲームデータに、識別情報を対応付ける。例えば、第1のゲーム機と第2のゲーム機それぞれにおいて、接続が確立された時点に取得したゲームデータには、識別番号「0」を対応付けし、接続確立時から1/60秒後に取得したゲームデータには、識別番号「1」を対応付けし、接続確立時から2/60秒後に取得したゲームデータには、識別番号「2」を対応付けする。
また、本実施形態の通信制御部115は、第2のゲーム機から送信されたパケットを受信する処理を行う。そして、受信したパケットを解析し、パケットのペイロードに含まれるゲームデータを含むデータを取得する。そして、受信したゲームデータは、後述するバッファ制御部116において、第2のバッファ178に入力される。
また本実施形態の通信制御部115は、複数のゲーム機間においての接続(第1のゲーム機と第2のゲーム機との接続)が確立されてから接続が切断されるまで、ゲームデータを互いに送受信する処理を行うことができる。
また、本実施形態の通信制御部115は、自機が通信グループの親機として機能する場合には、削除対象の識別情報を、通信グループの子機にネットワークを介して送信することができる。一方、自機が通信グループの子機として機能する場合には、親機から送信された削除対象の識別情報を、ネットワークを介して受信する処理とを行うことができる。
なお、本実施形態のゲームに参加する通信グループに所属する複数のゲーム機のうち、1つのゲーム機を親機として特定することができる。親機は、ゲーム空間を生成したゲーム機としてもよいし、勝者と挑戦者との対戦ゲームである場合には、勝者側のゲーム機としてもよい。
また、本実施形態の通信制御部115は、第1のバッファに入力されているゲームデータの蓄積量が、第2のバッファに入力されているゲームデータの蓄積量よりも所定差分量多い場合に、ゲームデータの送信を制限するようにしてもよい。なお、第1のバッファに入力されているゲームデータの蓄積量及び第2のバッファに入力されているゲームデータの蓄積量それぞれが所定蓄積量を超えるまで、ゲームデータの送信を制限するようにしてもよい。なお、後述する特定期間に、ゲームデータの送信を制限する処理を行うようにしてもよい。
ここで、ゲームデータの送信を制限するとは、自機が他のゲーム機にゲームデータを送信する処理を一時的、永続的に停止することを含む。また、ゲームデータの送信を制限するとは、自機において、「ゲームデータ」を含めないパケット(ゲームデータ以外のデータを含むパケット)を生成し、生成したパケットを他のゲーム機に送信する場合も含む。
また、本実施形態の通信制御部115は、第1のバッファに入力されているゲームデータの蓄積量が、第2のバッファに入力されているゲームデータの蓄積量よりも多く、第1のバッファに入力されているゲームデータの蓄積量と、第2のバッファに入力されているゲームデータの蓄積量との差分量が所定差分量以上ある場合には、第1のバッファに入力されているゲームデータの蓄積量と第2のバッファに入力されているゲームデータの蓄積量との差分量が適正差分量に達するまで、ゲームデータの送信を制限する処理を行うようにしてもよい。
本実施形態のバッファ制御部116は、第1のバッファ176、第2のバッファ178のゲームデータの入出力する処理を行う。
また、本実施形態のバッファ制御部116は、自機のゲームデータを第1のバッファに入力し、他のゲーム機のゲームデータを第2のバッファに入力する処理とを行う。
また、本実施形態のバッファ制御部116は、第1のバッファに入力されている最先のゲームデータに対応する識別情報と、第2のバッファに入力されている最先のゲームデータに対応する識別情報とが一致する場合に、最先のゲームデータを第1のバッファから出力すると共に、最先のゲームデータを第2のバッファから出力する処理とを行う。つまり、本実施形態のバッファ制御部116は、第1のバッファ176、第2のバッファ178に入力(格納)されているゲームデータは、同期処理を行うために、第1のバッファ176に入力されているゲームデータの識別情報と、第2のバッファ178に入力されているゲームデータの識別情報とが一致していることを条件に、識別番号の昇順(小さい順)に出力される。
特に、ゲーム機が通信グループの親機である場合には、本実施形態のバッファ制御部116は、第1のバッファ176に入力されているゲームデータの蓄積量と、第2のバッファ178に入力されているゲームデータの蓄積量とが、所定蓄積量を超えたか否かを判断し、所定蓄積量を超えていると判断される場合には、第1のバッファ176及び第2のバッファ178に入力されているゲームデータを削除する処理を行う。
ここで、第1、第2のバッファに入力されているゲームデータを削除するとは、第1、第2のバッファに記憶されているゲームデータを出力せずに、削除(消去、クリア)することをいう。
具体的に説明すると、第1のバッファに入力されているゲームデータの蓄積量、第2のバッファに入力されているゲームデータの蓄積量それぞれが所定蓄積量を超えた場合に、第1のバッファに入力されているゲームデータを削除すると共に、第2のバッファに入力されているゲームデータを削除する。なお、かかる場合には、上述した通信制御部115において、削除対象のゲームデータに対応する識別情報を、パケットのペイロードに含めて、第2のゲーム機(子機)送信する処理を行う。
また、ゲームデータの蓄積量とは、バッファへの入力、出力を行うゲームデータを1つの単位とした場合に、バッファに入力されている(格納されている)ゲームデータの量をいう。
また、本実施形態のバッファ制御部116は、第1のバッファ及び第2のバッファに入力されているゲームデータの蓄積量が所定蓄積量を超えた場合に、第1のバッファに入力されているゲームデータを削除すると共に、第2のバッファに入力されているゲームデータを削除することができる。また、第1のバッファに及び第2のバッファに既に入力されているゲームデータの蓄積量よりも少ない量のゲームデータを削除するようにしてもよい。
また本実施形態のバッファ制御部116は、特定期間検出部117において検出された、プレーヤからの入力情報を無効にする特定期間中に、第1、第2のバッファに入力されたゲームデータを削除してもよい。
つまり、本実施形態のバッファ制御部116は、後述する特定期間検出部117から、特定期間の開始フレームの通知を受け取ると、第1、第2のバッファへの入力を制限する処理を開始することができる。
また、バッファ制御部116は、上述した通信制御部110において、送信を制限したゲームデータについて、第1のバッファへの入力を制限するようにしてもよい。かかる場合には、上述したように特定期間に、第1のバッファへのゲームデータの入力を制限するようにしてもよい。
ここで、第1のバッファへのゲームデータを入力する処理とは、ゲームデータを第1のバッファの記憶領域に記憶(登録)することをいう。そして、第1のバッファへのゲームデータの入力を制限する処理とは、ゲームデータを第1のバッファに記憶(登録)させない処理をいう。また、第1のバッファへのゲームデータの入力を制限する処理とは、ゲームデータを第1のバッファに記憶させずに、削除する処理も含み、ゲームデータを第1のバッファに記憶させずに、他の記憶領域に記憶させることも含む。
特定期間検出部117は、プレーヤからの入力情報を無効にする特定期間を検出する。
ここで、プレーヤからの入力情報を無効にするとは、プレーヤからの入力情報に基づいてゲーム演算を行わないことをいう。要するに、プレーヤからの入力情報を無効にするとは、プレーヤからの入力情報がゲーム演算に用いられないことをいう。
本実施形態の特定期間検出部117は、入力情報制御部113aにおいて、プレーヤキャラクタ毎に設定された入力情報フラグに基づいて、特定期間を検出する。例えば、入力情報制御部113aにおいて、プレーヤキャラクタ毎に用意された入力情報フラグを参照する。
本実施形態の特定期間検出部117は、フレーム毎に、各プレーヤキャラクタに対応する入力情報フラグを参照する。そして、特定期間検出部117は、第1、第2のプレーヤキャラクタの入力情報フラグの少なくとも一方が真である状況から、第1、第2のプレーヤキャラクタの入力情報フラグが共に偽になったフレームを、特定期間の開始フレームとして、バッファ制御部116に通知する。
そして、特定期間検出部117は、第1、第2のプレーヤキャラクタの入力情報フラグの少なくとも一方が真に変化した後、再度、第1、第2のプレーヤキャラクタの入力情報フラグが共に偽になったフレームを、特定期間の開始フレームとして、バッファ制御部116に通知する。
なお、特定期間検出部117は、入力情報制御部113aにおいて、入力情報フラグを、第1、第2のプレーヤキャラクタのいずれか一方が動作していない期間を真に設定し、第1、第2のプレーヤキャラクタが共に動作している期間を偽に設定してる場合には、入力情報フラグが偽から真になったフレームを、特定期間の開始フレームとして、バッファ制御部116に通知する。そして、入力情報フラグが真から偽になった後に、再度、入力情報フラグが偽になったフレームを、特定期間の開始フレームとして、バッファ制御部116に通知する。
描画部120は、処理部100で行われる種々の処理(ゲーム処理)の結果に基づいて描画処理を行い、これにより画像を生成し、表示部190に出力する。いわゆる3次元ゲーム画像を生成する場合には、まずオブジェクト(モデル)の各頂点の頂点データ(頂点の位置座標、テクスチャ座標、色データ、法線ベクトル或いはα値等)を含むオブジェクトデータ(モデルデータ)が入力され、入力されたオブジェクトデータ(モデルデータ)に含まれる頂点データに基づいて、頂点処理(頂点シェーダによるシェーディング)が行われる。なお頂点処理を行うに際して、必要に応じてポリゴンを再分割するための頂点生成処理(テッセレーション、曲面分割、ポリゴン分割)を行うようにしてもよい。頂点処理では、頂点処理プログラム(頂点シェーダプログラム、第1のシェーダプログラム)に従って、頂点の移動処理や、座標変換(ワールド座標変換、カメラ座標変換)、クリッピング処理、あるいは透視変換等のジオメトリ処理が行われ、その処理結果に基づいて、オブジェクトを構成する頂点群について与えられた頂点データを変更(更新、調整)する。そして、頂点処理後の頂点データに基づいてラスタライズ(走査変換)が行われ、ポリゴン(プリミティブ)の面とピクセルとが対応づけられる。そしてラスタライズに続いて、画像を構成するピクセル(表示画面を構成するフラグメント)を描画するピクセル処理(ピクセルシェーダによるシェーディング、フラグメント処理)が行われる。ピクセル処理では、ピクセル処理プログラム(ピクセルシェーダプログラム、第2のシェーダプログラム)に従って、テクスチャの読出し(テクスチャマッピング)、色データの設定/変更、半透明合成、アンチエイリアス等の各種処理を行って、画像を構成するピクセルの最終的な描画色を決定し、透視変換されたオブジェクトの描画色を描画バッファ174(ピクセル単位で画像情報を記憶できるバッファ。VRAM、レンダリングターゲット)に出力(描画)する。すなわち、ピクセル処理では、画像情報(色、法線、輝度、α値等)をピクセル単位で設定あるいは変更するパーピクセル処理を行う。これにより、オブジェクト空間内において仮想カメラ(所与の視点)から見える画像が生成される。なお、仮想カメラ(視点)が複数存在する場合には、それぞれの仮想カメラから見える画像を分割画像として1画面に表示できるように画像を生成することができる。
なお頂点処理やピクセル処理は、シェーディング言語によって記述されたシェーダプログラムによって、ポリゴン(プリミティブ)の描画処理をプログラム可能にするハードウェア、いわゆるプログラマブルシェーダ(頂点シェーダやピクセルシェーダ)により実現される。プログラマブルシェーダでは、頂点単位の処理やピクセル単位の処理がプログラム可能になることで描画処理内容の自由度が高く、従来のハードウェアによる固定的な描画処理に比べて表現力を大幅に向上させることができる。
そして描画部120は、オブジェクトを描画する際に、ジオメトリ処理、テクスチャマッピング、隠面消去処理、αブレンディング等を行う。
ジオメトリ処理では、オブジェクトに対して、座標変換、クリッピング処理、透視投影変換、或いは光源計算等の処理が行われる。そして、ジオメトリ処理後(透視投影変換後)のオブジェクトデータ(オブジェクトの頂点の位置座標、テクスチャ座標、色データ(輝度データ)、法線ベクトル、或いはα値等)は、オブジェクトデータ記憶部176に保存される。
テクスチャマッピングは、記憶部170のテクスチャ記憶部に記憶されるテクスチャ(テクセル値)をオブジェクトにマッピングするための処理である。具体的には、オブジェクトの頂点に設定(付与)されるテクスチャ座標等を用いて記憶部170のテクスチャ記憶部からテクスチャ(色(RGB)、α値などの表面プロパティ)を読み出す。そして、2次元の画像であるテクスチャをオブジェクトにマッピングする。この場合に、ピクセルとテクセルとを対応づける処理や、テクセルの補間としてバイリニア補間などを行う。
隠面消去処理としては、描画ピクセルのZ値(奥行き情報)が入力されるZバッファ(奥行きバッファ)を用いたZバッファ法(奥行き比較法、Zテスト)による隠面消去処理を行うことができる。すなわちオブジェクトのプリミティブに対応する描画ピクセルを描画する際に、Zバッファに入力されるZ値を参照する。そして参照されたZバッファのZ値と、プリミティブの描画ピクセルでのZ値とを比較し、描画ピクセルでのZ値が、仮想カメラから見て手前側となるZ値(例えば小さなZ値)である場合には、その描画ピクセルの描画処理を行うとともにZバッファのZ値を新たなZ値に更新する。
αブレンディング(α合成)は、α値(A値)に基づく半透明合成処理(通常αブレンディング、加算αブレンディング又は減算αブレンディング等)のことである。
なお、α値は、各ピクセル(テクセル、ドット)に関連づけて記憶できる情報であり、例えば色情報以外のプラスアルファの情報である。α値は、マスク情報、半透明度(透明度、不透明度と等価)、バンプ情報などとして出力できる。
音生成部130は、処理部100で行われる種々の処理の結果に基づいて音処理を行い、BGM、効果音、又は音声などのゲーム音を生成し、音出力部192に出力する。
2.本実施形態の手法
図2は、本実施形態のゲームシステムの一例を示す。本実施形態のゲームシステムでは、オンラインゲームに参加する各ゲーム機が、インターネットを介して相互に直接通信して、データを共有することができるピア・ツー・ピア方式のゲームシステムを採用する。また、本実施形態は、オンラインゲームに参加するプレーヤの操作対象のプレーヤキャラクタが同一のゲーム空間(オブジェクト空間)に存在してゲームが進行されるゲームシステムである。
つまり、本実施形態では、第1のゲーム機、第2のゲーム機の相互間において、ゲーム機を操作するプレーヤからの操作情報(入力情報の一例)の検出結果であるゲームデータを送受信する処理を行い、ゲーム演算を行う。
例えば、第1のゲーム機は、第1のゲーム機のゲームデータに基づいて、第1のプレーヤキャラクタ(第1のゲーム機を使用するプレーヤ1の操作対象のプレーヤキャラクタ)の移動・動作演算等のゲーム演算を行い、第1のゲーム機のゲームデータを、ネットワークを介して第2のゲーム機へ送信する処理を行う。そして、第1のゲーム機は、ネットワークを介して受信した第2のゲーム機のゲームデータに基づいて、第2のプレーヤキャラクタ(第2のゲーム機を出力する第2のプレーヤの操作対象のプレーヤキャラクタ)の移動・動作演算等のゲーム演算を行う。第2のゲーム機においても、第1のゲーム機と同様にゲーム演算処理を行う。
2.1 同期処理
本実施形態は、同期処理を図るために、第1のゲーム機、第2のゲーム機それぞれが、ゲームデータを、フレーム毎に付与される共通の識別番号に対応付けて、互いに送受信することによって、ゲームを進行させる。
すなわち、本実施形態は、第1のゲーム機、第2のゲーム機それぞれが、共通の識別番号を、自機において取得したゲームデータに対応付けて(付与して)、ゲームデータを送受信する。そして、自機のゲームデータの識別番号と、他のゲーム機のゲームデータの識別番号が一致することを条件に、自機のゲームデータと、他のゲーム機のゲームデータとに基づいてゲーム演算を行う。
より具体的に説明すると、まず、各ゲーム機において、画像を描画するフレームレートと同じ周期で、ゲームデータを取得する。そして取得したゲームデータに識別番号を付与する。すなわち、描画フレームレートが60fpsのフレームレートである場合には、第1のゲーム機と第2のゲーム機との接続が確立した時点を基準に、1/60毎に取得したゲームデータに、「0」、「1」、「2」、「3」、「4」・・・と、シーケンシャルに正の整数からなる識別番号を対応付けていく。なお、同じタイミングで取得したゲームデータを用いて正確に同期処理を行うために、第1、第2のゲーム機共に、同じ描画フレームレート(例えば、60fps)に設定することが望ましい。以下の説明では、第1のゲーム機、第2のゲーム機共に、描画のフレームレートを60fpsに設定した際の説明である。
そして、自機の第1のバッファに、識別番号を対応付けたゲームデータを入力する処理を行うと共に、識別番号を対応付けたゲームデータを、他のゲーム機に送信する処理を行う。
なお、「接続が確立した時点」とは、第1のゲーム機においては、第2のゲーム機に対する接続要求に対する確認応答を得たときであって、第2のゲーム機においても、第1のゲーム機に対する接続要求に対する確認応答を得たときである。なお、絶対時間軸に対して第1のゲームにおける「接続が確立した時点」と、ゲーム機2における「接続が確立した時点」とにおいて僅かな誤差があってもよい。
次に、他のゲーム機から送信されたゲームデータを受信した際の処理について説明すると、自機は、受信した識別番号に対応付けられた他のゲーム機のゲームデータを、第2のバッファに入力する処理を行う。つまり、第1のゲーム機は、第2のゲーム機から送信された識別番号に対応付けられたゲームデータを、第2のバッファに入力する処理を行い、第2のゲーム機は、第1のゲーム機から送信された識別番号に対応付けられたゲームデータを第2のバッファに入力する処理を行う。
また、本実施形態は、識別番号が一致していることを条件に、第1のバッファに入力されている最先のゲームデータと、第2のバッファに入力されている最先のゲームデータとを出力する処理を行う。
そして、第1のバッファから出力したゲームデータに基づいて第1のプレーヤキャラクタの移動・動作演算等のゲーム演算を行い、第2のバッファから出力したゲームデータに基づいて第2のプレーヤキャラクタの移動・動作演算等のゲーム演算を行う。
図3を用いて、第1のゲーム機の第1のバッファ、第2のバッファのゲームデータの入出力処理を例にとり具体的に説明する。
まず、第1のゲーム機は、自機のゲームデータ「左キック」に、識別番号「104」を対応づけて第1のバッファに入力する処理を行う。そして、第2のゲーム機から受信した、識別番号「103」に対応づけられたゲームデータ「後退」を、第2のバッファに入力する処理を行う。そして、第1のバッファに入力されている最先の識別番号は「101」であり、第2のバッファに入力されている最先の識別番号「101」であり、互いに一致する番号であるので、第1のバッファから、識別番号「101」に対応するゲームデータ「右キック」を出力すると共に、第2のバッファにから、識別番号「101」に対応するゲームデータ「操作なし」を出力する処理を行う。
そして、本実施形態では、出力されたゲームデータ「右キック」に基づいて、第1のプレーヤキャラクタを移動・動作させる演算を行い、ゲームデータ「操作なし」に基づいて、第2のプレーヤキャラクタを移動・動作させる演算を行う。また、本実施形態では、複数の出力されたゲームデータに基づいてプレーヤキャラクタに対して特殊な動作(例えば、投げ技等)させる演算を行うことができる。
このように、本実施形態では、第1、第2のバッファはFIFO(First In,First Out)(先入れ先出し)によって行われる。要するに、第1、第2のバッファに、最初に入力したゲームデータから出力する。
このように、本実施形態では、ネットワークを介して接続された複数のゲーム機がオンラインゲームを行う場合であっても、第1のゲーム機を操作するプレーヤ、第2のゲーム機を操作するプレーヤが、同じタイミングで操作した操作情報に基づいて、それぞれのプレーヤが操作する対象のプレーヤキャラクタを移動・動作させることができ、ゲームの進行に支障なく同期を図ってゲームを進行させることができる。
2.2 第1、第2のバッファへに入力されているゲームデータを削除する手法
上述したように、本実施形態は、同期処理を行うために、第1のバッファ、第2のバッファの最も小さい識別番号が一致したゲームデータを順次出力する。しかし、通信負荷やゲーム機の処理負荷が増大することによって、ゲームデータの第1、第2バッファへの入出力が滞り、ゲームデータが次々と蓄積されてしまう場合が発生する。ゲームデータが蓄積されてしまうと、プレーヤが操作した操作情報が、ゲームに反映されるまでの時間が長くなってしまう。つまり、プレーヤがコントローラを用いて操作情報を入力したとしても、その操作に対するゲームへのレスポンスが悪くなってしまう。その結果、プレーヤに不快感を与えてしまうことになる。
例えば、図4に示すように、第1のバッファには、識別番号101〜106に対応付けられたゲームデータが入力されており、第2のバッファには、識別番号101〜105に対応付けられたゲームデータが入力されている。かかる場合には、プレーヤが「右パンチ」の操作を行った場合には、ゲームデータ「右パンチ」が、第1のバッファに入力されてから出力されて、ゲームに反映されるまでには、識別番号101〜106に対応するゲームデータの処理時間を少なくとも要することになる。
このような問題を解消するために、本実施形態では、第1のバッファに入力されている蓄積量と、第2のバッファに入力されている蓄積量とが、共に所定蓄積量を超えた場合に、第1のバッファ、第2のバッファに入力されているゲームデータを削除する手法を採用している。このようにすれば、プレーヤからの操作をゲームに直ぐに反映させることができるからである。
例えば、本実施形態は、所定蓄積量を「4」に設定し、第1のバッファ、第2のバッファに入力されている蓄積量が所定蓄積量「4」を超えている場合に、第1、第2のバッファに入力されているゲームデータを削除する。所定蓄積量を「4」と設定した理由は、プレーヤの感覚にもよるが、入力した操作がゲームに反映されるまでに、4フレーム分の時間(4/60秒)を超えると不快に感じる恐れがあるからである。
そして、本実施形態では、第1のバッファに入力されている蓄積量と、第2のバッファに入力されている蓄積量とが、共に所定蓄積量を超えた場合に、第1、第2のバッファの両方において入力されているゲームデータを削除する対象の識別番号を決定する。
本実施形態は、ゲームデータを削除する対象の識別番号を決定する処理を、親機で行い、決定された識別番号を、親機が子機に送信している。例えば、第1のゲーム機を親機とし、第2のゲーム機を子機とした場合を具体的に説明する。
なお、親機が、ゲームデータの削除対象の識別番号を決定することにしたのは、子機においてもゲームデータの削除対象の識別番号を決定する処理を行うと、親機と子機とにおいて互いに異なる識別番号を決定する可能性があり、削除対象のゲームデータが異なることになると、ゲーム進行に支障が生じる恐れがあるからである。例えば、親機が、110〜113を削除対象の識別番号として決定し、子機が111〜114を削除対象の識別番号として決定した場合には、親機は、子機から送信されることのない114に対応するゲームデータの受信待ち状態が続いてしまい、ゲームの進行が停止してしまい、同様に、子機においては、親機から送信されることのない110に対応するゲームデータの受信待ち状態が続き、ゲームの進行が停止してしまうからである。
まず、第1のゲーム機は、描画のフレームレート(60fps)に応じて、第1、第2バッファの蓄積量を参照する。そして、第1のバッファに入力されている蓄積量と、第2のバッファに入力されている蓄積量とが、共に所定蓄積量を超えたか否かを判断し、超えている場合には、ゲームデータを削除する必要があると判断される。
本実施形態では、第1のバッファに入力されている蓄積量と、第2のバッファに入力されている蓄積量とが、共に所定蓄積量を超えたか否かを判断は、描画のフレームレートに応じて、バッファの入出力処理を行う直前に行う。なお、バッファの入出力の直後に判断してもよい。
例えば、図4の例では、第1のゲーム機において、識別番号「107」に対応付けられたゲームデータを入力する直前の状態であり、識別番号「101」を出力する直前の状態の第1、第2のバッファの状態を示す。この状態において、本実施形態では、第1のゲーム機の第1のバッファの蓄積量は「6」であり、第2のバッファの蓄積量は「5」である。したがって、第1のバッファに入力されている蓄積量と、第2のバッファに入力されている蓄積量とが、所定蓄積量「4」を超えているので、ゲームデータを削除する必要があると判断する。
そして、ゲームデータを削除する必要があると判断される場合には、具体的に削除対象のゲームデータの識別番号を決定する。
本実施形態では、第1、第2のバッファに既に入力されているゲームデータを削除する。したがって、本実施形態では、例えば、図4に示すように、既に、第1、第2のバッファに入力されている「101」〜「106」の識別番号に対応するゲームデータを削除する。
なお、本実施形態では、子機に、削除対象のゲームデータを通知する時間を考慮すると、第1、第2のバッファに入力されているゲームデータのうち、識別番号の降順(番号の大きい順に)に、削除対象のゲームデータを決定することが望ましい。
また、第1、第2のバッファの双方のゲームデータを削除する理由は、一方のバッファのみについてゲームデータを削除しようとすると、他方のバッファはゲームデータが順次入力されることになり、識別番号の一致が図れずにゲームデータの出力が滞ることになる。したがって、本実施形態では、ゲームの進行を図るために、第1、第2の双方のバッファについて同一の識別番号のゲームデータを削除する。
さらに、本実施形態では、第1のバッファ、第2のバッファに既に入力されているゲームデータの蓄積量よりも少ない量のゲームデータを削除する。例えば、第1、第2のバッファは、蓄積量が所定蓄積量「4」を超えていると判断されているので、第1、第2のバッファの蓄積量よりも確実に少ない量のゲームデータ量「4」のゲームデータを削除する。理由は、既に入力されているバッファの蓄積量以上の量のゲームデータの入力を制限すると、逆に、バッファ入力の処理待ち状態が続いてしまい、結果的にゲームが進行しなくなるからである。
次に、第1、第2バッファ双方に入力されている識別番号「102」、「103」、「104」、「105」を、削除対象の識別番号として決定し、図5を用いて、第1のゲーム機における第1のバッファ、及び第2のバッファにおけるゲームデータの状況について1/60毎に時間軸に沿って説明する。
まず、T1時点において、第1、第2のバッファ双方において、削除対象の識別番号「102」、「103」、「104」、「105」が削除される。そして、第1のバッファにおいて、「107」に対応するゲームデータが入力され、「101」に対応するゲームデータが出力される。また、第2のバッファにおいて、「106」に対応するゲームデータが入力され、「107」に対応するゲームデータが出力される。
このように、本実施形態では、第1、第2のバッファのゲームデータの削除を行うことによって、第1、第2のバッファの蓄積量を少なくすることができる。その結果、第1、第2のバッファに入力されたゲームデータをゲームに反映させるまでの時間を短縮させることができ、操作のレスポンスを改善することができる。つまり、プレーヤはオンラインゲームにおいても、レスポンスが遅いことによるストレスを感じることなく快適にゲームを行うことができる。
なお、親機である第1のゲーム機は、図6に示すように、ゲームデータの削除対象の識別番号を子機である第2のゲーム機に送信するようにする。例えば、第1のゲーム機にフレームレートに応じて周期的に送信するパケットのペイロードに、削除対象の識別番号「102」、「103」、「104」、「105」、を含むようにパケットを生成し、生成したパケットを、第2のゲーム機に送信する。
また、子機である第2のゲーム機は、第1のゲーム機から削除対象の識別番号を受信した場合には、削除対象の識別番号に対応する(第2のゲーム機の)ゲームデータを第1のバッファから削除し、削除対象の識別番号に対応する(第1のゲーム機の)ゲームデータを第2のバッファから削除する処理を行う。
なお、本実施形態は、第1、第2のゲーム機間において、削除対象の識別番号を互いに確認してから、削除対象の識別番号に対応するゲームデータを削除するようにしてもよい。
例えば、第1のゲーム機が、第2のゲーム機に対して、削除対象の識別番号「102」、「103」、「104」、「105」を送信する。そして、第2のゲーム機が、識別番号「102」、「103」、「104」、「105」に対応するゲームデータが、第1、第2のバッファから削除できると判断した場合には、第1のゲーム機に、削除を認可する応答パケットを送信する。そして、第1のゲーム機において、削除を認可する応答パケットを受信した場合に、第1のゲーム機において、識別番号「102」、「103」、「104」、「105」に対応するゲームデータを削除する処理を行い、第2のゲーム機において、識別番号「102」、「103」、「104」、「105」に対応するゲームデータを削除する処理を行うようにしてもよい。
また、本実施形態は、特定期間を検出し、特定期間中に入力されたゲームデータに対応する識別番号を、削除対象の識別番号として決定し、第1、第2のバッファに入力されているゲームデータを削除してもよい。このようにすれば、プレーヤに違和感なくゲームデータを削除することができるからである。
ここで、特定期間とは、プレーヤからの操作入力を無効にする期間のことをいう。つまり、特定期間とは、入力されたプレーヤからの操作が、ゲームに反映されない期間のことをいう。
特定期間の検出は、第1、第2のプレーヤキャラクタに設定される入力情報フラグを参照することによって検出することができる。入力情報フラグの値は、プレーヤキャラクタが動作している期間を真に設定し、動作していない期間を偽としてフレーム単位で更新される。
例えば、入力情報フラグの初期値を真に設定する。そして、第1のプレーヤからの「右パンチ」の入力情報(ゲームデータ)に基づいて、第1のプレーヤキャラクタに「右パンチ」の動作をさせると判断すると、第1のプレーヤキャラクタに対応する入力情報フラグを偽に設定する。そして、「右パンチ」の動作期間(10フレーム分の期間)終了後に入力情報フラグを真に設定する。また、第1のプレーヤキャラクタと第2のプレーヤキャラクタとがヒットし、第2のプレーヤキャラクタが「右パンチ攻撃を受ける動作」を行うと判断すると、第2のプレーヤキャラクタに対応する入力情報フラグを偽に設定する。そして、「右パンチ攻撃を受ける動作」をさせる期間(例えば、10フレーム分の期間)終了後において、第2のプレーヤキャラクタに対応する入力情報フラグを真に設定する。
そして、第1、第2のプレーヤキャラクタに設定された入力情報フラグに基づいて、特定期間を検出する。例えば、フレーム毎に、各プレーヤキャラクタに対応する入力情報フラグを参照し、第1、第2のプレーヤキャラクタの入力情報フラグの少なくとも一方が真である状況から、第1、第2のプレーヤキャラクタの入力情報フラグが共に偽になったフレームを、特定期間の開始フレームとして決定する。そして、第1、第2のプレーヤキャラクタの入力情報フラグの少なくとも一方が真に変化した後、再度、第1、第2のプレーヤキャラクタの入力情報フラグが共に偽になったフレームを、特定期間の開始フレームとして決定する。
本実施形態では、予め、プレーヤキャラクタの動作内容(例えば、「右パンチ」、「投げ技」)に対応づけて、動作させるフレーム数を決定している。したがって、特定期間の開始フレームが決定されると動作内容に応じて、特定期間のフレーム数を把握することができ、特定期間中に入力されたゲームデータに対応する識別番号を、削除対象の識別番号として決定し、第1、第2のバッファから削除する処理を行う。
例えば、第1のバッファから出力されたゲームデータに基づいて、10フレームかけて「右パンチ」の動作を行う場合における第1のバッファの状態を、図7(A)を用いて詳細に説明する。
例えば、10フレームかけて「右パンチ」の動作を行う期間のうちの8フレーム分の期間(T1〜T8時点)において第1のバッファから出力される識別番号101〜108それぞれに対応するゲームデータは、ゲーム演算に用いられずに、「右パンチ」の動作がゲームに反映される。要するに、識別番号101ゲームデータが「右キック」である場合には、「右キック」の内容はゲームに反映されず、無視される。また、T1〜T8時点において第1のバッファに入力される識別番号107〜114に対応するゲームデータは、第1のバッファから出力された場合に、ゲーム演算に用いられない。
このように、図7(A)の第1のバッファは、無駄なゲームデータが入出力されている。そこで、本実施形態は、第1のプレーヤキャラクタに対して「右パンチ」の動作を行う動作期間、第1のプレーヤキャラクタが第2のプレーヤキャラクタにヒットし、第2のプレーヤキャラクタに対して「右パンチの攻撃を受ける」動作が行われる動作期間の双方のプレーヤからの操作入力を無効にする特定期間を検出して、特定期間に入力されたゲームデータを削除する手法を採用している。
図7(B)を用いて、特定期間(T1〜T8時点)にゲームデータを削除する手法について、第1のバッファの状態について、詳細に説明する。
本実施形態では、特定期間中に入力されたゲームデータのうち、第1、第2のバッファの蓄積量よりも少ない量4(4フレーム分)のゲームデータを削除する。そして、入力されたゲームデータのうち識別番号107〜110それぞれに対応するゲームデータを削除する。
このようにすれば、識別番号107〜110それぞれに対応するゲームデータの無駄な入出力を回避しつつ、プレーヤに違和感を与えることなくゲームデータの蓄積量を抑えることができる。つまり、操作のレスポンスを改善することができる。なお、第2のバッファにおいても、識別番号107〜110それぞれに対応するゲームデータを削除する。
要するに、本実施形態では、図8に示すように、第1のバッファから出力されたゲームデータに基づいて、第1のプレーヤキャラクタに対して「右パンチ」の動作を行わせる期間と、第1のプレーヤキャラクタと第2のプレーヤキャラクタ「右パンチ」のヒットがあると判断された場合に、第2のプレーヤキャラクタに対して「右パンチの攻撃を受ける」動作を行わせる期間とが重複する期間が特定期間として検出され、第1、第2のバッファの蓄積量よりも少ない量の特定期間中に入力されたゲームデータについて削除を行っている。
なお、本実施形態では、第1のバッファ、第2のバッファから出力されたゲームデータに基づく演算結果によって、特定のイベントを発動させる場合には、特定イベントの発動させる期間を、特定期間として検出してもよい。例えば、格闘ゲームの場合には、プレーヤからの特定の操作情報(例えば、「必殺技」を行う操作情報)に基づいて、予め用意された特定のプログラムの実行等によって特定のイベントを行う場合には、特定のプログラムの実行が開始してから終了するまでの期間を特定期間として検出してもよい。例えば、予め用意された動画像を表示させる等の特定のプログラムの実行が開始された場合に、第1、第2のプレーヤキャラクタに対応する入力情報フラグを偽に設定し、特定プログラムの実行が終了された場合には、第1、第2のプレーヤキャラクタに対応する入力情報フラグを真に設定する。そして、第1、第2のプレーヤキャラクタの入力情報フラグの少なくとも一方が真である状況から、第1、第2のプレーヤキャラクタの入力情報フラグが共に偽になったフレームを、特定期間の開始フレームとして決定し、特定期間中のゲームデータに対応する識別番号を、削除対象の識別番号として決定し、第1、第2のバッファに
入力されたゲームデータを削除する。
また、格闘ゲームの場合には、第1のプレーヤキャラクタと第2のプレーヤキャラクタとの対戦が開始するまでの時期を、特定期間として検出してもよい。例えば、プレーヤキャラクタの登場シーンから、対戦開始シーン(ゲーム直前)までの期間を特定期間としてもよい。対戦を行う前なので、プレーヤからの操作情報が反映されなくても問題はないからである。
例えば、プレーヤキャラクタの登場シーンの最初の画像を生成するフレームにおいて、第1、第2のプレーヤキャラクタに対応する入力情報フラグを偽に設定し、対戦開始の画像を生成するフレームにおいて、第1、第2のプレーヤキャラクタに対応する入力情報フラグを真に設定する。そして、第1、第2のプレーヤキャラクタの入力情報フラグの少なくとも一方が真である状況から、第1、第2のプレーヤキャラクタの入力情報フラグが共に偽になったフレームを、特定期間の開始フレームとして決定し、特定期間中のゲームデータに対応する識別番号を、削除対象の識別番号として決定し、第1、第2のバッファに入力されたゲームデータを削除する。
2.3 ゲームデータの送信を停止すると共に、第1のバッファへの入力を制限する手法
上述したように、本実施形態は、第1のバッファに入力されている蓄積量、第2のバッファに入力されている蓄積量が、共に所定量を超えた場合には、第1のバッファ、第2のバッファに入力されているゲームデータを削除する手法を採用している。
しかし、本実施形態は、各ゲーム機は、処理負荷が高まること、通信負荷が高くなることが原因となり、遅延が生じてしまう場合がある。その結果、第1のバッファよりも第2のバッファのゲームデータ入力が遅延してしまい、第1のバッファと第2のバッファとにおいて、ゲームデータの蓄積量の差が発生してしまうことがある。
そして、第1、第2のバッファのいずれかの蓄積量が所定蓄積量以下である限り、ゲームデータを削除することができない。そのため、操作のレスポンスが改善されない場合が生じてしまう。例えば、自機のゲームデータを入力する第1のバッファの蓄積量が12ある場合に、他のゲーム機のゲームデータを入力する第2のバッファの蓄積量が2である場合には、自機を使用しているプレーヤの操作を直ぐに反映させることができない。つまり、第2のバッファの蓄積量が所定蓄積量を超えていないので、第1、第2のバッファへに入力されているゲームデータを削除することはできない。
仮に、第2のバッファの蓄積量が所定蓄積量を超えていないのに、ゲームデータを削除しようとすると、第2のバッファへのゲームデータの入力待ち状態が続き、ゲームを進行させることができない問題が発生してしまう。
そこで、本実施形態では、上述した問題を解消するために、第1のバッファのゲームデータの蓄積量が、第2のバッファのゲームデータの蓄積量よりも多く、第1、第2の蓄積量の差分量が所定差分量以上である場合には、第1、第2のバッファの双方の蓄積量が所定蓄積量を超えるまで、自機のゲームデータを第2のゲーム機へ送信することを制限すると共に、第1のバッファへの入力を制限する手法を採用している。例えば、本実施形態では、所定差分量を「10」として設定している。所定差分量を「10」と設定したのは、一般的に、差分量が10以上あると、ゲームの進行に支障が生じる可能性が高いからである。
図9を用いて具体的に説明すると、自機である第1のゲーム機において、第1のバッファのゲームデータの蓄積量が「12」であり、第2のバッファのゲームデータの蓄積量が「2」である場合には、第1のバッファのゲームデータの蓄積量が、第2のバッファのゲームデータの蓄積量よりも所定差分量「10」以上多いと判断されるので、自機のゲームデータは、識別番号を対応付けないで第2のゲーム機へ送信することを制限すると共に、第1のバッファへの入力を制限する。なお、識別番号を対応付けない理由は、第1のバッファが、第2のバッファよりも所定差分量多い場合には、第1のゲーム機と、第2のゲーム機間において、同一識別番号をゲームデータに割り当てるタイミングにズレが生じている可能性が高いからである。つまり、自機の方が他のゲーム機よりも、識別番号を早くゲームデータに対応付けしている可能性が高いので、自機のゲームデータに識別番号を対応付けずに、ゲームデータの入力を制限することによって、ゲーム機間において、識別番号を対応付けするタイミングを合わせることができる。
一方、第1のゲーム機は、他のゲーム機である第2のゲーム機から受信した識別番号「103」に対応付けられた第2のゲーム機のゲームデータを、第2のバッファに入力する処理を行う。このように、第1のバッファのゲームデータへの入力を制限している期間に、第2のゲーム機から受信したゲームデータを第2のバッファへ入力することによって、双方のバッファのゲームデータの蓄積量の差分を減らすようにしている。
次に、図10を用いて、第1、第2のバッファの双方の蓄積量が所定蓄積量「4」を超えるまでの、第1のバッファ、第2のバッファの状態を、描画フレームレートに応じた時間軸に基づき変化する様子を具体的に説明する。
まず、T1時点において、第1のバッファのゲームデータの蓄積量が「12」であり、第2のバッファのゲームデータの蓄積量が「2」であり、共に所定蓄積量「4」を超えていないので、自機のゲームデータに識別番号「113」を対応付けずに、第1のバッファへのゲームデータの入力を制限する。一方、他のゲーム機から識別番号「103」に対応するゲームデータを受信したので、第2のバッファにゲームデータを入力する。
そして、T2時点において、第1のバッファのゲームデータの蓄積量が「11」であり、第2のバッファのゲームデータの蓄積量が「2」であり、共に所定蓄積量「4」を超えていないので、自機のゲームデータに識別番号「113」を対応付けずに、第1のバッファへのゲームデータの入力を制限する。一方、他のゲーム機から識別番号「104」に対応するゲームデータを受信したので、第2のバッファにゲームデータを入力する。
そして、T3時点において、第1のバッファのゲームデータの蓄積量が「10」であり、第2のバッファのゲームデータの蓄積量が「2」であり、共に所定蓄積量「4」を超えていないので、自機のゲームデータに識別番号「113」を対応付けずに、第1のバッファへのゲームデータの入力を制限する。一方、他のゲーム機から識別番号「105」、「106」、「107」に対応するゲームデータを受信したので、第2のバッファにゲームデータを入力する。
そして、T4時点において、第1のバッファのゲームデータの蓄積量が「9」であり、第2のバッファのゲームデータの蓄積量が「4」であり、共に所定蓄積量「4」を超えていないので、自機のゲームデータに識別番号「113」を対応付けずに、第1のバッファへのゲームデータの入力を制限する。一方、他のゲーム機から識別番号「108」、「109」に対応するゲームデータを受信したので、第2のバッファにゲームデータを入力する。
そして、T5時点において、第1のバッファのゲームデータの蓄積量が「8」であり、第2のバッファのゲームデータの蓄積量が「5」であり、共に所定蓄積量「4」を超えているので、自機のゲームデータに識別番号「113」を対応付けて、第1のバッファへのゲームデータの入力を制限する。一方、他のゲーム機から識別番号「110」、「111」に対応するゲームデータを受信したので、第2のバッファにゲームデータを入力する。
このように、本実施形態では、第1、第2のバッファの蓄積量が、共に所定蓄積量を超えた場合には、上述したように、第1、第2のバッファに入力されているゲームデータを削除することができる。例えば、T5の時点において、第1、第2のバッファの蓄積量が、共に所定蓄積量を超えているので、識別番号「113〜117」に対応するゲームデータが、第1、第2のバッファに入力された場合には、識別番号「113〜117」に対応するゲームデータを削除するようにしてもよい。その結果、プレーヤからの操作入力を早期に改善することができる。
また、本実施形態では、上記で説明した「特定期間」に、自機のゲームデータを第2のゲーム機へ送信することを制限すると共に、第1のバッファへの入力を制限するようにしてもよい。つまり、本実施形態は、第1のバッファのゲームデータの蓄積量が、第2のバッファのゲームデータの蓄積量よりも多く、第1、第2のバッファのゲームデータの蓄積量の差分量が所定差分量以上であると判断された場合には、特定期間中に、第1、第2のバッファの双方の蓄積量が所定蓄積量を超えるまで、自機のゲームデータを第2のゲーム機へ送信することを制限すると共に、第1のバッファへの入力を制限するようにしてもよい。プレーヤからの操作がゲームに反映されない期間に、ゲームデータの入力を制限するようにすれば、プレーヤに違和感を与えないように、自機のゲームデータを第2のゲーム機へ送信することを制限すると共に、第1のバッファへの入力を制限することができるからである。
また、本実施形態では、第1のバッファのゲームデータの蓄積量が、第2のバッファのゲームデータの蓄積量よりも多く、第1、第2のバッファのゲームデータの蓄積量の差分量が所定差分量以上である場合には、第1のバッファに入力されているゲームデータの蓄積量と、第2のバッファに入力されているゲームデータの蓄積量との差分量が適正差分量に達するまで、ゲームデータに識別情報を対応付けずにゲームデータの送信を停止すると共に、第1のバッファへの入力を制限してもよい。
上述したように、第1、第2のバッファ間においてゲームデータの蓄積量との差が生じることは、第1のゲーム機と、第2のゲーム機間において、同一識別番号をゲームデータに割り当てるタイミングにズレが生じている可能性が高く、第1、第2のバッファのゲームデータの蓄積量の調整を図る必要があるからである。例えば、第1のバッファのゲームデータの蓄積量が「12」であり、第2のバッファのゲームデータの蓄積量が「2」である場合には、プレーヤの操作がゲームに反映されるまで、第1のバッファのゲームデータの蓄積量「12」分の時間(例えば12/60秒)を要することになり、操作のレスポンスが悪いからである。
次に、適正差分量を「4」として設定した場合における例を図11を用いて説明する。図11は、第1、第2のバッファの双方の蓄積量が適正差分量「4」に達するまでの、第1のバッファ、第2のバッファの状態を、描画フレームレートに応じた時間軸に基づき変化する様子を示している。
まず、T1時点において、第1のバッファのゲームデータの蓄積量が「12」であり、第2のバッファのゲームデータの蓄積量が「2」であり、差分量が「10」であり、適正差分量「4」に達していないので、自機のゲームデータに識別番号「113」を対応付けずに、第1のバッファへのゲームデータの入力を制限する。一方、他のゲーム機から識別番号「103」に対応するゲームデータを受信したので、第2のバッファにゲームデータを入力する。
また、T2〜T6時点においても、同様に、第1のバッファのゲームデータの蓄積量と、第2のバッファのゲームデータの蓄積量との差分量が、適正差分量「4」に達しないので、自機のゲームデータに識別番号「113」を対応付けずに、第1のバッファへのゲームデータの入力を制限し、他のゲーム機から受信したゲームデータを第2のバッファに入力する。
そして、T7時点において、第1のバッファのゲームデータの蓄積量と、第2のバッファのゲームデータの蓄積量との差分量が、適正差分量「4」に達することになり、自機のゲームデータに識別番号「113」を対応付けて第1のバッファへのゲームデータの入力し、他のゲーム機から受信したゲームデータを第2のバッファに入力する。
以上のように、第1のバッファのゲームデータの蓄積量と、第2のバッファのゲームデータの蓄積量との差分量が、適正差分量に達するまで、ゲームデータに識別情報を対応付けずにゲームデータの送信を停止すると共に、第1のバッファへの入力を制限することによって、第1のバッファの蓄積量を減らすことができ、その結果、プレーヤからの操作のレスポンスを改善することができる。
なお、本実施形態は、特定期間中に、ゲームデータに識別情報を対応付けずにゲームデータの送信を停止すると共に、第1のバッファへの入力を制限するようにしてもよい。このようにすれば、プレーヤに察知されずに、ゲームデータの入力制限を行うことができる。つまり、第1のバッファのゲームデータの蓄積量が、第2のバッファのゲームデータの蓄積量よりも所定差分量以上であると判断された場合には、特定期間中に、第1のバッファのゲームデータの蓄積量と、第2のバッファのゲームデータの蓄積量との差分量が、適正差分量に達するまで、ゲームデータに識別情報を対応付けずにゲームデータの送信を停止すると共に、第1のバッファへの入力を制限するようにしてもよい。
上述したゲームデータの送信を停止すると共に、第1のバッファへの入力を制限する手法は、本実施形態では、親機、子機にかかわらず、全てのゲーム機において適用する。このようにすれば、一つのゲーム機に処理負荷を集中させることがなく、処理負荷を分散させて効率よくゲームを進行させることができる。
3.本実施形態の処理の流れ
(1)図12は、第1のバッファ及び第2のバッファに入力されているゲームデータを削除する手法のタイミングチャートの一例を示す。
まず、親機である第1のゲーム機において、第1、第2のバッファの蓄積量が所定蓄積量を超えていると判断される。そして、特定期間であると判断すると、特定期間中に入力された削除対象の識別番号を決定する。例えば、識別番号107〜110を削除対象の識別番号として決定する。そして、第1のゲーム機は、決定した削除対象の識別番号(107〜110)を第2のゲーム機に送信する処理を行う。
そして、第1のゲーム機、第2のゲーム機それぞれは、第1のバッファに入力されている107〜110に対応するゲームデータを削除すると共に、第2のバッファに入力されている107〜110に対応するゲームデータを削除する処理を行う。
(2)図13は、第1のゲーム機において、ゲームデータの送信を停止すると共に、第1のバッファへの入力を制限する手法のタイミングチャートを示す。
まず、第1のゲーム機において、第1のバッファのゲームデータの蓄積量が、第2のバッファの蓄積量よりも所定差分量多いと判断する。そして、特定期間を検出し、第1のゲーム機は、自機のゲームデータについて第2のゲーム機に対するゲームデータの送信を停止すると共に、第1のバッファへのゲームデータの入力を制限する処理を行う。