以下、本発明の実施形態の例について図面に基づき詳細に説明する。本発明の実施形態に係るゲーム装置は、例えば家庭用ゲーム機(据置型ゲーム機)、携帯ゲーム機、携帯電話機、携帯情報端末(PDA)、又はパーソナルコンピュータなどによって実現される。ここでは、本発明の実施形態に係るゲーム装置を家庭用ゲーム機によって実現する場合について説明する。
[ハードウェア構成]
図1は、本発明の実施形態に係るゲーム装置のハードウェア構成を示す。図1に示すゲーム装置10は、家庭用ゲーム機11、表示部32、音声出力部34、及び光ディスク36(情報記憶媒体)を含む。表示部32及び音声出力部34は家庭用ゲーム機11に接続される。例えば、家庭用テレビ受像機又は液晶ディスプレイが表示部32として用いられ、例えば、家庭用テレビ受像機に内蔵されたスピーカ又はヘッドホンが音声出力部34として用いられる。
家庭用ゲーム機11は公知のコンピュータゲームシステムである。家庭用ゲーム機11は、バス12、制御部14、主記憶16、画像処理部18、入出力処理部20、音声処理部22、光ディスクドライブ24、ハードディスク26、通信インタフェース28、及びコントローラ30を含む。
制御部14は一又は複数のマイクロプロセッサを含む。制御部14は、図示しないROMに格納されるオペレーティングシステムや、光ディスク36から読み出されるプログラムに基づいて、情報処理を実行する。主記憶16は例えばRAMを含み、光ディスク36から読み出されたプログラム及びデータが主記憶16に書き込まれる。主記憶16は制御部14の作業用メモリとしても用いられる。バス12はアドレス及びデータを家庭用ゲーム機11の各部でやり取りするためのものである。
画像処理部18はVRAMを含み、制御部14から供給される画像データに基づいてVRAM上にゲーム画面を描画する。VRAM上に描画されたゲーム画面はビデオ信号に変換されて所定のタイミングで表示部32に出力される。
入出力処理部20は制御部14が音声処理部22、光ディスクドライブ24、ハードディスク26、通信インタフェース28、及びコントローラ30にアクセスするためのインタフェースである。音声処理部22はサウンドバッファを含み、光ディスク36からサウンドバッファに読み出された音声データを音声出力部34から出力する。通信インタフェース28はインターネットなどの通信ネットワークに家庭用ゲーム機11を有線又は無線接続するためのインタフェースである。
光ディスクドライブ24は光ディスク36に記録されたプログラムやデータを読み取る。ここでは、プログラムやデータを家庭用ゲーム機11に供給するために光ディスク36を用いるが、メモリカード等、他の情報記憶媒体を用いるようにしてもよい。また、例えば通信ネットワークを介して遠隔地からプログラムやデータを家庭用ゲーム機11に供給するようにしてもよい。ハードディスク26は一般的なハードディスク装置(補助記憶装置)である。なお、光ディスク36に記憶されることとして説明するプログラムやデータはハードディスク26に記憶されていてもよい。
コントローラ30は、ユーザによって行われるゲーム操作を受け付けるための操作部である。家庭用ゲーム機11には一又は複数のコントローラ30が有線又は無線接続される。図2A及び図2Bはコントローラ30の一例を示す。なお、図2Aにおいて、X軸はコントローラ30の長軸方向(左右方向)に対応し、Y軸はコントローラ30の短軸方向(上下方向)に対応している。X軸とY軸とは直交している。
コントローラ30の表面30aには複数の操作部材が備えられている。例えば、方向ボタン群40と、ボタン42A,42B,42X,42Yと、左スティック(レバー)44Lと、右スティック(レバー)44Rとが備えられている。
方向ボタン群40は例えば方向を指示する操作に用いられる。方向ボタン群40は、上方向に対応する上方向ボタン40Uと、下方向に対応する下方向ボタン40Dと、左方向に対応する左方向ボタン40Lと、右方向に対応する右方向ボタン40Rと、を含む。
上方向ボタン40Uは感圧ボタンとして構成されている。例えば、上方向ボタン40Uには感圧センサが設けられ、上方向ボタン40Uに加えられた押下力に関する押下力情報が制御部14に供給される。押下力は、例えば0〜255の数値によって表される。下方向ボタン40D、左方向ボタン40L、及び右方向ボタン40Rも、それぞれ、上方向ボタン40Uと同様に感圧ボタンとして構成され、これらのボタンの各々に加えられた押下力に関する押下力情報も制御部14に供給される。
左スティック44L及び右スティック44Rも例えば方向を指示する操作に用いられる。左スティック44L及び右スティック44Rは、コントローラ30の筐体の表面30aに直立しており、この直立状態から全方位に所定角度だけ傾倒自在に構成されている。
左スティック44Lの左右方向及び上下方向への傾きに関する傾き情報が制御部14に供給される。例えば、左右方向への傾きの大きさは、例えば−127〜+127の数値で表される。値「0」は、左スティック44LがX軸方向(左右方向)に傾いていないことを示す。また、値「+127」は、左スティック44LがX軸正方向(右方向)に限界まで倒れていることを示す。さらに、値「−127」は、左スティック44LがX軸負方向(左方向)に限界まで倒れていることを示す。上下方向への傾きについても同様である。また、右スティック44Rについても左スティック44Lと同様である。なお以下では、左スティック44Lが左右方向及び上下方向のいずれにも傾けられていない状態のことを、左スティック44Lが「ニュートラルの状態」にあるというように記載する。右スティック44Rについても同様である。
ボタン42A,42B,42X,42Yは各種ゲーム操作に用いられる。なお、ボタン42A,42B,42X,42Yも、それぞれ、方向ボタン群40と同様に感圧ボタンとして構成され、これらのボタンの各々に加えられた押下力に関する押下力情報が制御部14に供給される。
入出力処理部20は一定周期毎(例えば1/60秒ごと)にコントローラ30の各操作部材の状態をスキャンし、そのスキャン結果を表す操作信号をバス12を介して制御部14に供給する。方向ボタン群40の押下力情報や、左スティック44L及び右スティック44Rの各々の傾き情報も操作信号として制御部14に供給される。制御部14は操作信号に基づいてユーザのゲーム操作を判定する。
[ゲーム]
ゲーム装置10では、光ディスク36から読み出されたゲームプログラムが実行されることによって、例えば野球ゲームが実行される。例えば、この野球ゲームでは、ユーザは、打者キャラクタを操作することよって、対戦相手(コンピュータ又は他のユーザ)によって操作される投手キャラクタが投げるボールを打つ。
ゲームプログラムが実行されると、ゲーム空間が主記憶16に構築される。図3はゲーム空間の一例を示す。図3に示すゲーム空間50は、互いに直交する三つの座標軸(Xw軸、Yw軸、及びZw軸)が設定された仮想的な3次元空間になっている。
ゲーム空間50には、地面を表すオブジェクト、ホームベースを表すホームベースオブジェクト51、バッターボックスを表すバッターボックスオブジェクト52、及び野球のボールを表すボールオブジェクト54等が配置される。また、図3に示すゲーム空間50には、投手を表す投手キャラクタオブジェクト(以下、単に「投手キャラクタ」と記載する。)56と、打者を表す打者キャラクタオブジェクト(以下、単に「打者キャラクタ」と記載する。)58が配置されている。打者キャラクタ58はユーザによって操作されるゲームキャラクタである。なお、実際には、他の選手(例えば捕手や一塁手等)を表す選手キャラクタオブジェクトや、審判を表す審判キャラクタオブジェクト等も配置されるが、図3では省略されている。
打者キャラクタ58はバットを表すバットオブジェクト60を持っている。バットオブジェクト60は長手形状を有し、棒状のオブジェクトである。なお、バットオブジェクト60の種類は複数存在する。例えば、木製のバットを表すバットオブジェクト60と、金属製のバットを表すバットオブジェクト60との2種類のバットオブジェクト60が存在する。打者キャラクタ58は、バットオブジェクト60の一方の端側を左手58l及び右手58rで把持することによってバットオブジェクト60を持っている。
また、ゲーム空間50には仮想カメラ62が設定される。例えば、仮想カメラ62の位置は捕手キャラクタオブジェクト又は審判キャラクタオブジェクトの目の位置に設定される。この仮想カメラ62から見たゲーム空間50を表す画像がゲーム画面に表示される。
打者キャラクタ58は、ユーザの操作に従って、バットオブジェクト60を動かす。すなわち、打者キャラクタ58は、ユーザの操作に従って、バットオブジェクト60を構えたり、バットオブジェクト60を振ったりする。本実施形態では、ユーザが打者キャラクタ58に多彩なバットさばきを行わせることができるようになっている。具体的には、ユーザが左スティック44L及び右スティック44Rを用いて、バットオブジェクト60の構え方や振り方を細かく指示できるようになっている。例えば、ユーザは左スティック44Lを傾けることによって、打者キャラクタ58の左手58l(又は右手58r)の位置を変えることができるようになっている。また、ユーザは右スティック44Rを傾けることによって、バットオブジェクト60の先端部分60aの位置を変えることができるようになっている。以下、この構成について詳細に説明する。
[機能ブロック]
図4は、ゲーム装置10で実現される機能を示す機能ブロック図である。図4に示すように、ゲーム装置10は、ゲームデータ記憶部70、第1の点制御部72、第2の点制御部74、間隔設定部76、オブジェクト制御部78、及び表示制御部80を含む。ゲームデータ記憶部70は、例えば主記憶16及び光ディスク36によって実現され、その他の機能ブロックは、例えば制御部14が光ディスク36に記憶されたプログラムを実行することによって実現される。
ゲームデータ記憶部70はゲームを実行するために必要な各種データを記憶する。例えば、ゲームデータ記憶部70は、ゲーム空間50に配置される各オブジェクトの形状に関するモデルデータを記憶する。また例えば、ゲームデータ記憶部70は、ゲームの現在の状況に関するゲーム状況データを記憶する。例えば、ゲーム空間50に配置される各動的オブジェクト(打者キャラクタ58やバットオブジェクト60等)の状態(例えば位置や姿勢等)に関するデータや、仮想カメラ62の状態(例えば位置、視線方向や画角等)に関するデータがゲーム状況データに含まれる。
ここで、バットオブジェクト60の状態に関するデータについて説明する。本実施形態では、バットオブジェクト60の状態(例えば位置や姿勢)の制御の基礎とされる第1の点及び第2の点がゲーム空間50内に設定される。図5は第1の点及び第2の点の一例について説明するための図である。
例えば、第1の点90は、バットオブジェクト60の第1の部分の位置を制御するために用いられる点であり、バットオブジェクト60の第1の部分に対応している。上記「第1の部分」は、例えば、バットオブジェクト60のうちの、打者キャラクタ58の左手58lによって握られるグリップ部分60lである。なお、上記「第1の部分」は、バットオブジェクト60のうちの、打者キャラクタ58の右手58rによって握られるグリップ部分60rであってもよい。
また例えば、第2の点92は、バットオブジェクト60の第2の部分の位置を制御するために用いられる点であり、バットオブジェクト60の第2の部分に対応している。上記「第2の部分」は、例えばバットオブジェクト60の先端部分60aである。
本実施形態の場合、第1の点90及び第2の点92の位置がバットオブジェクト60の状態に関するデータに含まれる。
なお、本実施形態では、バットオブジェクト60の長手方向が第1の点90から第2の点92への方向94と一致する場合に第1の点90と第2の点92との間の長さがバットオブジェクト60の長手方向の長さよりも長くなるように、第1の点90及び第2の点92が設定されるようになっている。
第1の点制御部72は、ゲーム空間50内に設定される第1の点90を第1の操作部材の状態(操作状態)に基づいて移動させる。例えば、第1の点制御部72は、ゲームキャラクタの位置に基づいて設定される第1の領域内で、第1の点90を第1の操作部材の状態に基づいて移動させる。以下、第1の点制御部72の機能について詳しく説明する。
図6は第1の点制御部72の機能について説明するための図である。なお、図6では、打者キャラクタ58の腕とバットオブジェクト60とを省略している。図6に示すように、ゲーム空間50には、第1の点90が移動可能な第1の領域を表す第1の領域オブジェクト100が配置される。後述するように、本実施形態の場合、第1の点90は第1の領域オブジェクト100の表面102上を移動するようになっており、第1の領域オブジェクト100の表面102が、第1の点90が移動可能な領域(第1の領域)に相当する。
第1の領域オブジェクト100は透明に設定された不可視のオブジェクトであり、この第1の領域オブジェクト100はゲーム画面への表示が制限(抑止)される。第1の領域オブジェクト100の位置は打者キャラクタ58の位置に基づいて設定される。本実施形態の場合、第1の領域オブジェクト100の位置と打者キャラクタ58の位置とは常に一定の関係を有するようになっている。
上述したように、第1の領域オブジェクト100の表面102は第1の点90が移動可能な領域(第1の領域)を表しており、第1の点90はバットオブジェクト60のグリップ部分60lの位置を制御するための点である。このため、第1の領域オブジェクト100(言い換えれば第1の領域)の形状、大きさ、及び打者キャラクタ58との位置関係は、打者キャラクタ58の左手58lが届く領域を考慮して決定される。
図6に示す例では、第1の領域オブジェクト100の形状が、半径がR1である球体の一部からなる形状になっている。具体的には、第1の領域オブジェクト100の形状が半球形状になっている。また、図6に示す例では、第1の領域オブジェクト100の代表点(球の中心点)100aが打者キャラクタ58の代表点58aから正面方向58bに一定距離離れた位置となるように、第1の領域オブジェクト100は配置されている。なお、第1の領域オブジェクト100の形状は球体の一部からなる形状(例えば半球形状)に限られない。
図7は、第1の領域オブジェクト100の表面102について説明するための図である。図7に示すように、表面102上には、互いに交わる第1の軸(Xa軸)及び第2の軸(Ya軸)が設定される。Xa軸とYa軸とは原点Oaで交わり、原点Oaは表面102の中心に対応している。
第1の点制御部72は、第1の領域オブジェクト100の表面102上で第1の点90を第1の操作部材の状態に基づいて移動させる。本実施形態の場合、左スティック44Lが「第1の操作部材」に相当する。
図7におけるXa軸は図2AにおけるX軸に対応し、図7におけるYa軸は図2AにおけるY軸に対応する。左スティック44Lが図2Aに示すX軸正方向(又はX軸負方向)に傾けられた場合、第1の点制御部72は第1の点90を図7に示すXa軸正方向(又はXa負方向)に一定速度で移動させる。また、左スティック44Lが図2Aに示すY軸正方向(又はY軸負方向)に傾けられた場合、第1の点制御部72は第1の点90を図7に示すYa軸正方向(又はYa軸負方向)に一定速度で移動させる。
なお、第1の点90が移動可能な領域を第1の領域オブジェクト100の表面102に限定しなくてもよい。例えば、第1の点90は第1の領域オブジェクト100の内部を移動するようにしてもよい。このように、第1の領域オブジェクト100の表面102及び内部の両方又は一方が、第1の点90が移動可能な領域(第1の領域)に相当するようにしてもよい。
第2の点制御部74は、ゲーム空間50内に設定される第2の点92を第2の操作部材の状態(操作状態)に基づいて移動させる。第2の点制御部74は、ゲームキャラクタの位置に基づいて設定される第2の領域内で、第2の点92を第2の操作部材の状態に基づいて移動させる。以下、第2の点制御部74の機能について詳しく説明する。
図8は第2の点制御部74の機能について説明するための図である。なお、図8でも、打者キャラクタ58の腕とバットオブジェクト60とを省略している。図8に示すように、ゲーム空間50には、第2の点92が移動可能な第2の領域を表す第2の領域オブジェクト104が配置される。後述するように、本実施形態の場合、第2の点92は第2の領域オブジェクト104の表面106上を移動するようになっており、第2の領域オブジェクト104の表面106が、第2の点92が移動可能な領域(第2の領域)に相当する。
本実施形態の場合、第2の領域オブジェクト104は第1の領域オブジェクト100よりも大きいオブジェクトになっている。第1の領域オブジェクト100と同様、第2の領域オブジェクト104は透明に設定された不可視のオブジェクトであり、この第2の領域オブジェクト104はゲーム画面への表示が制限(抑止)される。第2の領域オブジェクト104の位置は打者キャラクタ58の位置に基づいて設定される。本実施形態の場合、第2の領域オブジェクト104の位置と打者キャラクタ58の位置とは常に一定の関係を有するようになっている。
上述したように、第2の領域オブジェクト104の表面106は第2の点92が移動可能な領域(第2の領域)を表しており、第2の点92はバットオブジェクト60の先端部分60aの位置を制御するための点である。このため、第2の領域オブジェクト104(言い換えれば第2の領域)の形状、大きさ、及び打者キャラクタ58との位置関係は、バットオブジェクト60の先端部分60aが届く領域を考慮して決定される。
図8に示す例では、第2の領域オブジェクト104の形状が、半径がR2である球体の一部からなる形状になっている。具体的には、第2の領域オブジェクト104の形状が半球形状になっている。また、図8に示す例では、第2の領域オブジェクト104の代表点(球の中心点)104aが打者キャラクタ58の代表点58aから前方斜め上方向58cに一定距離離れた位置となるように、第2の領域オブジェクト104は配置される。なお、打者キャラクタ58の正面方向58bと方向58cとの間の角度θは常に一定になっている。また、第2の領域オブジェクト104の半径R2は第1の領域オブジェクト100の半径R1よりも長くなっている。なお、第2の領域オブジェクト104の形状は球体の一部からなる形状(例えば半球形状)に限られない。
図9は、第2の領域オブジェクト104の表面106について説明するための図である。表面106上には、互いに交わる第3の軸(Xb軸)及び第4の軸(Yb軸)が設定されている。Xb軸とYb軸とは原点Obで交わり、原点Obは表面106の中心に対応している。
第2の点制御部74は、第2の領域オブジェクト104の表面106上で第2の点92を第2の操作部材の状態に基づいて移動させる。本実施形態の場合、右スティック44Rが「第2の操作部材」に相当する。
図9におけるXb軸は図2AにおけるX軸に対応し、図9におけるYb軸は図2AにおけるY軸に対応する。右スティック44Rが図2に示すX軸正方向(又はX軸負方向)に傾けられた場合、第2の点制御部74は第2の点92を図9に示すXb軸正方向(又はXb負方向)に一定速度で移動する。また、右スティック44Rが図2に示すY軸正方向(又はY軸負方向)に傾けられた場合、第2の点制御部74は第2の点92を図9に示すYb軸正方向(又はYb軸負方向)に一定速度で移動する。
なお、第2の点92が移動可能な領域を第2の領域オブジェクト104の表面106に限定しなくてもよい。例えば、第2の点92は第2の領域オブジェクト104の内部を移動するようにしてもよい。このように、第2の領域オブジェクト104の表面106及び内部の両方又は一方が、第2の点92が移動可能な領域(第2の領域)に相当するようにしてもよい。
間隔設定部76を説明する前にオブジェクト制御部78について説明する。オブジェクト制御部78は、ゲーム空間50内に配置されるオブジェクトの位置及び姿勢を第1の点90及び第2の点92に基づいて制御する。例えば、「オブジェクト」は、長手形状を有するオブジェクトである。また例えば、「オブジェクト」は、打者キャラクタ58が一方の端部側を把持して使用する物を表すオブジェクトである。本実施形態の場合、バットオブジェクト60が、オブジェクト制御部78の制御対象である「オブジェクト」に相当する。
図10は、オブジェクト制御部78によるバットオブジェクト60の位置及び姿勢の制御について説明するための図であり、第1の点90(第1の領域オブジェクト100)と第2の点(第2の領域オブジェクト104)とバットオブジェクト60との関係を表している。本実施形態の場合、オブジェクト制御部78は、第1の点90から第2の点92への方向94に基づいて、バットオブジェクト60の位置及び姿勢を制御する。より具体的には、オブジェクト制御部78は、バットオブジェクト60の長手方向(グリップ部分60lから先端部分60aへの方向96)が第1の点90から第2の点92への方向94と一致するように、バットオブジェクト60の位置及び姿勢を制御する。
間隔設定部76は、第1の点90と第2の点92との間の間隔をオブジェクトの種別に基づいて設定する。上述のように、本実施形態の場合、バットオブジェクト60が「オブジェクト」に相当する。
本実施形態の場合、間隔設定部76は、バットオブジェクト60が木製バットと金属バットとのいずれを表すオブジェクトであるかに基づいて、第1の点90と第2の点92との間の間隔を設定する。このため、本実施形態の場合、間隔設定部76は、バットオブジェクト60の材質に関する情報に基づいて、第1の点90と第2の点92との間の間隔を設定するということもできる。また、一般的に木製バットは金属バットに比べて重いため、間隔設定部76は、バットオブジェクト60の重さに関する情報に基づいて、第1の点90と第2の点92との間の間隔を設定するということもできる。
また、間隔設定部76は、第2の領域(第2の領域オブジェクト104)の設定をバットオブジェクト60の種別に基づいて変えることによって、第1の点90と第2の点92との間の間隔を設定する。より具体的には、間隔設定部76は第2の領域オブジェクト104の半径R2をバットオブジェクト60の種別に基づいて変える。
図11は第2の領域オブジェクト104の半径R2を制御するためのデータの一例を示す図である。図11に示すデータは、バットオブジェクト60の種別(言い換えれば、材質又は重さ)と、第2の領域オブジェクト104の半径R2と、を対応づけたデータになっている。なお、図11に示すデータにおいて、Ra及びRbは半径の長さを示す所定の数値である。また、RaはRbよりも大きい値になっている。
ところで、第1の点90と第2の点92との間の間隔は第2の領域オブジェクト104の半径R2によって設定されるため、図11に示すデータは、バットオブジェクト60の種別(言い換えれば、材質又は重さ)に関する情報と、第1の点90と第2の点92との間の間隔の設定に関する情報と、を対応づけたデータということができる。
図11に示すデータでは、バットオブジェクト60が木製バットである場合の半径R2(Ra)が、バットオブジェクト60が金属バットである場合の半径R2(Rb)に比べて長くなっている。その結果、バットオブジェクト60が木製バットである場合とバットオブジェクト60が金属バットである場合とで、バットオブジェクト60の位置及び姿勢が同じである場合(すなわち、第1の点90の位置が同じで、かつ、バットオブジェクト60の長手方向が同じである場合)の第1の点90と第2の点92との間の間隔を比較すると、バットオブジェクト60が木製バットである場合の方が、バットオブジェクト60が金属バットである場合に比べて、第1の点90と第2の点92との間の間隔が長くなる。
本実施形態の場合、間隔設定部76は、バットオブジェクト60の種別と、図11に示すデータと、に基づいて、第2の領域オブジェクト104の半径R2を設定する。
表示制御部80は、打者キャラクタ58及びバットオブジェクト60をゲーム画面に表示する。表示制御部80は、仮想カメラ62から見たゲーム空間50を表すゲーム画面を表示部32に表示する。
[処理]
ゲーム装置10で実行される処理について説明する。図12は、投手キャラクタ56がボールオブジェクト54を投げた後に実行される処理について示すフロー図である。制御部14は光ディスク36に記憶されるプログラムに従って、図12に示す処理を実行することによって、第1の点制御部72、第2の点制御部74、間隔設定部76、オブジェクト制御部78、及び表示制御部80が実現される。
例えば、投手キャラクタ56がボールオブジェクト54を投げた場合、図12に示すように、制御部14は第2の領域オブジェクト104の半径R2を決定する(S101)。例えば、制御部14は、打者キャラクタ58が持っているバットオブジェクト60の種別を判断する。そして、制御部14は、図11に示すデータに基づいて、第2の領域オブジェクト104の半径R2を決定する。すなわち、バットオブジェクト60が木製バットである場合、制御部14は第2の領域オブジェクト104の半径R2をRaに設定する。一方、バットオブジェクト60が金属バットである場合、制御部14は第2の領域オブジェクト104の半径R2をRbに設定する。
また、制御部14はボールオブジェクト54の位置を更新する(S102)。例えば、投手キャラクタ56によって投げられたボールオブジェクト54が、捕手キャラクタに向かって移動するように、ボールオブジェクト54の位置が更新される。
その後、制御部14は左スティック44L及び右スティック44Rの傾き情報を取得する(S103)。そして、制御部14(第1の点制御部72)は、左スティック44Lの傾き情報に基づいて第1の点90の位置を更新する(S104)。例えば、制御部14は、第1の点90を、第1の領域オブジェクト100の表面102上において、左スティック44Lの傾き方向に対応する方向に一定距離だけ移動させる。
ステップS104の処理が完了した後、制御部14(第2の点制御部74)は、右スティック44Rの傾き情報に基づいて第2の点92の位置を更新する(S105)。例えば、制御部14は、第2の点92を、第2の領域オブジェクト104の表面106上において、右スティック44Rの傾き方向に対応する方向に一定距離だけ移動させる。
ステップS105の処理が完了した後、制御部14(オブジェクト制御部78)は、第1の点90及び第2の点92の位置に基づいて、バットオブジェクト60の位置及び姿勢を更新する(S106)。例えば、制御部14は、バットオブジェクト60のグリップ部分60lの位置を第1の点90に基づいて設定し、バットオブジェクト60の先端部分60aの位置を第1の点90から第2の点92への方向94に基づいて設定する。
より具体的には、図10に示したように、制御部14は、バットオブジェクト60のグリップ部分60lの位置を第1の点90の位置に一致させる。また、制御部14は、バットオブジェクト60の長手方向(グリップ部分60lから先端部分60aへの方向96)が第1の点90から第2の点92への方向94と一致するように、バットオブジェクト60の先端部分60aの位置を設定する。この場合、バットオブジェクト60の先端部分60aの位置は、第1の点90から第2の点92への方向94に伸ばした直線上の位置であって、かつ、グリップ部分60lからの距離が所定距離である位置に設定される。
ステップS106の処理が完了した後、制御部14は打者キャラクタ58の姿勢を更新する(S107)。このステップS107では、打者キャラクタ58の姿勢が第1の点90及び第2の点92の少なくとも一方の位置に基づいて設定される。
ステップS107において、まず制御部14は、打者キャラクタ58の部位のうちの、バットオブジェクト60を把持する部位の位置を決定する。具体的には、制御部14は、バットオブジェクト60のグリップ部分60lの位置を打者キャラクタ58の左手58lの位置として決定する。なお、上述したように、バットオブジェクト60のグリップ部分60lの位置は第1の点90に基づいて決定されるため、打者キャラクタ58の左手60lの位置は第1の点90に基づいて決定されるということができる。
また、制御部14は、バットオブジェクト60のグリップ部分60rの位置を打者キャラクタ58の右手58rの位置として決定する。なお、バットオブジェクト60のグリップ部分60rの位置は第1の点90及び第2の点92の位置に基づいて決定されるため、打者キャラクタ58の右手58rの位置は第1の点90及び第2の点92の位置に基づいて決定されるということができる。
その後、制御部14は、打者キャラクタ58の左手58l及び右手58rの位置に基づいて、打者キャラクタ58の他の部位の位置などを決定する。例えば、打者キャラクタ58の内部には、打者キャラクタ58の各部位の位置(言い換えれば、打者キャラクタ58の姿勢)を制御するためのスケルトンが設定されている。このステップS110では、このスケルトンの状態が左手58l及び右手58rの位置に基づいて決定されることによって、打者キャラクタ58の他の部位の位置などが決定される。なお、スケルトンの状態を左手58l及び右手58rの位置に基づいて決定する場合には、例えば、一般的なインバースキネマティクス法のアルゴリズムが用いられる。
ステップS107の処理が完了した後、制御部14はバットオブジェクト60がボールオブジェクト54に当たったか否かを判定する(S108)。このステップS108では一般的な衝突判定アルゴリズムが用いられる。
バットオブジェクト60がボールオブジェクト54に当たった場合、制御部14はゲーム画面を更新する(S111)。この場合、例えば、打者キャラクタ58によって打たれたボールオブジェクト54の移動方向が決定される。そして、ボールオブジェクト54がその移動方向に向かって移動する様子を表すゲーム画面が表示部32に表示される。
一方、バットオブジェクト60がボールオブジェクト54に当たっていない場合、制御部14は捕手キャラクタがボールオブジェクト54を捕ったか否かを判定する(S109)。捕手キャラクタがボールオブジェクト54を捕った場合、制御部14はゲーム画面を更新する(S112)。この場合、審判キャラクタによる判定(ストライク又はボール)が行われ、その判定結果を表すゲーム画面が表示部32に表示される。
一方、捕手キャラクタがボールオブジェクト54を捕っていない場合、すなわち、ボールオブジェクト54が捕手キャラクタに向かって移動中である場合、制御部14(表示制御部80)はゲーム画面を更新する(S110)。この場合、仮想カメラ62から見たゲーム空間50を表すゲーム画面が生成され、該ゲーム画面が表示部32に表示される。
ステップS110の処理が実行された後、制御部14はステップS102の処理を再実行する。ステップS108又はステップS109における判定結果が真(Y)になるまでの間、ステップS102〜S110の処理が所定時間(例えば1/60秒)ごとに繰り返し実行される。
[まとめ]
以上に説明したゲーム装置10では、バットオブジェクト60の制御の基礎とされる第1の点90及び第2の点92がゲーム空間50内に設定される。第1の点90の位置は左スティック44Lの傾き状態に基づいて制御され、第2の点92の位置は右スティック44Rの傾き状態に基づいて制御される。そして、バットオブジェクト60の位置及び姿勢は第1の点90及び第2の点92の位置に基づいて制御される。
ゲーム装置10によれば、バットオブジェクト60の位置や姿勢が左スティック44L及び右スティック44Rの傾き状態に基づいて細かく変化するようになる。このため、ゲーム装置10によれば、ユーザが左スティック44L及び右スティック44Rを用いてバットオブジェクト60の構え方や振り方を細かく指示できるようにすることが可能になる。すなわち、ゲーム装置10によれば、打者キャラクタ58が持っているバットオブジェクト60に関する操作の操作性を向上することが可能になる。
ところで、バットオブジェクト60の構え方や振り方を細かく指示できるようにするための他の方法としては、加速度センサなどが内蔵されたコントローラを用いる方法も考えられる。しかしながら、この場合、コントローラ30が加速度センサなどを内蔵している必要がある。この点、本実施形態によれば、コントローラ30が加速度センサなどを内蔵している必要がない。
また、ゲーム装置10では、第1の領域オブジェクト100がゲーム空間50に配置され、第1の点90が移動可能な領域が第1の領域オブジェクト100の表面102に制限される。同様に、第2の領域オブジェクト104がゲーム空間50に配置され、第2の点92が移動可能な領域が第2の領域オブジェクト104の表面106に制限される。バットオブジェクト60の位置や姿勢は第1の点90及び第2の点92の位置に基づいて変化するため、打者キャラクタ58が可能なバットオブジェクト60の構え方や振り方は、第1の領域オブジェクト100及び第2の領域オブジェクト104の形状、大きさ、及び打者キャラクタ58との位置関係によって変化する。
ゲーム装置10によれば、ゲーム開発において、ゲーム空間50内に配置されるオブジェクトの形状などを作成する者が、打者キャラクタ58が可能なバットオブジェクト60の構え方や振り方の決定に関与できるようになる。
さらに、ゲーム装置10では、バットオブジェクト60の種別(材質又は重さ)に基づいて、第1の点90と第2の点92との間の間隔が設定される。具体的には、バットオブジェクト60の種別(材質又は重さ)に基づいて、第2の領域オブジェクト104の半径R2が設定される。第2の点92は第2の領域オブジェクト104の表面106上を一定速度で移動するため、第2の領域オブジェクト104の半径R2が大きくなると(すなわち、第1の点90と第2の点92との間の間隔が大きくなると)、バットオブジェクト60の振りが遅くなる。
すなわち、第2の領域オブジェクト104の半径R2が小さい場合と、第2の領域オブジェクト104の半径R2が大きい場合とを比較すると、バットオブジェクト60の先端部分60aを同じ距離だけ移動させるために必要な第2の点92の移動量は、第2の領域オブジェクト104の半径R2が大きい場合の方が大きくなる。つまり、第2の領域オブジェクト104の半径R2が大きい場合の方が、第2の領域オブジェクト104の半径R2が小さい場合に比べて、バットオブジェクト60の先端部分60aの移動速度(ヘッドスピード)が遅くなる。
ゲーム装置10によれば、ユーザが左スティック44L及び右スティック44Rを同じように操作しても、バットオブジェクト60の種別(材質又は重さ)が異なると、バットオブジェクト60の振りの速さ(スイングスピード)が異なるようになる。このため、ゲーム装置10によれば、バットオブジェクト60の種別(材質又は重さ)によって、バットオブジェクト60の振りが速くなったり、遅くなったりすることをユーザに実感させることが可能になる。すなわち、打者キャラクタ58のバットオブジェクト60の振り方がバットオブジェクト60の種別(材質又は重さ)によって影響を受けることをユーザに実感させることが可能になる。その結果、打者キャラクタ58が持っているバットオブジェクト60に関する操作の操作性を向上することが可能になる。
[変形例]
なお、本発明は以上に説明した実施の形態に限定されるものではない。
(1)例えば、間隔設定部76は、第1の点90と第2の点92との間の間隔を、バットオブジェクト60の種別(材質又は重さ)と、打者キャラクタ58のバットオブジェクト60の持ち方と、に基づいて設定するようにしてもよい。
ここで、「打者キャラクタ58のバットオブジェクト60の持ち方」とは、例えば、打者キャラクタ58がバットオブジェクト60を短く持っているか、又は、打者キャラクタ58がバットオブジェクト60を長く持っているかを意味する。なお、「打者キャラクタ58がバットオブジェクト60を短く持っている」とは、打者キャラクタ58の左手58r及び右手58rの位置と、バットオブジェクト60の先端部分60aと、の間の距離が比較的短くなるように、打者キャラクタ58がバットオブジェクト60を持っている場合を意味する。
この変形例(1)における間隔設定部76は、第2の領域(第2の領域オブジェクト104)の設定を、バットオブジェクト60の種別と、打者キャラクタ58のバットオブジェクト60の持ち方と、に基づいて変えることによって、第1の点90と第2の点92との間の間隔を設定する。より具体的には、間隔設定部76は第2の領域オブジェクト104の半径R2を、バットオブジェクト60の種別と、打者キャラクタ58のバットオブジェクト60の持ち方と、に基づいて変える。
図13は第2の領域オブジェクト104の半径R2を制御するためのデータの一例を示す図である。図13に示すデータは、バットオブジェクト60の種別と、バットオブジェクト60の持ち方と、第2の領域オブジェクト104の半径R2と、を対応づけたデータになっている。なお、図13に示すデータにおいて、Ra,Rb,Rc,及びRdは半径の長さを示す所定の数値である。Ra,Rb,Rc,及びRdはRa>Rb>Rc>Rdの関係を有している。
ところで、第1の点90と第2の点92との間の間隔は第2の領域オブジェクト104の半径R2によって設定されるため、図13に示すデータは、バットオブジェクト60の種別に関する情報と、バットオブジェクト60の持ち方に関する情報と、第1の点90と第2の点92との間の間隔の設定に関する情報と、を対応づけたデータということができる。
図13に示すデータでは、図11に示すデータと同様に、バットオブジェクト60が木製バットである場合の半径R2(Ra,Rb)が、バットオブジェクト60が金属バットである場合の半径R2(Rc,Rd)に比べて長くなっている。
さらに、図13に示すデータでは、打者キャラクタ58がバットオブジェクト60を長く持つ場合の半径R2(例えばRa)が、打者キャラクタ58がバットオブジェクト60を短く持つ場合の半径R2(例えばRb)に比べて長くなっている。その結果、打者キャラクタ58がバットオブジェクト60を長く持つ場合と打者キャラクタ58がバットオブジェクト60を短く持つ場合とで、バットオブジェクト60の位置及び姿勢が同じである場合(すなわち、第1の点90の位置が同じで、かつ、バットオブジェクト60の長手方向が同じである場合)の第1の点90と第2の点92との間の間隔を比較すると、打者キャラクタ58がバットオブジェクト60を長く持つ場合の方が、打者キャラクタ58がバットオブジェクト60を短く持つ場合に比べて、第1の点90と第2の点92との間の間隔が長くなるようになっている。その結果、打者キャラクタ58がバットオブジェクト60を長く持つ場合の方が、打者キャラクタ58がバットオブジェクト60を短く持つ場合に比べて、バットオブジェクト60の先端部分60aの移動速度(ヘッドスピード)が遅くなるようになっている。
この変形例(1)では、間隔設定部76は、バットオブジェクト60の種別と、バットオブジェクト60の持ち方と、図13に示すデータと、に基づいて、第2の領域オブジェクト104の半径R2を設定する。
この変形例(1)によれば、バットオブジェクト60の持ち方によって、バットオブジェクト60の振りが速くなったり、遅くなったりすることをユーザに実感させることが可能になる。すなわち、打者キャラクタ58のバットオブジェクト60の振り方がバットオブジェクト60の持ち方によって影響を受けることをユーザに実感させることが可能になる。その結果、打者キャラクタ58が持っているバットオブジェクト60に関する操作の操作性を向上することが可能になる。
なお、間隔設定部76は、第1の点90と第2の点92との間の間隔を、バットオブジェクト60の種別に関係なく、打者キャラクタ58のバットオブジェクト60の持ち方のみに基づいて設定するようにしてもよい。この場合、例えば図14に示すようなデータに基づいて、第2の領域オブジェクト104の半径R2を設定するようにすればよい。
(2)例えば、間隔設定部76は、第1の点90と第2の点92との間の間隔を、バットオブジェクト60の種別(材質又は重さ)と、打者キャラクタ58の疲労度パラメータと、に基づいて設定するようにしてもよい。
ここで、「疲労度パラメータ」とは、打者キャラクタ58の疲労度を示すパラメータである。例えば、打者キャラクタ58の疲労度が高くなるほど、疲労度パラメータの値も大きくなる。また、疲労度パラメータは、時間経過と、打者キャラクタ58が行った行動と、のうちの少なくとも一方に基づいて増加される。例えば、疲労度パラメータの値は時間経過に伴って増加する。また例えば、疲労度パラメータの値は打者キャラクタ58が行動するごとに増加する。なお、疲労度パラメータはゲームデータ記憶部70に記憶される。
この変形例(2)における間隔設定部76は、第2の領域(第2の領域オブジェクト104)の設定を、バットオブジェクト60の種別と、打者キャラクタ58の疲労度パラメータと、に基づいて変えることによって、第1の点90と第2の点92との間の間隔を設定する。より具体的には、間隔設定部76は、第2の領域オブジェクト104の半径R2を、バットオブジェクト60の種別と、打者キャラクタ58の疲労度パラメータと、に基づいて変える。
図15は第2の領域オブジェクト104の半径R2を制御するためのデータの一例を示す図である。図15に示すデータは、バットオブジェクト60の種別と、打者キャラクタ58の疲労度パラメータと、第2の領域オブジェクト104の半径R2と、を対応づけたデータになっている。なお、図15に示すデータにおいて、Ra,Rb,Rc,及びRdは半径の長さを示す所定の数値である。Ra,Rb,Rc,及びRdはRa>Rb>Rc>Rdの関係を有している。
ところで、第1の点90と第2の点92との間の間隔は第2の領域オブジェクト104の半径R2によって設定されるため、図13に示すデータは、バットオブジェクト60の種別に関する情報と、打者キャラクタ58の疲労度に関する情報と、第1の点90と第2の点92との間の間隔の設定に関する情報と、を対応づけたデータということができる。
図15に示すデータでは、図11に示すデータと同様に、バットオブジェクト60が木製バットである場合の半径R2(Ra,Rb)が、バットオブジェクト60が金属バットである場合の半径R2(Rc,Rd)に比べて長くなっている。
さらに、図15に示すデータでは、疲労度パラメータの値が大きい場合の半径R2(例えばRa)が、疲労度パラメータの値が小さい場合の半径R2(例えばRb)に比べて長くなっている。その結果、疲労度パラメータの値が大きい場合と疲労度パラメータの値が小さい場合とで、バットオブジェクト60の位置及び姿勢が同じである場合(すなわち、第1の点90の位置が同じで、かつ、バットオブジェクト60の長手方向が同じである場合)の第1の点90と第2の点92との間の間隔を比較すると、疲労度パラメータの値が大きい場合の方が、疲労度パラメータの値が小さい場合に比べて、第1の点90と第2の点92との間の間隔が長くなるようになっている。その結果、打者キャラクタ58の疲労度パラメータの値が大きい場合の方が、疲労度パラメータの値が小さい場合に比べて、バットオブジェクト60の先端部分60aの移動速度(ヘッドスピード)が遅くなるようになっている。
この変形例(2)では、間隔設定部76は、バットオブジェクト60の種別と、打者キャラクタ58の疲労度パラメータと、図15に示すデータと、に基づいて、第2の領域オブジェクト104の半径R2を設定する。
この変形例(2)によれば、打者キャラクタ58の疲労度によって、バットオブジェクト60の振りが速くなったり、遅くなったりすることをユーザに実感させることが可能になる。すなわち、打者キャラクタ58のバットオブジェクト60の振り方が打者キャラクタ58の疲労度によって影響を受けることをユーザに実感させることが可能になる。その結果、打者キャラクタ58が持っているバットオブジェクト60に関する操作の操作性を向上することが可能になる。
なお、疲労度パラメータの代わりに、打者キャラクタ58の体力の残りを示す体力パラメータを用いるようにしてもよい。例えば、体力パラメータの値は、打者キャラクタ58の体力の残りが多いほど大きくなる。また、体力パラメータは、時間経過と、打者キャラクタ58が行った行動と、のうちの少なくとも一方に基づいて減少される。例えば、体力パラメータの値は時間経過に伴って減少する。また例えば、体力パラメータの値は打者キャラクタ58が行動するごとに減少する。なお、体力パラメータの値が比較的大きい場合とは、疲労度パラメータの値が比較的小さい場合に相当し、体力パラメータの値が比較的小さい場合とは、疲労度パラメータの値が比較的大きい場合に相当する。
また、疲労度パラメータの代わりに、打者キャラクタ58の腕力を示す腕力パラメータを用いるようにしてもよい。例えば、腕力パラメータの値は、打者キャラクタ58の腕力が強いほど大きくなる。なお、打者キャラクタ58の腕力が疲れによって下がるようにしてもよい。すなわち、腕力パラメータは、時間経過と、打者キャラクタ58が行った行動と、のうちの少なくとも一方に基づいて減少されるようにしてもよい。なお、この場合、腕力パラメータの値が比較的大きい場合とは、疲労度パラメータの値が比較的小さい場合に相当し、腕力パラメータの値が比較的小さい場合とは、疲労度パラメータの値が比較的大きい場合に相当する。
また、間隔設定部76は、第1の点90と第2の点92との間の間隔を、バットオブジェクト60の種別に関係なく、打者キャラクタ58の疲労度パラメータ(又は体力パラメータ)のみに基づいて設定するようにしてもよい。この場合、例えば図16に示すようなデータに基づいて、第2の領域オブジェクト104の半径R2を設定するようにすればよい。
(3)例えば、第1の点90はバットオブジェクト60のグリップ部分60l以外の部分に対応するようにしてもよい。例えば、第1の点90は、バットオブジェクト60のグリップ部分60rに対応するようにしてもよい。この場合、第1の領域オブジェクト100(すなわち、第1の領域)の形状、大きさ、及び打者キャラクタ58との位置関係は、打者キャラクタ58の右手60rが届く領域を考慮して設定される。
(4)例えば、左スティック44Lの代わりに他の操作部材が用いられるようにしてもよい。例えば方向ボタン群40が用いられるようにしてもよい。この場合、第1の点制御部72は、方向ボタン群40の押下状態に基づいて第1の点90を移動させる。
なお、コントローラ30は、方向ボタン群40の代わりに、十字形状を有する十字ボタンを備えるようにしてもよい。例えば、十字ボタンは、上方向に対応する上押下部と、下方向に対応する下押下部と、左方向に対応する左押下部と、右方向に対応する右押下部と、が一体的に形成されたボタンである。
また、方向ボタン群40ではなく、ボタン42A,42B,42X,42Yが左スティック44Lの代わりに用いられるようにしてもよい。この場合、ボタン42Yが上方向ボタン40Uに相当し、ボタン42Aが下方向ボタン40Dに相当すると考えるようにすればよい。また、ボタン42Xが左方向ボタン40Lに相当し、ボタン42Bが右方向ボタン40Rに相当すると考えるようにすればよい。
左スティック44Lと同様、右スティック44Rの代わりに他の操作部材が用いられるようにしてもよい。
(5)例えば、本発明は野球ゲーム以外のゲームにも適用することができる。例えば、ユーザによって操作されるゲームキャラクタが武器オブジェクト(例えば剣オブジェクト等)を振るようなアクションゲームにも適用することができる。