(58)【調査した分野】(Int.Cl.,DB名)
表示装置の画面上の位置を指示するための操作装置から取得した操作情報に基づいて所定の処理を実行するゲーム装置のコンピュータに実行させるゲームプログラムであって、
前記コンピュータを、
前記操作情報に基づいて、前記操作装置が指示する指示位置を繰り返し算出する指示位置算出手段と、
前記指示位置の変化量を算出する変化量算出手段と、
前記指示位置の変化量が第1の条件を満たしたか否かを判定する第1の判定手段と、
前記第1の判定手段によって前記指示位置の変化量が前記第1の条件を満たしていると判定されたときは、前記指示位置または当該指示位置に基づいて特定される位置において第1の処理を実行させ、当該変化量が当該第1の条件を満たしていないと判定されたときは、前記第1の処理とは異なる処理であって、前記指示位置に基づく処理である第2の処理を実行させる処理実行手段として機能させ、
前記処理実行手段は、前記第1の処理として、前記指示位置または当該指示位置に基づいて特定される位置に所定のオブジェクトを描画し、前記第2の処理として、前記指示位置または当該指示位置に基づいて特定される位置にカーソルを描画する、ゲームプログラム。
前記ゲームプログラムは、前記コンピュータを、前記変化量算出手段によって算出された前記指示位置の変化量が第2の条件を満たしたか否かを判定する第2の判定手段として更に機能させ、
前記処理実行手段は、前記第1の判定手段によって前記指示位置の変化量が前記第1の条件を満たしたと判定されたときに前記第1の処理の実行を開始させ、前記第2の判定手段によって前記指示位置の変化量が前記第2の条件を満たしたと判定されたときに前記第1の処理の実行を終了させる、請求項1に記載のゲームプログラム。
前記第1の条件は、前記指示位置の変化量が第1の所定値以上であることを含み、前記第2の条件は、前記指示位置の変化量が第2の所定値以下であることを含む、請求項2に記載のゲームプログラム。
前記ゲームプログラムは、前記コンピュータを、前記指示位置が前記画面として割り当てられている範囲に含まれているか否かを判定する画面内指示判定手段として更に機能させ、
前記処理実行手段は、前記操作装置による指示位置が前記画面として割り当てられている範囲に含まれていると前記画面内指示判定手段で判定され、かつ、前記指示位置の変化量が前記第1の条件を満たしていると前記第1の判定手段で判定されたときに前記第1の処理の実行を開始させる、請求項1に記載のゲームプログラム。
前記ゲームプログラムは、前記コンピュータを、前記指示位置が前記画面として割り当てられている範囲に含まれているか否かを判定する画面内指示判定手段として更に機能させ、
前記処理実行手段は、前記第1の処理の実行を開始した後、前記画面内指示判定手段によって前記指示位置が前記画面として割り当てられている範囲に含まれていないと判定されたとき、前記第1の処理の実行を終了させる、請求項1に記載のゲームプログラム。
前記処理実行手段は、前記第1の処理として、前記指示位置または当該指示位置に基づいて特定される位置を時系列で結んだ軌跡を描画する、請求項1に記載のゲームプログラム。
前記移動方向算出手段は、前記指示位置または当該指示位置に基づいて特定される位置を前記仮想3次元空間内における前記指示位置または当該指示位置に基づいて特定される位置に対応する位置を示す3次元座標に変換し、仮想3次元空間内の所定の位置から当該3次元座標で示される位置に向かう方向を前記移動オブジェクトの移動方向として算出する、請求項10に記載のゲームプログラム。
前記処理実行手段は、前記第1の処理として、所定の条件が満たされるまで、前記移動方向算出手段および前記オブジェクト移動手段による処理を繰り返し実行する、請求項10に記載のゲームプログラム。
【発明を実施するための形態】
【0044】
以下、本発明の実施の形態について、図面を参照して説明する。尚、この実施例により本発明が限定されるものではない。
【0045】
(ゲームシステムの全体構成)
各実施形態の詳細を説明するに先立ち、まず、各実施形態で共通して使用されるゲーム装置を含むゲームシステム1について説明する。
図1は、ゲームシステム1の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。
図1において、ゲームシステム1は、テレビジョン受像器(以下、単に「テレビ」と記載する)2、ゲーム装置本体3、光ディスク4、コントローラ7、およびマーカ部8を含む。本システムは、コントローラ7を用いたゲーム操作に基づいてゲーム装置本体3でゲーム処理を実行するものである。
【0046】
ゲーム装置本体3には、当該ゲーム装置本体3に対して交換可能に用いられる情報記憶媒体の一例である光ディスク4が脱着可能に挿入される。光ディスク4には、ゲーム装置本体3において実行されるためのゲームプログラムが記憶されている。ゲーム装置本体3の前面には光ディスク4の挿入口が設けられている。ゲーム装置本体3は、挿入口に挿入された光ディスク4に記憶されたゲームプログラムを読み出して実行することによってゲーム処理を実行する。
【0047】
ゲーム装置本体3には、表示装置の一例であるテレビ2が接続コードを介して接続される。テレビ2には、ゲーム装置本体3において実行されるゲーム処理の結果得られるゲーム画像が表示される。また、テレビ2の画面の周辺(
図1では画面の上側)には、マーカ部8が設置される。マーカ部8は、その両端に2つのマーカ8Rおよび8Lを備えている。マーカ8R(マーカ8Lも同様)は、具体的には1以上の赤外LEDであり、テレビ2の前方に向かって赤外光を出力する。マーカ部8はゲーム装置本体3に接続されており、ゲーム装置本体3はマーカ部8が備える各赤外LEDの点灯を制御することが可能である。
【0048】
コントローラ7は、当該コントローラ7自身に対して行われた操作の内容を示す操作データをゲーム装置本体3に与える入力装置である。コントローラ7とゲーム装置本体3とは無線通信によって接続される。本実施形態では、コントローラ7とゲーム装置本体3との間の無線通信には例えばBluetooth(ブルートゥース)(登録商標)の技術が用いられる。なお、他の実施形態においてはコントローラ7とゲーム装置本体3とは有線で接続されてもよい。
【0049】
(ゲーム装置本体3の内部構成)
次に、
図2を参照して、ゲーム装置本体3の内部構成について説明する。
図2は、ゲーム装置本体3の構成を示すブロック図である。ゲーム装置本体3は、CPU10、システムLSI11、外部メインメモリ12、ROM/RTC13、ディスクドライブ14、およびAV−IC15等を有する。
【0050】
CPU10は、光ディスク4に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。CPU10は、システムLSI11に接続される。システムLSI11には、CPU10の他、外部メインメモリ12、ROM/RTC13、ディスクドライブ14およびAV−IC15が接続される。システムLSI11は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムLSIの内部構成について後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置本体3の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC:Real Time Clock)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ11eまたは外部メインメモリ12に読み出したデータを書き込む。
【0051】
また、システムLSI11には、入出力プロセッサ11a、GPU(Graphics Processor Unit)11b、DSP(Digital Signal Processor)11c、VRAM11d、および内部メインメモリ11eが設けられる。図示は省略するが、これらの構成要素11a〜11eは内部バスによって互いに接続される。
【0052】
GPU11bは、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。より具体的には、GPU11bは、当該グラフィクスコマンドに従って3Dグラフィックスの表示に必要な計算処理、例えば、レンダリングの前処理にあたる3D座標から2D座標への座標変換などの処理や、テクスチャの張り込みなどの最終的なレンダリング処理を行うことで、ゲーム画像データを生成する。ここで、CPU10は、グラフィクスコマンドに加えて、ゲーム画像データの生成に必要な画像生成プログラムをGPU11bに与える。VRAM11dは、GPU11bがグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU11bは、VRAM11dに記憶されたデータを用いて画像データを作成する。
【0053】
DSP11cは、オーディオプロセッサとして機能し、内部メインメモリ11eや外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。また、内部メインメモリ11eは、外部メインメモリ12と同様に、プログラムや各種データを記憶したり、CPU10のワーク領域やバッファ領域としても用いられる。
【0054】
上述のように生成された画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、読み出した画像データをAVコネクタ16を介してテレビ2に出力するとともに、読み出した音声データを、テレビ2に内蔵されるスピーカ2aに出力する。これによって、画像がテレビ2に表示されるとともに音がスピーカ2aから出力される。
【0055】
入出力プロセッサ(I/Oプロセッサ)11aは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ11aは、フラッシュメモリ17、無線通信モジュール18、無線コントローラモジュール19、拡張コネクタ20、およびメモリカード用コネクタ21に接続される。無線通信モジュール18にはアンテナ22が接続され、無線コントローラモジュール19にはアンテナ23が接続される。
【0056】
入出力プロセッサ11aは、無線通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ11aは、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール18およびアンテナ22を介してネットワークに送信する。また、入出力プロセッサ11aは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22および無線通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10はゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置本体3と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置本体3を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。
【0057】
また、入出力プロセッサ11aは、コントローラ7から送信される操作データをアンテナ23および無線コントローラモジュール19を介して受信し、内部メインメモリ11eまたは外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
【0058】
さらに、入出力プロセッサ11aには、拡張コネクタ20およびメモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール18に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ11aは、拡張コネクタ20やメモリカード用コネクタ21を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【0059】
ゲーム装置本体3には、電源ボタン24、リセットボタン25、およびイジェクトボタン26が設けられる。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンにされると、ゲーム装置本体3の各構成要素に対して、図示しないACアダプタを経て電源が供給される。また、一旦電源がオンにされた状態で、再度電源ボタン24を押すと、低電力スタンバイモードへの移行が行われる。この状態でも、ゲーム装置本体3への通電は行われているため、インターネット等のネットワークに常時接続しておくことができる。なお、一旦電源がオンにされた状態で、電源をオフにしたいときは、電源ボタン24を所定時間以上長押しすることで、電源をオフとすることが可能である。リセットボタン25が押されると、システムLSI11は、ゲーム装置本体3の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
【0060】
次に、
図3および
図4を参照して、コントローラ7について説明する。なお、
図3は、コントローラ7の上面後方から見た斜視図である。
図4は、コントローラ7を下面前方から見た斜視図である。
【0061】
図3および
図4において、コントローラ7は、ハウジング71と、当該ハウジング71の表面に設けられた複数個の操作ボタンで構成される操作部72とを備える。本実施例のハウジング71は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさであり、例えばプラスチック成型によって形成されている。
【0062】
ハウジング71上面の中央前面側に、十字キー72aが設けられる。この十字キー72aは、十字型の4方向プッシュスイッチであり、4つの方向(前後左右)に対応する操作部分が十字の突出片にそれぞれ90°間隔で配置される。プレイヤが十字キー72aのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー72aを操作することによって、仮想ゲーム世界に登場するプレイヤオブジェクト等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
【0063】
なお、十字キー72aは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に4つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記4つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、4つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング71上面から突出した傾倒可能なスティック(いわゆる、ジョイスティック)を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー72aの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー72aの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー72aの代わりに設けてもかまわない。
【0064】
ハウジング71上面の十字キー72aより後面側に、複数の操作ボタン72b〜72gが設けられる。操作ボタン72b〜72gは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン72b〜72gに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン72b〜72dには、1番ボタン、2番ボタン、およびAボタン等としての機能が割り当てられる。また、操作ボタン72e〜72gには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン72a〜72gは、ゲーム装置本体3が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、
図3に示した配置例では、操作ボタン72b〜72dは、ハウジング71上面の中央前後方向に沿って並設されている。また、操作ボタン72e〜72gは、ハウジング71上面の左右方向に沿って操作ボタン72bおよび72dの間に並設されている。そして、操作ボタン72fは、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0065】
また、ハウジング71上面の十字キー72aより前面側に、操作ボタン72hが設けられる。操作ボタン72hは、遠隔からゲーム装置本体3本体の電源をオン/オフする電源スイッチである。この操作ボタン72hも、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0066】
また、ハウジング71上面の操作ボタン72cより後面側に、複数のLED702が設けられる。ここで、コントローラ7は、他のコントローラ7と区別するためにコントローラ種別(番号)が設けられている。例えば、LED702は、コントローラ7に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ7からゲーム装置本体3へ送信データを送信する際、上記コントローラ種別に応じて複数のLED702のうち、種別に対応するLEDが点灯する。
【0067】
また、ハウジング71上面には、操作ボタン72bおよび操作ボタン72e〜72gの間に後述するスピーカ(
図5のスピーカ706)からの音を外部に放出するための音抜き孔が形成されている。
【0068】
一方、ハウジング71下面には、凹部が形成されている。後述で明らかとなるが、ハウジング71下面の凹部は、プレイヤがコントローラ7の前面をマーカ8Lおよび8Rに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン72iが設けられる。操作ボタン72iは、例えばBボタンとして機能する操作部である。
【0069】
また、ハウジング71前面には、撮像情報演算部74の一部を構成する撮像素子743が設けられる。ここで、撮像情報演算部74は、コントローラ7が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大200フレーム/秒程度のサンプリング周期であるため比較的高速なコントローラ7の動きでも追跡して解析することができる。この撮像情報演算部74の詳細な構成については、後述する。また、ハウジング71の後面には、コネクタ73が設けられている。コネクタ73は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【0070】
ここで、以下の説明を具体的にするために、コントローラ7に対して設定する座標系について定義する。
図3および
図4に示すように、互いに直交するxyz軸をコントローラ7に対して定義する。具体的には、コントローラ7の前後方向となるハウジング71の長手方向をz軸とし、コントローラ7の前面(撮像情報演算部74が設けられている面)方向をz軸正方向とする。また、コントローラ7の上下方向をy軸とし、ハウジング71の上面(操作ボタン72a等が設けられた面)方向をy軸正方向とする。さらに、コントローラ7の左右方向をx軸とし、ハウジング71の左側面(
図3では表されずに
図4で表されている側面)方向をx軸正方向とする。
【0071】
次に、
図5および
図6を参照して、コントローラ7の内部構造について説明する。なお、
図5は、コントローラ7の上ハウジング(ハウジング71の一部)を外した状態を後面側から見た斜視図である。
図6は、コントローラ7の下ハウジング(ハウジング71の一部)を外した状態を前面側から見た斜視図である。ここで、
図6に示す基板700は、
図5に示す基板700の裏面から見た斜視図となっている。
【0072】
図5において、ハウジング71の内部には基板700が固設されており、当該基板700の上主面上に操作ボタン72a〜72h、加速度センサ701、LED702、およびアンテナ754等が設けられる。そして、これらは、基板700等に形成された配線(図示せず)によってマイコン751等(
図6、
図7参照)に接続される。マイコン751は本願発明のボタンデータ発生手段の一例として、操作ボタン72a等の種類に応じた操作ボタンデータを発生させるように機能する。この仕組みは公知技術であるが、例えばキートップ下側に配置されたタクトスイッチなどのスイッチ機構による配線の接触/切断をマイコン751が検出することによって実現されている。より具体的には、操作ボタンが例えば押されると配線が接触して通電するので、この通電がどの操作ボタンにつながっている配線で発生したかをマイコン751が検出し、操作ボタンの種類に応じた信号を発生させている。
【0073】
また、コントローラ7は、無線モジュール753(
図7参照)およびアンテナ754によって、ワイヤレスコントローラとして機能する。なお、ハウジング71内部には図示しない水晶振動子が設けられており、後述するマイコン751の基本クロックを生成する。また、基板700の上主面上に、スピーカ706およびアンプ708が設けられる。また、加速度センサ701は、操作ボタン72dの左側の基板700上(つまり、基板700の中央部ではなく周辺部)に設けられる。したがって、加速度センサ701は、コントローラ7の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分の含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ7の回転を良好な感度でゲーム装置本体3等が判定することができる。
【0074】
一方、
図6において、基板700の下主面上の前端縁に撮像情報演算部74が設けられる。撮像情報演算部74は、コントローラ7の前方から順に赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744によって構成されており、それぞれ基板700の下主面に取り付けられる。また、基板700の下主面上の後端縁にコネクタ73が取り付けられる。さらに、基板700の下主面上にサウンドIC707およびマイコン751が設けられている。サウンドIC707は、基板700等に形成された配線によってマイコン751およびアンプ708と接続され、ゲーム装置本体3から送信されたサウンドデータに応じてアンプ708を介してスピーカ706に音声信号を出力する。
【0075】
そして、基板700の下主面上には、バイブレータ704が取り付けられる。バイブレータ704は、例えば振動モータやソレノイドである。バイブレータ704は、基板700等に形成された配線によってマイコン751と接続され、ゲーム装置本体3から送信された振動データに応じてその作動をオン/オフする。バイブレータ704が作動することによってコントローラ7に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ704は、ハウジング71のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング71が大きく振動することになり、振動を感じやすくなる。
【0076】
次に、
図7を参照して、コントローラ7の内部構成について説明する。なお、
図7は、コントローラ7の構成を示すブロック図である。
【0077】
図7において、コントローラ7は、上述した操作部72、撮像情報演算部74、加速度センサ701、バイブレータ704、スピーカ706、サウンドIC707、およびアンプ708の他に、その内部に通信部75を備えている。
【0078】
撮像情報演算部74は、赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744を含んでいる。赤外線フィルタ741は、コントローラ7の前方から入射する光から赤外線のみを通過させる。ここで、モニタ2の表示画面近傍に配置されるマーカ8Lおよび8Rは、モニタ2の前方に向かって赤外光を出力する赤外LEDである。したがって、赤外線フィルタ741を設けることによってマーカ8Lおよび8Rの画像をより正確に撮像することができる。レンズ742は、赤外線フィルタ741を透過した赤外線を集光して撮像素子743へ入射させる。撮像素子743は、例えばCMOSセンサやあるいはCCDのような固体撮像素子であり、レンズ742が集光した赤外線を撮像する。したがって、撮像素子743は、赤外線フィルタ741を通過した赤外線だけを撮像して画像データを生成する。以下では、撮像素子743によって撮像された画像を撮像画像と呼ぶ。撮像素子743によって生成された画像データは、画像処理回路744で処理される。画像処理回路744は、撮像画像内における撮像対象(マーカ8Lおよび8R)の位置を算出する。以下、
図8を用いて撮像対象の位置の算出方法を説明する。
【0079】
図8は、撮像画像の一例を示す図である。
図8に示す撮像画像においては、マーカ8Lの画像8L'およびマーカ8Rの画像8R'が左右に並んでいる。撮像画像が入力されると、まず、画像処理回路744は、撮像画像内において所定条件に合致する領域の位置を示す座標を当該領域毎に算出する。ここで、所定条件とは、撮像対象の画像(対象画像)を特定するための条件であり、所定条件の具体的な内容は、輝度が所定値以上の領域(高輝度領域)であり、かつ、領域の大きさが所定範囲内の大きさであることである。なお、所定条件は撮像対象を特定するための条件であればよく、他の実施形態においては、画像の色に関する条件を含んでいてもよい。
【0080】
対象画像の位置を算出する際、まず、画像処理回路744は、撮像画像の領域から上記高輝度領域を対象画像の候補として特定する。撮像画像の画像データにおいて対象画像は高輝度領域として現れるからである。次に、画像処理回路744は、特定された高輝度領域の大きさに基づいて、その高輝度領域が対象画像であるか否かを判定する判定処理を行う。撮像画像には、対象画像である2つのマーカ8Lおよび8Rの画像8L'および8R'の他、窓からの太陽光や部屋の蛍光灯の光によって対象画像以外の画像が含まれている場合がある。この場合、マーカ8Lおよび8Rの画像8L'および8R'以外の画像も高輝度領域として現れてしまう。上記の判定処理は、対象画像であるマーカ8Lおよび8Rの画像8L'および8R'とそれ以外の画像とを区別し、対象画像を正確に特定するための処理である。具体的には、当該判定処理においては、特定された高輝度領域が、予め定められた所定範囲内の大きさであるか否かが判定される。そして、高輝度領域が所定範囲内の大きさである場合、当該高輝度領域は対象画像を表すと判定され、高輝度領域が所定範囲内の大きさでない場合、当該高輝度領域は対象画像以外の画像を表すと判定される。
【0081】
さらに、上記の判定処理の結果、対象画像を表すと判定された高輝度領域について、画像処理回路744は当該高輝度領域の位置を算出する。具体的には、当該高輝度領域の重心位置を算出する。なお、重心位置は撮像素子743の解像度よりも詳細なスケールで算出することが可能である。ここでは、撮像素子743によって撮像された撮像画像の解像度が126×96であるとし、重心位置は1024×768のスケールで算出されるものとする。つまり、重心位置の座標は、(0,0)から(1024,768)までの整数値で表現される。なお、撮像画像における位置は、
図8に示すように、撮像画像の左上を原点とし、下向きをy軸正方向とし、右向きをx軸正方向とする座標系(xy座標系)で表現されるものとする。
【0082】
以上のようにして、画像処理回路744は、撮像画像内において所定条件に合致する領域の位置を示す座標を当該領域毎に算出する。なお、以下では、画像処理回路744によって算出される座標をマーカ座標と呼ぶ。マーカ座標は、撮像画像に対応する平面上の位置を表すための座標系において撮像対象の位置を示す座標である。画像処理回路744は、マーカ座標を通信部75のマイコン751へ出力する。マーカ座標のデータは、マイコン751によって操作データとしてゲーム装置本体3に送信される。マーカ座標はコントローラ7自体の向き(姿勢)や位置に対応して変化するので、ゲーム装置本体3は当該座標値を用いてコントローラ7の向きや位置を算出することができる。なお、本実施形態では、撮像画像からマーカ座標を算出する処理までをコントローラ7の画像処理回路744および/またはマイコン751で行ったが、例えば撮像画像をゲーム装置本体3に送り、以降の処理と同等の処理をゲーム装置本体3のCPU10等で行わせることもできる。
【0083】
コントローラ7は、3軸(x、y、z軸)の加速度センサ701を備えていることが好ましい。この3軸の加速度センサ701は、3方向、すなわち、上下方向、左右方向、および前後方向で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、上下および左右方向(または他の対になった方向)のそれぞれに沿った直線加速度のみを検知する2軸の加速度検出手段を使用してもよい。例えば、この3軸または2軸の加速度センサ701は、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能であるタイプのものでもよい。加速度センサ701は、シリコン微細加工されたMEMS(Micro Electro Mechanical Systems:微小電子機械システム)の技術に基づいた静電容量式(静電容量結合式)であってもよい。しかしながら、既存の加速度検出手段の技術(例えば、圧電方式や圧電抵抗方式)あるいは将来開発される他の適切な技術を用いて3軸または2軸の加速度センサ701が提供されてもよい。
【0084】
当業者には公知であるように、加速度センサ701に用いられるような加速度検出手段は、加速度センサの持つ各軸に対応する直線に沿った加速度(直線加速度)のみを検知することができる。つまり、加速度センサ701からの直接の出力は、その2軸または3軸のそれぞれに沿った直線加速度(静的または動的)を示す信号である。このため、加速度センサ701は、非直線状(例えば、円弧状)の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【0085】
しかしながら、加速度センサ701から出力される加速度の信号に基づいて、ゲーム装置のプロセッサ(例えばCPU10)またはコントローラ7のプロセッサ(例えばマイコン751)などのコンピュータが処理を行うことによって、コントローラ7に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサ701を搭載するコントローラ7が静的な状態であることを前提としてコンピュータ側で処理する場合(すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理する場合)、コントローラ7が現実に静的な状態であれば、検出された加速度に基づいてコントローラの姿勢が重力方向に対して傾いているか否か又はどの程度傾いているかを知ることができる。具体的には、加速度センサ701の検出軸が鉛直下方向を向いている状態を基準としたとき、1G(重力加速度)がかかっているか否かだけで傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかも知ることができる。また、多軸の加速度センサの場合には、さらに各軸の加速度の信号に対して処理を施すことによって、各軸が重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ701からの出力に基づいて、プロセッサがコントローラ7の傾き角度のデータを算出する処理をおこなってもよいが、当該傾き角度のデータを算出する処理をおこなうことなく、加速度センサ701からの出力に基づいて、おおよその傾き具合を推定するような処理としてもよい。このように、加速度センサ701をプロセッサと組み合わせて用いることによって、コントローラ7の傾き、姿勢または位置を判定することができる。一方、加速度センサが動的な状態であることを前提とする場合には、重力加速度成分に加えて加速度センサの動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、動き方向などを知ることができる。具体的には、加速度センサ701を備えるコントローラ7がユーザの手で動的に加速されて動かされる場合に、加速度センサ701によって生成される加速度信号を処理することによって、コントローラ7のさまざまな動きおよび/または位置を算出することができる。なお、加速度センサが動的な状態であることを前提とする場合であっても、加速度センサの動きに応じた加速度を所定の処理により除去すれば、重力方向に対する傾きを知ることが可能である。他の実施例では、加速度センサ701は、信号をマイコン751に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサが静的な加速度(例えば、重力加速度)を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。
【0086】
他の実施形態の例では、コントローラ7の動きを検出する動きセンサとして、回転素子または振動素子などを内蔵したジャイロセンサを用いてもよい。この実施形態で使用されるMEMSジャイロセンサの一例として、アナログ・デバイセズ株式会社から入手可能なものがある。加速度センサ701と異なり、ジャイロセンサは、それが内蔵する少なくとも一つのジャイロ素子の軸を中心とした回転(または角速度)を直接検知することができる。このように、ジャイロセンサと加速度センサとは基本的に異なるので、個々の用途のためにいずれの装置が選択されるかによって、これらの装置からの出力信号に対して行う処理を適宜変更する必要がある。
【0087】
具体的には、加速度センサの代わりにジャイロセンサを用いて傾きや姿勢を算出する場合には、大幅な変更を行う。すなわち、ジャイロセンサを用いる場合、検出開始の状態において傾きの値を初期化する。そして、当該ジャイロセンサから出力される角速度データを積分する。次に、初期化された傾きの値からの傾きの変化量を算出する。この場合、算出される傾きは、角度に対応する値が算出されることになる。一方、加速度センサによって傾きを算出する場合には、重力加速度のそれぞれの軸に関する成分の値を、所定の基準と比較することによって傾きを算出するので、算出される傾きはベクトルで表すことが可能であり、初期化を行わずとも、加速度検出手段を用いて検出される絶対的な方向を検出することが可能である。また、傾きとして算出される値の性質は、ジャイロセンサが用いられる場合には角度であるのに対して、加速度センサが用いられる場合にはベクトルであるという違いがある。したがって、加速度センサに代えてジャイロセンサが用いられる場合、当該傾きのデータに対して、2つのデバイスの違いを考慮した所定の変換を行う必要がある。加速度検出手段とジャイロセンサとの基本的な差異と同様にジャイロセンサの特性は当業者に公知であるので、本明細書ではさらなる詳細を省略する。ジャイロセンサは、回転を直接検知できることによる利点を有する一方、一般的には、加速度センサは、本実施形態で用いるようなコントローラに適用される場合、ジャイロセンサに比べて費用効率が良いという利点を有する。
【0088】
通信部75は、マイクロコンピュータ(Micro Computer:マイコン)751、メモリ752、無線モジュール753、およびアンテナ754を含んでいる。マイコン751は、処理の際にメモリ752を記憶領域として用いながら、送信データを無線送信する無線モジュール753を制御する。また、マイコン751は、アンテナ754を介して無線モジュール753が受信したゲーム装置本体3からのデータに応じて、サウンドIC707およびバイブレータ704の動作を制御する。サウンドIC707は、通信部75を介してゲーム装置本体3から送信されたサウンドデータ等を処理する。また、マイコン751は、通信部75を介してゲーム装置本体3から送信された振動データ(例えば、バイブレータ704をONまたはOFFする信号)等に応じて、バイブレータ704を作動させる。
【0089】
コントローラ7に設けられた操作部72からの操作信号(キーデータ)、加速度センサ701からの加速度信号(x、y、およびz軸方向加速度データ;以下、単に加速度データと記載する)、および撮像情報演算部74からの処理結果データは、マイコン751に出力される。マイコン751は、入力した各データ(キーデータ、加速度データ、処理結果データ)を無線コントローラモジュール19へ送信する送信データとして一時的にメモリ752に格納する。ここで、通信部75から無線コントローラモジュール19への無線送信は、所定の周期毎に行われるが、ゲームの処理は1/60秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は16.7ms(1/60秒)であり、ブルートゥース(Bluetooth)で構成される通信部75の送信間隔は例えば5msである。マイコン751は、無線コントローラモジュール19への送信タイミングが到来すると、メモリ752に格納されている送信データを一連の操作情報として出力し、無線モジュール753へ出力する。そして、無線モジュール753は、例えばブルートゥースの技術に基づいて、所定周波数の搬送波を用いて操作情報で変調し、その電波信号をアンテナ754から放射する。つまり、コントローラ7に設けられた操作部72からのキーデータ、加速度センサ701からの加速度データ、および撮像情報演算部74からの処理結果データが無線モジュール753で電波信号に変調されてコントローラ7から送信される。そして、ゲーム装置本体3の無線コントローラモジュール19でその電波信号を受信し、ゲーム装置本体3で当該電波信号を復調や復号することによって、一連の操作情報(キーデータ、加速度データ、および処理結果データ)を取得する。そして、ゲーム装置本体3のCPU10は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥースの技術を用いて通信部75を構成する場合、通信部75は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【0090】
(第1の実施形態)
次に、第1の実施形態にかかるゲームの概要について、
図9〜
図27を用いて説明する。第1の実施形態で想定するゲームは、仮想3次元空間内を舞台にした剣劇ゲームである。
図9は、第1の実施形態で想定するゲームの画面の一例である。
図9において、ゲーム画面にはプレイヤオブジェクト101、カーソル102、敵オブジェクト103等が表示されている。本ゲームは、プレイヤオブジェクト101の後方に仮想カメラを配置した、いわゆる三人称視点でゲーム画面が描画される。そして、プレイヤオブジェクト101は、剣オブジェクト104を持っている。本ゲームは、プレイヤオブジェクト101が当該剣オブジェクト104を使って敵オブジェクト103を倒していくゲームである。
【0091】
次に、本ゲームでの操作について説明する。本ゲームでは、
図10に示すように、拡張コントローラ36をコントローラ7のコネクタ73に接続した形態でプレイヤオブジェクト101の操作を行う。ここで、拡張コントローラ36は、アナログ方式の入力が可能なアナログスティック39を備えている。そして、ゲームをプレイする際には、例えば
図11に示すように、プレイヤは、その右手でコントローラ7を持ち、その左手で拡張コントローラ36を持つ。このとき、プレイヤは、右手に持ったコントローラ7の前面(撮像情報演算部74が撮像する光の入射口側)がマーカ8Lおよび8Rの方向を向く状態でコントローラ7を把持する。この状態で、プレイヤは、コントローラ7の傾きを変化させたり、コントローラ7が指し示す画面上の位置(指示位置)を変更したり、コントローラ7と各マーカ8Lおよび8Rとの距離を変更したりすることによってゲーム操作を行うことができる。そして、本実施形態のゲームでは、左手に持った拡張コントローラ36を用いて、主にプレイヤオブジェクト101の移動操作を行い、右手に持ったコントローラ7を用いて、主にカーソル102の移動操作および剣オブジェクト104を用いた攻撃操作を行う。ここで、本ゲームは上述のように剣劇ゲームであり、プレイヤオブジェクト101の攻撃動作の内容は、剣オブジェクト104で敵オブジェクト103を「斬る」動作となる。そのため、以下では当該攻撃操作のことを「斬撃操作」と呼ぶ。
【0092】
まず、拡張コントローラ36を用いたプレイヤオブジェクト101の移動操作に関して説明する。プレイヤが、左手に持った拡張コントローラ36のアナログスティック39を上方向に入力すると、プレイヤオブジェクト101が前進する。また、下方向に入力すると、プレイヤオブジェクト101が後退する。右方向に入力したときは、プレイヤオブジェクト101は右に水平移動する(プレイヤオブジェクトの向きを変えずに右に移動する。例えば、前を向いたまま右に横歩きする動作)。左方向を入力したときは、プレイヤオブジェクト101は左に水平移動する。
【0093】
次に、コントローラ7を用いた操作について説明する。まず、ゲーム画面には、コントローラ7が指し示す画面上の位置(指示位置)にカーソル102が表示されている。そして、本実施形態では、カーソル102を所定速度未満で動かせば、単純にポインティング位置にカーソルが表示される、通常カーソル移動操作を行うことができる。また、画面端近傍の所定領域(以下、画面スクロール領域と呼ぶ)内にカーソル102が移動した場合は、カーソル102の存在する位置に応じて仮想カメラの向きが変化し、画面をスクロールさせることが可能である。例えば、
図12(a)に示すようにカーソル102を画面の上端(画面スクロール領域内)に移動させたときは、
図12(b)に示すように仮想カメラが上向きとなる。つまり、仮想カメラがx軸回りに回転する。その結果、注視点が上方向に移動し、上方を見上げるような描画がなされることになる。
【0094】
同様に、例えば
図13(a)に示すように、カーソル102を画面右端に移動させたときは、
図13(b)に示すように仮想カメラも右に向く(y軸回りに右回転する)。また、このときは、プレイヤオブジェクト101自体も右方向に回転し、方向転換が可能となっている。例えば、カーソル102を画面右端に移動させ、カーソル102をその位置から動かさないようにすれば、仮想ゲーム空間内で右を向くことが可能となる。
【0095】
一方、カーソル102を所定速度以上で移動させると、斬撃操作が可能となる。つまり、敵オブジェクト103を通過するように(例えば左から右に)カーソル102を素早く移動することで、敵オブジェクト103を「斬る」という直感的な操作を可能としている。
【0096】
以下、当該斬撃操作について説明する。上述のように、カーソル102を所定速度以上で動かすと斬撃操作が可能となる。
図14および
図15は、斬撃操作の一例を示す図である。
図14は、斬撃開始直後の状態であり、カーソル102を右方向に所定速度以上で動かしている状態である。
図14では、斬撃の軌跡を示す斬撃軌跡108が表示され始めている。また、
図15は、斬撃中の状態であり、敵オブジェクト103に斬撃が当たった状態を示している。斬撃軌跡108のうち敵オブジェクト103に当たった箇所から右は、予め用意されている命中エフェクト109が斬撃軌跡に重ねて描画されており、斬撃が敵オブジェクト103に当たったことが示されている。
【0097】
次に、斬撃操作についての処理(以下、単に斬撃処理と呼ぶ)の原理を説明する。本実施形態では、所定の単位時間、具体的には1フレーム(1/60秒)あたりにおけるコントローラ7のポインティング位置(カーソル102の表示位置)の変化量(つまり、カーソル102の移動量)を算出する。そして、当該変化量が所定値未満であれば、上述の通常カーソル移動操作または画面スクロールにかかる処理を実行し、変化量が所定値以上であれば、斬撃処理を行う。
【0098】
図16〜
図23は、斬撃処理の原理を説明するための図であり、1フレーム毎のポインティング位置の遷移を示している。これらの図面において、黒塗りの点は現在のポインティング位置を示し、斜線のパターンで塗られた点は過去に検出されたポインティング位置を示す。また、星印は、斬撃の開始位置(以下、斬撃開始点と呼ぶ)を示し、三角印は、斬撃の終了位置(以下、斬撃終了点と呼ぶ)を示す。
【0099】
まず、最初の状態として、
図16の点111で示される位置がポインティングされているとする。この状態から、1フレーム後の状態が、
図17に示すような状態であるとする。
図17では、現在のポインティング位置である点112と1フレーム前のポインティング位置である点111が示されている。そして、点111から点112までの変化量、例えば距離d(両ポインティング位置の座標に基づいて算出可能である)が、予め定められている第1の所定値未満であるとする。この場合は、通常カーソル移動操作、または、画面スクロール領域内であれば、上述したような画面をスクロールする処理が実行される(
図17の例では、仮想カメラが少し右に回転することになる)。
【0100】
一方、
図16の状態から1フレーム後の状態が、
図18に示すような状態であるとする。
図18では、前のフレームでのポインティング位置である点111から現在のポインティング位置である点112までの距離dが第1の所定値以上であるとする。つまり、変化量が第1の所定値以上であることが検出された状態とする。この場合は、斬撃処理が実行される。斬撃処理では、まず、斬撃の開始点が設定される。具体的には、前フレームの点111を、
図19に示すように、斬撃開始点121とする。そして、斬撃開始点121と点112との軌跡を算出し、この軌跡に基づいた斬撃軌跡の描画や敵オブジェクト103との当たり判定処理等が実行される。
【0101】
その後、1フレーム毎に、現在のポインティング位置と直前フレームでのポインティング位置との距離dを算出し、
図20および
図21に示すように、当該距離dが第2の所定値より大きい間は、上記斬撃軌跡の描画や当たり判定処理を継続する。
【0102】
次に、
図22に示すように、斬撃開始点121を決めた後において、現在のポインティング位置である点115と直前フレームでのポインティング位置である点114との距離dが第2の所定値以下となった場合、現在のポインティング位置である点115を、
図23に示すように斬撃終了点122とする。その結果、斬撃軌跡108は、斬撃開始点121から斬撃終了点122までに検出されたポインティング位置を通る軌跡となる。
【0103】
このように、本実施形態では、所定の単位時間(1フレーム毎)におけるポインティング位置の変化量(カーソル102の表示位置の変化量)が第1の所定値以上か否かで、通常カーソル移動操作またはスクロール処理と斬撃操作の2種類の操作を使い分ける。斬撃操作に際しては、上記変化量が第1の所定値以上であることが検出されたときに、1フレーム前のポインティング位置を斬撃開始点として設定している。その後、変化量が第2の所定値以下になれば、斬撃終了点の設定を行っている。これにより、所定速度以上でカーソル102を動かすことで、その軌跡を斬撃軌跡108とすることができる。そのため、上記
図23の例のような直線的な斬撃軌跡108に限らず、
図24に示すような曲線的な斬撃軌跡108とすることも可能である。
図24では、左下から右上、そして、右下方向へ連なる、山なりの斬撃軌跡108となっている。そして、このような軌跡の場合は、
図25に示すようなゲーム画面が描画される(なお、
図25では、斬撃軌跡108が敵オブジェクト103に命中していない状態であり、斬撃軌跡108には命中エフェクトがかかっていない)。つまり、直線的な斬り方に限らずに、画面内においてプレイヤが所望する任意の場所を自由に斬ることが可能であり、自由度の高い操作を実現している。
【0104】
なお、斬撃開始点121が設定された後、ポインティング位置が画面外となった場合は、ポインティング位置が画面外であることが検出されたときに斬撃終了点122が設定される。例えば、画面端を斬撃終了点122とする。
図26は、斬撃開始後、ポインティング位置が画面外となった場合の斬撃軌跡108の一例を示したものである。また、
図27は、この場合のゲーム画面の一例を示したものである。
図27では、ポインティング位置が画面外(画面の右上付近)となっているため、カーソル102は画面内に表示されていない状態である(代わりに、画面右上にカーソル102の移動方向を示す複数の三角形が表示されている)。
【0105】
次に、ゲーム装置本体3によって実行されるゲーム処理の詳細を説明する。まず、ゲーム処理の際に外部メインメモリ12に記憶されるデータについて説明する。
図28は、ゲーム装置本体3の外部メインメモリ12のメモリマップを示す図である。
図28において、外部メインメモリ12は、プログラム記憶領域330およびデータ記憶領域332を含む。プログラム記憶領域330およびデータ記憶領域332のデータの一部は、光ディスク4に記憶され、ゲームプログラム実行時には外部メインメモリ12に転送されて記憶される。
【0106】
プログラム記憶領域330には、後述の
図29等に示すフローチャートの処理を実行するメイン処理プログラム331等のプログラムが記憶される。
【0107】
データ記憶領域332には、操作データ333、今回ポインティング座標データ334、前回ポインティング座標データ335、ポインティング履歴データ336、攻撃不能時間データ337、インターバルカウンタ338、および斬撃発生フラグ339等のデータが記憶される。
【0108】
操作データ333は、コントローラ7から取得されるデータであり、上記マーカ座標(
図8参照)を示すマーカ座標データ3331が含まれる。ここで、
図8に示したような撮像画像内にマーカ8Lおよび8Rのいずれか一方が写っていないときは、そのことを示す値(例えばNULL値)が設定されるものとする。その他、操作データ333には、各種ボタンの押圧状態を示すデータや加速度データ、拡張コントローラ36の操作内容(上記アナログスティック39の操作等)を示すデータ等、プレイヤの操作内容を示すデータが含まれる。
【0109】
今回ポインティング座標データ334は、上記マーカ座標データ3331に基づいて算出されるデータであり、コントローラ7のポインティング座標を示すデータである。前回ポインティング座標データ335は、直前のフレームにおける処理で算出されたポインティング座標を示すデータである。
【0110】
ポインティング履歴データ336は、斬撃開始後、斬撃が終了するまでに検出されたポインティング座標の履歴を示すデータである。上記斬撃軌跡108を生成、描画するために用いられる。
【0111】
攻撃不能時間データ337は、一連の斬撃操作終了後に設けられている攻撃不能時間の長さを示すデータである。攻撃不能時間とは、本ゲームの内容に鑑みて、例えば、プレイヤがコントローラ7を手首だけ使って左右に素早く振るような操作等で続けざまに斬撃ができることを防ぐために設けられた時間である。すなわち、一回分の斬撃終了後は、すぐに続けて斬撃を行うことができない。
【0112】
インターバルカウンタ338は、上記攻撃不能時間の経過をカウントするためのカウンタである。初期値としては”0”が設定される。
【0113】
斬撃発生フラグ339は、斬撃中か否かを示すためのフラグである。オンであれば、斬撃中であることを示し、オフのときは斬撃が発生していない事を示す。初期値はオフに設定される。
【0114】
次に、
図29〜
図34を参照して、ゲーム装置本体3によって実行されるゲーム処理について説明する。なお、
図29および
図30はゲーム装置本体3によって実行されるゲーム処理を示すフローチャートである。また、
図31は、
図29の変化量算出処理の詳細な動作を示すサブルーチンであり、
図32は、
図30の当たり判定処理の詳細な動作を示すサブルーチンである。また、
図29〜
図30のフローチャートの処理が1フレーム毎に繰り返されることによって、ゲームが進行していく。なお、
図29〜
図30に示すフローチャートにおいては、ゲーム全体にかかる処理のうち、上述した斬撃操作についての処理について説明し、本願発明とは直接関連しない他の処理については詳細な説明を省略する。
【0115】
まず、ステップS1において、上記外部メインメモリ12からマーカ座標データ3331が取得される。
【0116】
続くステップS2において、コントローラ7の撮像画像において、マーカ8L、8Rが検出されているか否かが判定される。すなわち、コントローラ7がテレビ2の方に向いているか否かが判定される。具体的には、CPU10は、
図8に示したような撮像画像においてマーカ8の画像が撮像されていたか否かを判定する。上述のように、当該撮像画像内にマーカ8Lおよび8Rのいずれか一方が写っていないときは、そのことを示す値(例えばNULL値)がマーカ座標データ3331に設定されるため、当該値が設定されているか否かを判定することで、コントローラ7がテレビ2の方に向いているか否かを判定することができる。
【0117】
ステップS2の判定の結果、マーカ8Lまたは8Rのいずれか一方が検出されなかったときは(ステップS2でNO)、後述するステップS15へ処理が進められる。一方、マーカ8Lおよび8Rの双方が検出されたときは(ステップS2でYES)、ステップS3において、ポインティング位置の算出が実行される。
【0118】
以下、ポインティング座標の算出方法の一例を説明する。上述のように、マーカ座標データ3331には、上記マーカ座標を示すデータが含まれる。当該データは、マーカ8Lおよび8Rに対応する2つのマーカ座標(
図8参照)を示すので、まずCPU10は、2つのマーカ座標の中点を算出する。この中点の位置は、撮像画像に対応する平面上の位置を表すための上記xy座標系によって表現される。次に、CPU10は、当該中点の位置を示す座標を、テレビ2の画面上の位置を表すための座標系(x'y'座標系とする)の座標に変換する。この変換は、ある撮像画像から算出される中点の座標を、当該撮像画像が撮像される時のコントローラ7の実際の指示位置に対応する画面上の座標に変換する関数を用いて行うことができる。その際、コントローラ7の指示位置と、撮像画像内でのマーカ座標の位置とは逆方向に移動することになるので、上下左右が反転するような変換を行う。以上のようにして算出されたx'y'座標値により示される座標値がコントローラ7のポインティング座標となる。
【0119】
ポインティング座標の算出処理の次に、ステップS4において、斬撃発生フラグ339がオンに設定されているか否かが判定される。当該判定の結果、オンに設定されていれば(ステップS4でYES)、既に斬撃が開始されているため、後述するステップS16へと処理が進められる。
【0120】
一方、斬撃発生フラグ339がオフに設定されていれば(ステップS4でNO)、続くステップS5において、ポインティング位置が画面内か否かが判定される。これは、例えばコントローラ7がテレビ2の外枠部分をポインティングしているような場合等、コントローラ7をテレビ2(マーカ8)には向けており、撮像画像には一応マーカ8が写ってはいるが、画面内はポインティングしていないような場合を想定したものである。ここでは、上記ステップS3においてマーカ座標を変換して得られたポインティング座標が、予め「画面外の座標」として定義されている所定の範囲内の値(例えば、画面外周を縁取ったような領域を当該所定の範囲として定義しておく)であるか否かで判定する。
【0121】
ステップS5の判定の結果、ポインティング位置が画面内でないときは(ステップS5でNO)、後述のステップS15に処理が進められる。一方、ポインティング位置が画面内のときは(ステップS5でYES)、次に、ステップS6において、1フレーム前から現在のフレームまでのポインティング位置の変化量を算出するための変化量算出処理が実行される。
図31は、上記ステップS6で示した変化量算出処理の詳細を示すフローチャートである。
図31において、まず、ステップS31において、上記ステップS3で得られたポインティング座標が今回ポインティング座標データ334に記憶される。
【0122】
続くステップS32で、前回ポインティング座標データ335が外部メインメモリ12から読み出される。
【0123】
そして、ステップS33において、これら2つのポインティング座標データで示される座標(以下、それぞれ単に、今回ポインティング座標、前回ポインティング座標と呼ぶ)に基づいて変化量が算出される。具体的には、今回ポインティング座標を(X1,Y1)とし、前回ポインティング座標を(X2,Y2)とすると、以下の式で変化量Cが算出される。
【0124】
【数1】
以上で、変化量算出処理は終了する。
【0125】
図29に戻り、次に、ステップS7において、上記算出された変化量Cが予め設定されている第1の所定値以上か否かが判定される。つまり、プレイヤが上記カーソル102を素早く移動させたのか、ゆっくり移動させたのかが判定される。当該判定の結果、変化量が所定値未満のときは(ステップS7でNO)、後述のステップS15に処理が進められる。
【0126】
一方、変化量が所定値以上のときは(ステップS7でYES)、続くステップS700において、インターバルカウンタ338の修正処理が行われる。この処理は、プレイヤがコントローラ7を手首だけ使って左右に素早く振るような操作等で続けざまに斬撃を行おうとした場合に、コントローラ7が素早く左右に振られている間は斬撃を不能とするための処理である。このような処理を実現するため、本処理では、上記攻撃不能時間よりも短い時間として予め定義された”ペナルティ開始時間”というパラメータを用いて、以下のような処理が行われる。まず、インターバルカウンタ338の値が当該ペナルティ開始時間以上かつ攻撃不能時間未満であるか否かが判定される。そして、ペナルティ開始時間以上かつ攻撃不能時間未満であるときには、インターバルカウンタ338の値をペナルティ開始時間へと戻す処理が行われる。ペナルティ開始時間から攻撃不能時間までの期間をペナルティ期間と呼ぶとすると、ペナルティ期間内に所定速度以上でコントローラ7が操作されたときは、上述したような、プレイヤがコントローラ7を手首だけ使って左右に素早く振るような操作等で続けざまに斬撃を行おうとした状況であると考えられる。そのため、ここで、インターバルカウンタ338の値をペナルティ開始時間へと戻す(つまり、手首だけ使ってコントローラ7を左右に素早く振るような操作中は、インターバルカウンタ338の値が攻撃不能時間に達しないようにする)ことによって、続けざまの斬撃を行おうとする動作の後、ペナルティ期間が経過しないうちに再び続けざまの斬撃を行おうとする動作についても斬撃を不能にできる。すなわち、プレイヤは、続けざまの斬撃を行おうとした動作を行った後、ペナルティ期間が経過するまで(手首だけ使ってコントローラ7を左右に素早く振るような操作が止められた場合等が該当する)は、斬撃を行うことができない。なお、インターバルカウンタ338の値がペナルティ開始時間未満であるときは、斬撃後の反動でポインティング位置が斬撃終了時の位置から変化してしまった状況であると考えられる。このような場合については、プレイヤがコントローラ7を手首だけ使って左右に素早く振るような操作等で続けざまに斬撃を行おうとした状況であると判別しない。
【0127】
続くステップS8において、インターバルカウンタ338で示される経過時間が攻撃不能時間データ337で示される攻撃不能時間以上か否かが判定される。インターバルカウンタ338で示される経過時間が攻撃不能時間未満のときは(ステップS8でNO)、後述のステップS15に処理が進められる。
【0128】
一方、インターバルカウンタ338で示される経過時間が攻撃不能時間データ337で示される時間以上の時は(ステップS8でYES)、続くステップS9において、インターバルカウンタ338のカウントアップの停止が行われる(なお、カウントの開始は、後述のステップS23の処理で行われる)。更に、インターバルカウンタ338がリセットされる。
【0129】
次に、ステップS10において、斬撃発生フラグ339にオンが設定される。続くステップS11において、前回ポインティング座標が斬撃開始点121(
図19参照)として設定される。
【0130】
次に、ステップS12において、上記ステップS3で算出されたポインティング座標がポインティング履歴データ336に追加される。
【0131】
次に、ステップS13において、上記ポインティング履歴データ336が参照され、前回ポインティング座標から今回ポインティング座標を結ぶ斬撃軌跡108が算出される。そして、当該斬撃軌跡108の描画が実行される。なお、この斬撃軌跡108は、所定時間継続して表示される。併せて、今回ポインティング座標で示される画面上の位置にカーソル102が描画される。また、プレイヤオブジェクト101が剣を振っている様子が表示されるように、剣オブジェクト104も適宜移動され、プレイヤオブジェクト101の姿勢も適宜変更される。
【0132】
次に、ステップS14において、斬撃が敵オブジェクト103に命中したか否かを判定するための、当たり判定処理が実行される。
図32は、上記ステップS14で示した当たり判定処理の詳細を示すフローチャートである。
図32において、まず、ステップS41において、上記ポインティング座標を仮想空間内における対応位置を示す3次元座標に変換する。具体的には、投影行列の逆行列を当該ポインティング座標に適用することで、2次元のポインティング座標を仮想空間内に存在する投影面上の座標に変換する(以下、投影面上座標と呼ぶ)。次に、ステップS42において、仮想空間内における仮想カメラの位置から上記投影面上座標に向けて、仮想的なレイ(光線)が飛ばされる(なお、当該レイは画面には表示されない、不可視のものとして処理される)。そして、当該レイがいずれかの敵オブジェクト103と接触したか否かが判定される。ここで、当該レイについて補足すると、本実施形態では、ある程度の太さ(幅)を有したレイを飛ばしている。これは、以下のような理由による。本実施形態では、上記のように1フレーム毎に、そのフレームにおけるポインティング座標を変換した投影面上座標に基づいてレイを飛ばす。そのため、速い速度でカーソル102を動かした場合、直前のフレームにおけるポインティング座標に対応する投影面座標と現在のフレームにおけるポインティング座標に対応する投影面上座標との間に敵オブジェクト103が存在するようなときに、当該敵オブジェクト103の居る位置をレイが通過しないために敵オブジェクト103に攻撃が命中しないという結果となり得ることがある(
図33参照)。そこで、本実施形態では、レイにある程度の太さを持たせることによりレイを敵オブジェクト103に衝突させやすくし、このようなポインティング座標間に存在するような敵オブジェクト103に攻撃が命中しないという状況を防いでいる(
図34参照)。
【0133】
上記ステップS42の判定の結果、上記レイがいずれの敵オブジェクト103と接触していないときは(ステップS42でNO)、攻撃は命中していないとして、当たり判定処理は終了する。一方、敵オブジェクト103と衝突していたときは(ステップS42でYES)、攻撃が命中したとして、次のステップS43で命中処理が実行される。当該命中処理では、衝突した敵オブジェクト103にダメージを与える処理や、斬撃軌跡のうち、敵オブジェクト103に命中した箇所以降の軌跡に重ねて所定の命中エフェクト(
図15の命中エフェクト109参照)を描画する処理が実行される。なお、命中エフェクトに関しては、上記のような重ね描画に限らず、敵オブジェクト103に命中した箇所以降の軌跡の表示色を変更することで命中エフェクトとするようにしてもよい。以上で、当たり判定処理は終了する。
【0134】
続くステップS15で、今回ポインティング座標データ334の値で前回ポインティング座標データ335を更新する処理が実行される。なお、ポインティング座標が画面外の位置を示すとき(上記ステップS2やS5でNOのとき)は、ポインティング座標が画面外の位置であることを示す値が前回ポインティング座標データ335に設定される。その後、ゲーム処理が終了する。
【0135】
次に、上記ステップS4の判定の結果、斬撃発生フラグ339がオンに設定されていたときの処理(ステップS4でYES)について説明する。すなわち、斬撃が開始された後の処理について説明する。このときは、まず、ステップS16において、ポインティング位置が画面内か否かが判定される。当該ステップS16の処理は、上記ステップS5と同様の内容である。当該判定の結果、ポインティング位置が画面内でないときは(ステップS16でNO)、斬撃が開始された後にポインティング位置が画面外へ出たことになり、後述のステップS19に処理が進められる。一方、ポインティング位置が画面内であるときは(ステップS16でYES)、ステップS17において、変化量算出処理が実行される。当該ステップS17の処理は上記ステップS6と同様の処理であるため、ここでは詳細な説明は省略する。
【0136】
次に、ステップS18において、ステップS17で算出された変化量Cが予め定義されている第2の所定値以下であるか否かが判定される。つまり、所定速度以上のカーソルの移動によって斬撃が開始された後、カーソルの移動速度が所定の速度以下になったか否かが判定される。当該判定の結果、変化量Cが第2の所定値以下ではないときは(ステップS18でNO)、斬撃状態が継続していることになるため、上記ステップS12に処理が進められ、ポインティング履歴の追加や斬撃軌跡108の描画等が実行される。
【0137】
一方、変化量Cが第2の所定値以下になったときは(ステップS18でYES)、斬撃を終了させるため、以下の処理が実行される。まず、ステップS19で、斬撃発生フラグ339にオフが設定される。次に、ステップS20において、今回ポインティング座標が斬撃終了点122として設定される。このとき、ポインティング位置が画面外であるときは(上記ステップS16でNOのとき)、CPU10は、前回ポインティング座標とその一つ前に検出されたポインティング座標とを結ぶ軌跡をそのまま画面の端まで延ばした軌跡を算出し、当該軌跡が交わった画面の端の座標を斬撃終了点122として設定する。
【0138】
次に、ステップS21において、上記ステップS13と同様の処理が行われることで、斬撃開始点121から今回ポインティング座標122を結ぶ斬撃軌跡が描画される。
【0139】
続くステップS22において、ポインティング履歴データ336がクリアされる。更に、ステップS23において、インターバルカウンタ338のカウントアップが開始される。その後、上記ステップS15に処理が進められる。以上で、本実施形態にかかるゲーム処理は終了する。
【0140】
以上のように、第1の実施形態では、1フレームでのポインティング位置の変化量が所定値より大きいとき、すなわち、所定の速度以上でカーソルを動かしたときに、そのときのポインティング位置を起点とした斬撃を開始している。その後、カーソルの移動速度が所定値以下になれば、そのときのポインティング位置を斬撃の終点と設定して斬撃を終了している。これにより、撮像装置とマーカ8に基づいてポインティング位置を検出するようなゲームシステムにおいて、カーソルを移動する操作について、ゆっくり移動させたときと速く移動させたときとで異なる処理を実行することが可能となる。また、所定速度以上でカーソルを移動した際のポインティング位置を開始点に設定して処理を実行できる。その結果、より自由度の高い操作が可能となり、新しい楽しみ方をプレイヤに提供することができる。
【0141】
なお、上記実施形態では、ポインティング位置の変化量を画面の描画間隔である1フレーム(1/60秒)単位で算出するようにしていたが、これに限らず、例えば、コントローラ7からゲーム装置本体3への操作データの送信間隔である5ms(1/200秒)単位で上記変化量の算出を行うようにしても良い。例えば、コントローラ7から送信される操作データを1フレーム分、所定のバッファに溜めておき、当該バッファに蓄積されたデータの分だけ上記ステップS6およびS17の変化量算出処理を繰り返して実行するようにしても良い。また、上記のような1フレーム前のポインティング位置(前回ポインティング座標)からの変化量ではなく、当該1フレーム分の操作データ内におけるポインティング位置の変化量に基づいて上記ステップS7やS18の処理を実行するようにしてもよい。
【0142】
また、プレイヤオブジェクトの持つ武器の種類を複数設定しておき、上記当たり判定処理において、攻撃が奥行き方向に届く距離(武器の射程範囲、換言すれば、上記ステップS42で飛ばすレイの長さ)を個別に設定するようにしても良い。この場合、複数種類の武器を示す「武器データ」を定義し、各「武器データ」に「射程距離」というデータを予め定義する。例えば、「片手剣」よりも「両手剣」のほうが射程距離を長くなるよう定義する。つまり、「両手剣」のほうが遠くの敵オブジェクトに攻撃が届く(つまり、両手剣の方が片手剣よりも刀身が長い)ような定義を行っておく。そして、上記ステップS14の当たり判定処理において、現在使用している武器の「武器データ」から「射程距離」を読み込み、当該「射程距離」に応じた仮想ゲーム空間内の距離だけ、上記仮想カメラの位置から上記投影面上座標に向けて上記レイを飛ばし、当該レイと敵オブジェクト103との衝突判定を行うようにしてもよい。このように、「射程距離」というパラメータを用いることで、複数の武器をゲーム内で用いるときに、各武器毎に特色を出すことができ、ゲームの興趣性をより高めることが可能となる。
【0143】
また、斬撃軌跡108の描画に関して、当該斬撃軌跡108を描画する前に、カーソル102の移動軌跡を示す表示を行うようにしてもよい。例えば、
図35に示すように、カーソル102の移動軌跡131を斬撃軌跡108よりも先に描画するようにし、数フレーム遅らせて斬撃軌跡108を描画するようにしてもよい(斬撃軌跡108が移動軌跡131をなぞるような描画となる)。これにより、上記のように複数種類の武器を設定したおり、振り回すのに時間のかかるような重い武器をプレイヤオブジェクト101が用いているときに、その武器の重量感を表現することができ、よりゲームの興趣性を高めることができる。また、プレイヤがどのような軌跡を描いたかをより把握させやすくすることもできる。
【0144】
更には、上記武器データのパラメータとして、その武器の「切れ味」を示す「貫通力」というパラメータを設定し、これに基づいた処理を行うようにしても良い。例えば、斬撃軌跡108に複数の敵オブジェクト103が重なっている場合、貫通力の低い武器(切れ味の鈍い武器)は、一度の斬撃では一体の敵オブジェクト103しか斬ることができない(上記命中処理が一体の敵オブジェクト103についてのみ実行される)が、貫通力の高い武器(切れ味の鋭い武器)であれば、一度の斬撃で当該斬撃軌跡108と重なっている複数の敵オブジェクト103を斬る(上記命中処理が斬撃軌跡108と重なる各敵オブジェクト103に対して実行される)ことができるような処理が実行されるようにしても良い。より具体的には、「貫通力」パラメータの内容として、「最初に斬撃が敵オブジェクト103に命中した位置から斬撃を続けられる距離(ピクセル数)」を設定する。例えば、「貫通力」パラメータに“100“という値を設定すれば、最初に命中した敵オブジェクト103の画面上における位置(最初に斬撃が命中した敵オブジェクト103の仮想空間内における位置を3次元座標系から2次元座標系(画面座標系)に変換した位置)から100ピクセル分の距離までは斬撃が継続(斬撃軌跡を描画)し、この距離内では何体でも敵オブジェクト103を斬れるような処理を実行する(但し、奥行き方向に敵オブジェクト103が重なっていた場合は、一番手前の敵オブジェクト103にのみ命中処理を行うようにする)。このように、「貫通力」を「斬撃が継続する距離(ピクセル数)」として設定することで、複数の武器をゲーム内で用いるときに各武器毎に特色を出すことができ、ゲームの興趣性をより高めることが可能となる。また、例えば、仮想空間内において全長30メートルの大型敵オブジェクトを登場させ、かつ、当該大型敵オブジェクトに複数の命中ポイントを設定する(つまり、一体の大型敵オブジェクトに対して複数回の命中処理が実行され得る)ことで、敵オブジェクト103についても特色を出すことができ、ゲームの興趣性を高めることができる。
【0145】
また、例えば上記「貫通力」パラメータに、一度の斬撃で同時に攻撃できる数を設定するようにしても良い。例えば、貫通力に“5”という値を設定しておく(一度の斬撃で同時に敵オブジェクト103を5体まで攻撃できることを示す)。そして、斬撃軌跡108に重なっている敵オブジェクト103が複数存在する場合、敵オブジェクト103の1体に斬撃が命中する度に(例えば、上記ステップS43の処理において)「貫通力」パラメータから“1”を減算していく。そして、「貫通力」が“0”になったときに、斬撃終了とする処理(つまり、上記ステップS18でYESと判定されたときの処理)を実行するようにすればよい。例えば、
図36に示すように、上記ステップS18でNOと判定された後に、ステップS51において当該「貫通力」が“0”か否かを判定し、“0”でなければ(ステップS51でNO)ステップS12の処理に進み、“0”であると判定されたとき(ステップS51でYES;すなわち、上記変化量Cはまだ第2の所定値以下ではないが、貫通力が“0”となったとき)にはステップS19の処理に進むような制御を実行しても良い。
【0146】
更には、上記「貫通力」パラメータの減算値を敵オブジェクト103の種類や、予め敵オブジェクト103毎に設定されている「防御力」というパラメータに応じて変化させてもよい。例えば、鎧を装備していない敵A(例えば、防御力パラメータが「1」と設定されている)であれば、上記斬撃が命中した際、貫通力を「1」減算するが、鎧を装備している敵B(例えば、防御力パラメータが「3」と設定されている)については、貫通力を「3」減算するようにしてもよい。具体的には、上記ステップS14の当たり判定処理において、
図37に示すような処理が実行されるようにする。
図37に示す処理は、ステップS61の処理以外は、
図32を用いて説明した処理と同じである。そのため、ここでは、ステップS61以外の処理については説明を省略する。
図37に示す当たり判定処理においては、ステップS42の判定の結果、YESと判定されたとき、ステップS61において、レイが衝突した(つまり、攻撃が命中した)敵オブジェクト103に応じた値だけ貫通力を減算する。上述した防御力パラメータの例で言うと、攻撃が命中した敵が敵Aであれば「貫通力」パラメータから「1」を減算し、敵Bであれば、「貫通力」パラメータからを「3」を減算する。これにより、敵オブジェクト103のそれぞれに個性を持たせることができ、よりゲームの興趣性を高めることができる。
【0147】
また、上記実施形態では、攻撃方法の一例として剣オブジェクト104による斬撃の場合を例に挙げたが、これに限らず、剣オブジェクト104の代わりに、棍棒オブジェクトのような打撃武器を用いるようにしても良い。この場合も、剣オブジェクト104の場合と同様に上記斬撃軌跡上の敵オブジェクト103に対して上記命中処理が実行される。そして、上記命中エフェクトとして、打撃武器に相応しいエフェクト(例えば、敵オブジェクト103が吹っ飛ぶ表示等)を用いるようにすればよい。
【0148】
また、斬撃開始点に関して、上記実施形態では、前回ポインティング座標を斬撃開始点121としていたが、これに限らず、今回ポインティング座標を斬撃開始点121としてもよい。また、前回ポインティング座標と今回ポインティング座標の中点を算出し、当該中点を斬撃開始点121と設定するようにしても良い。また、ポインティング座標と斬撃開始点121とを対応付けたテーブルを予め用意しておき、当該テーブルに基づいて斬撃開始点121を決定するようにしてもよい。斬撃終了点122についても、上記実施形態では今回ポインティング座標を用いていたが、前回ポインティング座標を斬撃終了点122として設定しても良いし、前回ポインティング座標と今回ポインティング座標の中点を斬撃終了点122と設定するようにしても良い。また、ポインティング座標と斬撃終了点122とを対応付けたテーブルを予め用意しておき、当該テーブルに基づいて斬撃終了点122を決定するようにしてもよい。更には、上記のように武器の種類を複数設定している場合には、上記斬撃開始点および斬撃終了点を設定するための上記第1の所定値および第2の所定値について、武器の種類によってそれぞれ異なる値を用いるようにしても良い。例えば、武器毎に上記第1の所定値および第2に所定値を定義したテーブルを予め用意し、ゲーム処理の実行の際に外部メインメモリ12に読み込んでおく。そして、上記
図29に示したフローチャートの処理の開始時に当該テーブルを参照して、プレイヤオブジェクト101の装備武器として設定されている武器に応じた第1の所定値および第2の所定値を取得して用いるようにすればよい。
【0149】
また、斬撃軌跡が所定の図形を描いたとき、例えば円や三角形などの図形を描いたときに、上記ステップS14の当たり判定処理における衝突判定を当該図形の内側の領域についてのみ行うようにしてもよい。
【0150】
また、上記のような剣劇ゲームだけでなく、例えば、所定の速度以上でポインティング位置を移動させたときにのみ所定の処理を実行させるものであれば、剣劇ゲーム以外にも本発明は適用可能である。例えば、カーソルを所定の速さ以上で動かしたときにのみ字を書くことが可能な「早書きゲーム」(綺麗な字を素早く書くことを競うゲーム)のようなゲームにも適用可能である。
【0151】
また、上記実施形態では、コントローラ7を用いたカーソルの操作、つまり、ポインティング位置の検出の例として、コントローラ7に備えられた撮像素子743でマーカ8L,8Rを撮像した撮像画像に基づいてポインティング位置を検出する場合を例に挙げた。この他、例えばテレビ2側に所定のカメラを配置し、当該カメラで撮像した画像に基づいてポインティング位置を検出してもよい。例えば、コントローラ7の前面に上記マーカ8を配置し、当該マーカを撮像した画像に基づいてポインティング位置を検出したり、テレビ2側に配置されたカメラで、(コントローラ7を持っている)プレイヤが映っている画像を撮像し、当該撮像した画像を解析してコントローラ7の位置を検出して、ポインティング位置を算出するようにしてもよい。また、その他のポインティングデバイスを用いて、画面上の所定の位置をポインティングするようにしてもよい。例えば、アナログスティックやマウスで画面に表示されているカーソルを操作することでポインティング位置を変化させてもよい。また、タッチパネルを用いて画面上の所定の位置をポインティングするようにしてもよい。
【0152】
(第2の実施形態)
次に、
図38から
図44を参照して、本発明の第2の実施形態について説明する。上述の第1の実施形態では、武器として剣を用いた場合、つまり、「斬撃」という攻撃方法を例として説明した。すなわち、所定の速度範囲内でカーソル102を動かしている間(つまり、カーソル102の移動速度が上記第1の所定値以上、第2の所定値以下の間)、「斬撃」を発生させていた。これに対して、第2の実施形態では、所定の速度範囲内でカーソルを動かしている間、斬撃ではなく、以下に述べるような投擲オブジェクトを投げるという攻撃方法(以下、投擲攻撃と呼ぶ)を用いる。より具体的には、武器として「杖」を用い、所定の速度範囲内でカーソルを動かしている間(つまり、杖を振っているのと同様の操作)、杖の先から「爆弾」を発射するという攻撃が行われる。なお、当該実施形態に係るゲームシステム1は、上述した第1の実施形態と同様であるため、同一の参照符号を付して詳細な説明を省略する。
【0153】
次に、第2の実施形態における処理の概要を説明する。
図38は、第2の実施形態にかかるゲーム画面の一例を示す図であり、プレイヤオブジェクト101が杖オブジェクト201を(右から左に)振った様子が示されている。また、画面内には、複数の爆弾202が表示されている。上述のように、第2の実施形態では、プレイヤオブジェクト101は、杖オブジェクト201を武器として装備する(なお、本ゲームでは、所定の操作で装備武器の切替が可能となっているものとする)。そして、第1の実施形態における斬撃の操作のときと同様の操作をプレイヤが行うと、ポインティング位置の移動に応じてプレイヤオブジェクト101は杖オブジェクト201を振る。このとき、
図38に示すように、振っている杖の先から投擲オブジェクトである爆弾202が発射されて、仮想空間内の奥行き方向に向かって移動していく(つまり、爆弾202が投擲されることになる)。なお、当該爆弾の移動については、本実施形態では、仮想空間内における重力の影響(つまり、物理法則に基づく自由落下)を考慮して移動するものとする。例えば、仮想空間内において斜め上方向に爆弾202を投擲すれば、放物線を描くような軌跡で移動することになる。また、
図38では、爆弾202は複数表示されている。すなわち、本実施形態では、所定の速度以上でカーソル102を動かしている間は、所定の時間間隔で連続的に爆弾202が杖の先から発射される。また、本実施形態では、当該爆弾202は、敵オブジェクト103に当たれば爆発する他、敵オブジェクト103に当たっていないときでも、時限式で爆発するものとする。そして、この爆発により、敵オブジェクト103にダメージを与えることが可能である。
【0154】
ここで、上記投擲オブジェクト(本実施形態では爆弾202)の投擲方向の決定処理の概要について説明する。
図39は、当該投擲方向決定の概念を示す図である。本実施形態では、カーソルの移動速度が第1の所定値以上と判定されたときに、投擲方向を決定する処理が実行される。まず、カーソルの移動速度が第1の所定値以上と判定されたときのポインティング座標203に基づき、上記第1の実施形態で説明したような投影面上座標204が算出される。
【0155】
次に、仮想カメラを始点とし、上記投影面上座標を終点とするベクトル205が算出される。続いて、当該ベクトル205の始点が上記杖の先端の位置に来るように、当該ベクトル205を平行移動することで求まるベクトル206(以下、射出ベクトルと呼ぶ)が算出される。そして、当該射出ベクトル206に基づいて投擲オブジェクトを発射する処理が実行される。その結果、例えば、画面の上部を横切るようにカーソル102を動かせば、斜め上の奥行き方向に向かう射出ベクトルが算出されるため、投擲オブジェクトは仮想空間内の斜め上方向に向けて発射される。そして、上記のように物理法則に基づく移動制御が行われるため、放物線を描くように仮想空間内の奥行き方向に移動していく(その結果、より遠くに投擲オブジェクトを飛ばせる)ことになる。また、画面の下部を横切るようにカーソル102を移動させた場合は、斜め下方向に向けて投擲オブジェクトが発射されることになる(この場合は、あまり遠くまで投擲オブジェクトを飛ばすことはできない)。
【0156】
次に、第2の実施形態にかかるゲーム処理の詳細を説明する。まず、第2の実施形態において外部メインメモリ12に記憶されるデータについて説明する。
図40は、第2の実施形態におけるゲーム装置3のメインメモリ12のメモリマップを示す図である。
図40において、外部メインメモリ12には、上記第1の実施形態で
図28を用いて説明したデータに、投擲カウンタ340、投擲中フラグ341、投擲オブジェクト連続発生数データ342を追加したものが記憶される。そのため、ここでは追加分のデータについてのみ説明し、その他のデータについては第1の実施形態と同様であるため、説明を省略する。
【0157】
投擲カウンタ340は、投擲オブジェクトを連続して発射するときの発射間隔を測るために用いるカウンタである。投擲オブジェクトを一つ発射すると、当該カウンタのカウントアップが始まり、所定値に達するまでは、次の投擲オブジェクトは発射されない。所定値に達すれば、当該カウンタがリセットされ、次の投擲オブジェクトが発射され、再度カウントアップが始まる。
【0158】
投擲中フラグ341は、投擲攻撃中か否かを示すためのフラグである。オンであれば、投擲攻撃中であることを示し、オフのときは投擲攻撃が発生していない事を示す。初期値はオフに設定される。
【0159】
投擲オブジェクト連続発生数データ342は、一回の振りにおいて、連続して配置(生成)された投擲オブジェクトの数を示すデータである。投擲オブジェクト連続発生数データ342が一定の値に達すると、再度振り直しを行うまで、新たな投擲オブジェクトが配置されることはない。これは、長く振った場合と短く振った場合とで、投擲攻撃の強さが大きく変わってしまわないようにするためである。
【0160】
以下、
図41〜
図44を用いて、第2の実施形態におけるゲーム処理の詳細動作を説明する。
図41〜
図42は、第2の実施形態にかかるゲーム処理の詳細を示すフローチャートである。なお、
図41および
図42において、ステップS1からステップS3までの処理と、ステップS5からステップS9までの処理と、ステップS15からS18までの処理と、ステップS700の処理は、上述の第1の実施形態で
図29、
図30を用いて説明した、同じステップ番号の各処理と同様の処理であるため、ここでは詳細な説明を省略する。
【0161】
図41において、ステップS3の処理でポインティング座標が算出された後、ステップS71において、投擲中フラグ341がオンであるか否かが判定される。当該判定の結果、投擲中フラグ341がオンではないと判定されたときは(ステップS71でNO)、投擲攻撃を行っていない状態であるため、上述したようなステップS5に処理が進められる。その後、ポインティング位置が画面内に収まっており(ステップS5でYES)、ポインティング位置の変化量が第1の所定値以上であり、かつ、攻撃不能時間内でもなければ(ステップS7、S8で共にYES)、投擲攻撃を開始する処理が実行される。すなわち、上記ステップS9の処理でインターバルカウンタのカウントアップが停止され、当該カウンタがリセットされた後、ステップS72において、投擲中フラグ341がオンに設定される。次に、ステップS73において、投擲カウンタ340のカウントアップが開始される。
【0162】
次に、
図42のステップS80において、投擲方向設定処理が実行される。
図43は、上記ステップS80で示した投擲方向設定処理の詳細を示すフローチャートである。
図43において、まず、ステップS91で、2次元座標系で示されているポインティング座標を3次元座標系で示される座標に変換する処理が実行される。当該処理は、第1の実施形態の説明で上述したステップS41と同様の処理が行われる。すなわち、投影行列の逆行列を上記ポインティング座標に適用し、仮想空間内に存在する投影面上の座標に変換することで、上記投影面上座標が算出される。また、このとき、上記ポインティング座標に応じて、杖オブジェクト201等を適宜移動させる処理(つまり、プレイヤオブジェクト101が杖を振っている様子を示すための処理)も実行される。
【0163】
次に、ステップS92において、仮想カメラ位置を始点、上記投影面上座標を終点とするベクトル205(上記
図39参照)が算出される。
【0164】
次に、ステップS93において、上記ステップS92で算出されたベクトル205の始点位置が杖オブジェクト201の先端位置に来るように当該ベクトル205を平行移動することで求まるベクトルを、上記射出ベクトル206(上記
図39参照)として算出する。この射出ベクトル206が、投擲オブジェクトの投擲方向を示すことになる。以上で、投擲方向設定処理は終了する。
【0165】
図42に戻り、ステップS80の投擲方向設定処理の次に、ステップS81において、投擲オブジェクトが一つ生成され、杖オブジェクト201の先端位置に配置される。
【0166】
次に、ステップS82において、仮想空間内に投擲オブジェクトが存在するか否かが判定される。本実施形態では連続して投擲オブジェクトを投擲可能であるため、上記ステップS81で新たに配置された投擲オブジェクトの他、先に投擲した投擲オブジェクトであって、まだ爆発(消滅)していない投擲オブジェクトも含めて、仮想空間内に投擲オブジェクトが1つ以上存在しているか否かが判定される。当該判定の結果、仮想空間内に投擲オブジェクトは1つ以上存在していると判定されたときは(ステップS82でYES)、ステップS83において、仮想空間内に存在している全ての投擲オブジェクトを所定の距離だけ移動させる。ここで、当該投擲オブジェクトの移動の制御については、上記射出ベクトル206で示される移動方向と物理法則に基づいて制御される。その後、ステップS84に処理が進められる。一方、上記ステップS82の判定の結果、仮想空間内に投擲オブジェクトが存在していないと判定されたときは(ステップS82でNO)、上記ステップS83の処理は実行されずに、次のステップS84の処理へと進められる。
【0167】
次に、ステップS84において、上記ステップS81において杖オブジェクト201の先端(換言すれば、仮想空間内)に配置されてから所定時間が経過した投擲オブジェクトが存在するか否かが判定される。上記のように、本実施形態では、投擲オブジェクトは時限式で爆発するため、この時限として設定されている時間が経過したか否かが投擲オブジェクトそれぞれについて判定されることになる。当該判定の結果、所定時間が経過した投擲オブジェクトが存在すると判定されたときは(ステップS84でYES)、ステップS85において、当該所定時間が経過した投擲オブジェクトを爆発させる。一方、所定時間が経過した投擲オブジェクトが存在しないと判定されたときは(ステップS84でNO)、ステップS85の処理はスキップして、次のステップS86に処理が進められる。
【0168】
次に、ステップS86において、当たり判定処理が実行される。
図44は、上記ステップS86で示した当たり判定処理の詳細を示すフローチャートである。
図44においては、まず、ステップS101において、仮想空間内に存在している投擲オブジェクトが、他の何れかのオブジェクトと衝突したか否かが判定される(投擲オブジェクトが複数存在している場合は、それぞれの投擲オブジェクト毎に判定される)。ここでいう他のオブジェクトには、敵オブジェクト103の他、地形オブジェクト等も含まれる。また、プレイヤオブジェクト101を含むようにしてもよい。その場合は、自分の投擲した投擲オブジェクトに衝突しないようにプレイヤは注意を払うようになり、興趣性が増す。当該判定の結果、仮想空間内に存在する投擲オブジェクトが他のオブジェクトに衝突していなければ(ステップS101でNO)、当たり判定処理は終了する。
【0169】
一方、他のオブジェクトに衝突している投擲オブジェクトがあるときは(ステップS101でYES)、続くステップS102において、投擲オブジェクトが衝突したオブジェクトに対して命中処理が実行される。当該命中処理における処理の内容は、衝突したオブジェクトに応じて異なる内容となり、例えば、衝突したオブジェクトが敵オブジェクト103であれば、投擲オブジェクトを爆発させて仮想空間内から消去させる処理と、当該敵オブジェクト103のHPを減算する処理が実行され、当該敵オブジェクト103のHPが0になれば、敵オブジェクト103を仮想空間内から消去させる処理が加えて実行される。また、例えば、岩オブジェクトや樹オブジェクト等の地形オブジェクトに投擲オブジェクトが衝突したときは、地形オブジェクトにはHPが設定されていないため、投擲オブジェクトを爆発させて仮想空間内から消去させる処理のみが実行される。なお、地形オブジェクトに衝突した場合は、投擲オブジェクトの爆発処理は行わずに、物理法則に基づいた処理(岩オブジェクトに当たって跳ね返る動き等)を行うようにしてもよい。命中処理が終われば、当該当たり判定処理は終了する。
【0170】
図42に戻り、ステップS86の当たり判定処理が終われば、次に、上記ステップS15において、今回ポインティング座標データ334の値で前回ポインティング座標データ335を更新する処理が実行され、当該ゲーム処理が終了する。
【0171】
次に、上記
図41のステップS71の判定の結果、投擲中フラグ341がオンと判定されたとき(ステップS71でYES)の処理について説明する。この場合は、投擲攻撃中であるため、投擲攻撃中にかかる各処理が実行される。具体的には、まず、上記ステップS16において、ポインティング位置が画面内か否かが判定され、画面内と判定されたときは、上述したステップS17の変化量算出処理が実行され、ポインティング座標の変化量(つまり、カーソルの移動速度)が算出される。そして、上記ステップS18において変化量が第2の所定値以下であるか否かが判定される。その結果、第2の所定値以下ではないと判定されたときは(ステップS18でNO)、ステップS74に処理が進められる。
【0172】
ステップS74において、投擲オブジェクト連続発生数データ342の値が所定値に達したか否かが判定される。すなわち、今回の振りにおいて配置(生成)された投擲オブジェクトが所定数に達したか否かが判定される。その結果、投擲オブジェクト連続発生数データ342の値が所定値に達したと判定されたときは(ステップS74でYES)、上述したステップS82に処理が進められる。一方、投擲オブジェクト連続発生数データ342の値が所定値に達していないと判定されたときは(ステップS74でNO)、ステップS75に処理が進められる。
【0173】
ステップS75において、上記ステップS73でカウントアップを開始した投擲カウンタ340が所定値に達したか否かが判定される。その結果、投擲カウンタ340が所定値に達していないと判定されたときは(ステップS75でNO)、上述したステップS82に処理が進められる。たとえば、所定値が“3”であるとすれば、投擲攻撃中は、3フレームごとに投擲オブジェクトが投擲されることになる。一方、投擲カウンタ340が所定値に達したと判定されたときは(ステップS75でYES)、ステップS76において、投擲カウンタ340がリセットされ、続いてステップS77において、投擲オブジェクト連続発生数データ342をインクリメントし、上述したステップS80に処理が進められる。
【0174】
一方、上記ステップS16の判定の結果、ポインティング位置が画面内ではないと判定されたとき(ステップS16でNO)、または、上記ステップS18で変化量が第2の所定値以下であると判定されたときは(ステップS18でYES)、次に、ステップS78において、投擲中フラグ341がオフに設定される。続いて、ステップS79において、投擲オブジェクト連続発生数データ342をリセットする。そして、上記ステップS23においてインターバルカウンタ338のカウントアップが開始され、その後、上記ステップS82以降の処理が実行される。以上で、第2の実施形態にかかるゲーム処理の詳細の説明を終了する。
【0175】
このように、第2の実施形態では、1フレームでのポインティング位置の変化量が第1の所定値以上になったとき、すなわち、所定の速度以上でカーソルを動かしたときに、上述したような投擲攻撃を開始している。その後、カーソルの移動速度が第2の所定値以下になるまでは、所定の時間間隔で、投擲オブジェクトが杖オブジェクトの先から発射され続ける。これにより、第1の実施形態で説明したような斬撃操作と切替可能とすることで、より自由度の高い操作を可能としつつ、プレイヤオブジェクト101が装備する武器に応じて異なる攻撃方法を楽しませることができ、ゲームの興趣性をより高めることが可能となる。
【0176】
なお、上述した第2の実施形態では、投擲オブジェクトの発射位置(移動開始位置)が、移動している(振られている)杖オブジェクト201の先端の場合を例として説明していた。投擲オブジェクトの発射位置は、これに限るものではなく、発射位置は固定位置としてもよい。例えば、杖オブジェクト201の位置に関わらず、プレイヤオブジェクト101の正面位置(例えばお腹の位置等)から投擲オブジェクトが発射されるようにしてもよい。
【0177】
また、上記第2の実施形態では、連続して発射される投擲オブジェクトの発射間隔については、投擲カウンタ340を用いることによる「時間」単位で制御していた。これに限らず、杖オブジェクト201の先端の移動距離(あるいは、ポインティング座標や投影面座標の移動距離でもよい)に基づいて発射間隔を制御するようにしてもよい。例えば、ポインティング位置の変化量を累積するようにして、当該累積した変化量が所定値を越えたときに上記投擲オブジェクトの生成および杖オブジェクト201の先端位置への配置処理を実行し、累積した変化量をリセットするようにしてもよい。また、ポインティング位置の代わりに、杖オブジェクト201の先端の移動量を監視するようにし、当該杖オブジェクト201の先端が所定の距離だけ移動する毎に、上記投擲オブジェクトの生成および杖オブジェクト201の先端位置への配置処理を実行するようにしても良い。
【0178】
また、上述の第2の実施形態では、所定の条件が満たされたとき(変化量が第1の所定値以上となったとき、あるいは、投擲カウンタが所定値に達したとき)に、投擲オブジェクトはその都度生成され、配置されていた(上記ステップS78)。このように、その都度投擲オブジェクトを生成することに限らず、既に存在している(予め生成済みの)投擲オブジェクトを配置するようにしてもよい。例えば、プレイヤオブジェクト101がゲーム中に取得できる「アイテム」という設定で、予め投擲オブジェクトを仮想空間内に生成しておく。プレイヤは、ゲーム進行において適宜、「アイテム」としての投擲オブジェクトをプレイヤオブジェクト101に取得させる。そして、上記投擲攻撃に際しては、プレイヤオブジェクト101が取得済みの投擲オブジェクトを発射するようにしてもよい。また、この場合は、発射可能な投擲オブジェクトの数を、プレイヤオブジェクト101が所有している投擲オブジェクトの数までに制限されるようにすればよい。
【0179】
また、上述の第2の実施形態では、1つの爆弾202が、敵オブジェクト103に当たれば爆発する機能と時限式で爆発する機能の双方を備えていた。しかし、敵オブジェクト103に当たれば爆発する機能のみを備える爆弾と、時限式で爆発する爆弾が別個に存在し、プレイヤによっていずれの爆弾を発射するかを選択できるようにしてもよい。このようにすることで、プレイヤによる戦略がより重視されるゲームとなる。
【0180】
また、攻撃方法(特に、いわゆる間接攻撃の方法)に関しては、上記第2の実施形態で説明したような杖オブジェクト201の先から投擲オブジェクトを発射するという攻撃方法の他、例えば、レーザー光線を発するという攻撃方法を選択可能としてもよい。この場合は、上述したような射出ベクトルを算出した後、当該射出ベクトルに沿って仮想空間の奥行き方向に伸長していく直線オブジェクト(レーザー光線)を描画するようにすればよい。そして、当該直線と上記敵オブジェクト103とが衝突しているか否かを判定することで、上記当たり判定を行ってもよい。