説明

情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法

【課題】ユーザの動作を正確に判定することができる情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法を提供する。
【解決手段】ユーザの身体を乗せることが可能な入力装置から出力される当該入力装置に加わる荷重に基づいたデータが利用可能であり、当該入力装置から得られたデータを処理する情報処理装置のコンピュータで実行される。情報処理プログラムは、重心位置取得手段、ユーザ方向算出手段、および処理手段として、コンピュータを機能させる。重心位置取得手段は、入力装置から出力されたデータに基づいて、入力装置に加わる荷重における重心位置を繰り返し取得する。ユーザ方向算出手段は、重心位置を用いて、入力装置上で足踏みするユーザ方向を算出する。処理手段は、ユーザ方向に基づいて、所定の処理を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法に関し、特に例えば、ユーザの動作に基づいた処理を行う情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法に関する。
【背景技術】
【0002】
従来、ユーザが加える荷重の変化に基づいてゲームを行うことができるゲームシステムがある(例えば、特許文献1参照)。一例として、上記特許文献1で開示されたゲームシステムは、荷重センサを備えたボード型コントローラ上にユーザが乗ることによって当該荷重センサが検出した荷重値に基づいてゲーム処理が実行される。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2008−264195号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上記特許文献1で開示されたゲームシステムでは、ボード型コントローラの方向とボード型コントローラ上にユーザが乗るユーザの方向とが予め固定的に定義付けた上でゲーム処理が実行されている。したがって、ユーザは、上記定義付けられた方向に合わせた操作が常に要求され、操作方法が限定されてしまうことになる。例えば、ユーザが上記定義付けられた方向とは異なる方向に向いた状態でボード型コントローラ上に載って操作した場合、ユーザが行った操作をゲーム装置に正確に入力することができないため、ユーザが所望したゲーム処理を行うことができない。
【0005】
それ故に、本発明の目的は、ユーザの動作を正確に判定して当該動作に応じた処理を行うことができる情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法を提供することである。
【課題を解決するための手段】
【0006】
上記目的を達成するために、本発明は例えば以下のような構成を採用し得る。なお、特許請求の範囲の記載を解釈する際に、特許請求の範囲の記載によってのみその範囲が解釈されるべきであることが理解され、特許請求の範囲の記載と本欄の記載とが矛盾する場合には、特許請求の範囲の記載が優先する。
【0007】
本発明の情報処理プログラムの一構成例は、ユーザの身体を乗せることが可能な入力装置から出力される当該入力装置に加わる荷重に基づいたデータが利用可能であり、当該入力装置から得られたデータを処理する情報処理装置のコンピュータで実行される。情報処理プログラムは、重心位置取得手段、ユーザ方向算出手段、および処理手段として、コンピュータを機能させる。重心位置取得手段は、入力装置から出力されたデータに基づいて、入力装置に加わる荷重における重心位置を繰り返し取得する。ユーザ方向算出手段は、重心位置を用いて、入力装置上で足踏みするユーザ方向を算出する。処理手段は、ユーザ方向に基づいて、所定の処理を行う。
【0008】
上記によれば、入力装置上におけるユーザ方向を判定して、当該ユーザ方向に応じた処理が可能となる。
【0009】
また、上記ユーザ方向算出手段は、重心位置の移動方向に基づいて、ユーザ方向を算出してもよい。
【0010】
上記によれば、入力装置に加わる荷重の重心位置の移動方向によって、容易にユーザ方向を算出することができる。
【0011】
また、上記ユーザ方向算出手段は、重心位置取得手段によって異なるタイミングで取得された2つの重心位置を結ぶ直線に垂直な方向候補を用いて、ユーザ方向を算出してもよい。
【0012】
上記によれば、異なるタイミングで取得された2つの重心位置を結ぶ直線に垂直な方向を用いて、容易にユーザ方向を算出することができる。
【0013】
また、上記ユーザ方向算出手段は、重心位置取得手段によって異なるタイミングで連続して取得された2つの重心位置を結ぶ直線に垂直な方向候補を用いて、ユーザ方向を算出してもよい。
【0014】
上記によれば、異なるタイミングで連続して取得された2つの重心位置を結ぶ直線に垂直な方向を用いて、容易にユーザ方向を算出することができる。
【0015】
また、上記ユーザ方向算出手段は、前回の処理で決定されたユーザ方向を、方向候補が示す方向へ所定の割合で近づけることによって、ユーザ方向を更新してもよい。
【0016】
上記によれば、新たに得られた方向候補が示す方向に所定割合近づけることによって、当該方向候補が有する誤差等を取り除きながら、ユーザ動作に応じたユーザ方向に更新することができる。
【0017】
また、上記ユーザ方向算出手段は、方向候補が得られた重心位置間の距離が長いほど、割合を大きく設定してもよい。
【0018】
上記によれば、重心位置の移動量が大きい場合にユーザ方向を大きく変化させる重み付けを行って、ユーザ方向をより正確に推定することができる。
【0019】
また、上記ユーザ方向算出手段は、方向候補が得られた重心位置間の距離が所定の長さより短い場合、前回の処理で決定されたユーザ方向を変化させなくてもよい。
【0020】
上記によれば、方向候補を用いてユーザ方向を推定する際の誤差を取り除くことができる。
【0021】
また、上記ユーザ方向算出手段は、異なるタイミングで繰り返し取得された2つの重心位置を結ぶ直線に垂直な方向候補を繰り返し算出し、当該繰り返し算出された複数の方向候補に基づいて1つの方向候補を算出してもよい。
【0022】
上記によれば、複数の方向候補を用いて1つの方向候補を算出することによって、突発的に方向候補に生じる誤差がユーザ方向の推定に与える影響を少なくすることができる。
【0023】
また、上記ユーザ方向算出手段は、直線に垂直な一対の方向のうち、現時点で設定されているユーザ方向に近い方を方向候補として算出してもよい。
【0024】
上記によれば、ユーザ方向が急激に変化しないことを利用して、ユーザ方向をより正確に判定することができる。
【0025】
また、上記ユーザ方向算出手段は、直線に垂直な一対の方向のうち、一方の方向が所定の範囲内である場合、他方の方向を方向候補として算出してもよい。
【0026】
上記によれば、入力装置上でユーザが取りにくい姿勢におけるユーザ方向を除外することによって、ユーザ方向の判定精度を向上させることができる。
【0027】
また、上記ユーザ方向算出手段は、異なるタイミングで繰り返し取得された2つの重心位置を結ぶ直線に垂直な方向で、かつ、当該2つの重心位置の距離を大きさとした方向候補ベクトルを繰り返し算出し、当該繰り返し算出された複数の方向候補ベクトルを加算した1つのベクトルの方向を方向候補として算出してもよい。
【0028】
上記によれば、加算されたベクトルの方向が重心の移動量で重み付けされた方向となるため、ユーザ方向をより正確に推定することができる。
【0029】
また、上記ユーザ方向算出手段は、直線に垂直な一対の方向のうち、現時点で設定されているユーザ方向に近い方を方向候補ベクトルの方向として算出してもよい。
【0030】
上記によれば、ユーザ方向が急激に変化しないことを利用して、ユーザ方向をより正確に判定することができる。
【0031】
また、上記ユーザ方向算出手段は、直線に垂直な一対の方向のうち、一方の方向が所定の範囲内である場合、他方の方向を方向候補ベクトルの方向として算出してもよい。
【0032】
上記によれば、入力装置上でユーザが取りにくい姿勢におけるユーザ方向を除外することによって、ユーザ方向の判定精度を向上させることができる。
【0033】
また、判定線設定手段として、さらにコンピュータを機能させてもよい。上記判定線設定手段は、上記ユーザ方向算出手段が算出したユーザ方向に延びる少なくとも1つの判定線を設定する。この場合、上記処理手段は、重心位置取得手段が繰り返し取得する重心位置が判定線を横断した場合、入力装置上でユーザが足踏みしたと判定し、当該判定に基づいて所定の処理を行ってもよい。
【0034】
上記によれば、ユーザ方向を入力装置上の足踏み判定に用いることができる。
【0035】
また、足踏み中心位置算出手段として、さらにコンピュータを機能させてもよい。上記足踏み中心位置算出手段は、重心位置取得手段が取得する重心位置に基づいて、入力装置上で足踏みするユーザの足踏み中心位置を算出する。この場合、上記判定線設定手段は、ユーザ方向へ足踏み中心位置を基準とした位置に判定線を設定してもよい。
【0036】
上記によれば、足踏み判定で用いる判定線を適切な位置に設定することができる。
【0037】
また、上記判定線設定手段は、足踏み中心位置を中心として所定の間隙を有する位置にそれぞれユーザ方向へ延びる2つの判定線を設定してもよい。上記処理手段は、重心位置が間隙から判定線の一方を横断した場合、入力装置上でユーザが一方の足で足踏みしたと判定し、重心位置が間隙から判定線の他方を横断した場合、入力装置上でユーザが他方の足で足踏みしたと判定し、当該判定に基づいて所定の処理を行ってもよい。
【0038】
上記によれば、左足の足踏みおよび右足の足踏みをそれぞれ異なる判定線で判定することによって、より正確な足踏み動作の判定が可能となる。
【0039】
また、上記足踏み中心位置算出手段は、重心位置取得手段が繰り返し取得する重心位置に所定の割合で追従する位置に足踏み中心位置を設定してもよい。
【0040】
また、上記足踏み中心位置算出手段は、重心位置取得手段が所定期間内に繰り返し取得した重心位置を平均した位置に足踏み中心位置を設定してもよい。
【0041】
上記によれば、足踏み中心位置を容易に算出することができる。
【0042】
また、上記判定線設定手段は、所定の基準方向に対するユーザ方向の角度に応じて、間隙の幅を変化させてもよい。
【0043】
上記によれば、入力装置の形状等に合わせて、適切な判定線を設定することができる。
【0044】
また、上記処理手段は、ユーザ方向に基づいて、仮想世界に設定されたオブジェクトおよび仮想カメラの少なくとも一方の方向を変化させることによって、所定の処理を行ってもよい。
【0045】
上記によれば、ユーザ方向によって仮想世界におけるオブジェクトや仮想カメラの方向を変化させることができる。
【0046】
また、本発明は、上記各手段を備える情報処理装置および情報処理システムや上記各手段で行われる動作を含む情報処理方法の形態で実施されてもよい。
【発明の効果】
【0047】
本発明によれば、入力装置上におけるユーザ方向を判定して、当該ユーザ方向に応じた処理が可能となる。
【図面の簡単な説明】
【0048】
【図1】本発明の一実施形態に係るゲームシステム1を説明するための外観図
【図2】図1のゲーム装置本体5の機能ブロック図
【図3】図1のボード型コントローラ9の外観の一例を示す斜視図
【図4】図1のボード型コントローラ9の電気的な構成の一例を示すブロック図
【図5】図1のボード型コントローラ9を用いて操作するユーザの様子の一例を示す図
【図6】図1のモニタ2に表示される画像の一例を示す図
【図7】ボード型コントローラ9上においてユーザが足踏みする方向を変えた場合にプレイヤオブジェクト正面方向が変化する一例を示す図
【図8】重心位置の移動に応じて推定方向ベクトルが算出される一例を示す図
【図9】算出されたユーザ正面方向ベクトルに応じて設定される足踏み判定線の一例を示す図
【図10】図1のゲーム装置本体5のメインメモリに記憶される主なデータおよびプログラムの一例を示す図
【図11】図1のゲーム装置本体5において実行される処理の一例を示すフローチャート
【図12】図11におけるステップ44の推定方向ベクトル算出処理の一例を示すサブルーチン
【図13】図11におけるステップ45のユーザ方向ベクトル算出処理の一例を示すサブルーチン
【図14】図11におけるステップ46の足踏み判定線設定処理の一例を示すサブルーチン
【図15】図11におけるステップ47の動作設定処理の一例を示すサブルーチン
【図16】推定方向ベクトルの方向を反転させる反転範囲の一例を示す図
【発明を実施するための形態】
【0049】
図1を参照して、本発明の一実施形態に係る情報処理プログラムを実行する情報処理装置および当該情報処理装置を含む情報処理システムについて説明する。以下、説明を具体的にするために、当該情報処理装置の一例として据置型のゲーム装置本体5を用い、ゲーム装置本体5を含むゲームシステムを用いて説明する。なお、図1は、据置型のゲーム装置3を含むゲームシステム1の一例を示す外観図である。図2は、ゲーム装置本体5の一例を示すブロック図である。以下、当該ゲームシステム1について説明する。
【0050】
図1において、ゲームシステム1は、表示手段の一例である家庭用テレビジョン受像機(以下、モニタと記載する)2と、モニタ2に接続コードを介して接続する据置型のゲーム装置3とから構成される。モニタ2は、ゲーム装置3から出力された音声信号を音声出力するためのスピーカを備える。また、ゲーム装置3は、本願発明の情報処理プログラムの一例となるプログラム(例えば、ゲームプログラム)を記録した光ディスク4と、光ディスク4のプログラムを実行してゲーム画面をモニタ2に表示出力させるためのコンピュータを搭載したゲーム装置本体5と、表示画面に表示されたオブジェクト等を操作するために必要な操作情報をゲーム装置本体5に与えるためのコントローラ7と、ボード型コントローラ9とを含む。なお、ゲームシステム1は、少なくともボード型コントローラ9を用いたゲーム操作に基づいて、ゲーム装置本体5においてゲーム処理を実行し、ゲーム処理によって得られるゲーム画像をモニタ2等の表示装置に表示するものである。なお、ゲーム装置本体5とコントローラ7およびボード型コントローラ9とは、無線によって無線通信可能に接続される。例えば、上記無線通信は、Bluetooth(登録商標)規格に従って実行されるが、赤外線や無線LANなど他の規格に従って実行されてもよい。
【0051】
ゲーム装置本体5は、無線コントローラモジュール19(図2参照)を内蔵する。無線コントローラモジュール19は、コントローラ7および/またはボード型コントローラ9から無線送信されるデータを受信し、ゲーム装置本体5からコントローラ7へデータを送信して、コントローラ7および/またはボード型コントローラ9とゲーム装置本体5とを無線通信によって接続する。また、ゲーム装置本体5には、ゲーム装置本体5に対して交換可能に用いられる情報記憶媒体の一例である光ディスク4が脱着される。
【0052】
ゲーム装置本体5には、セーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ17(図2参照)が搭載される。ゲーム装置本体5は、光ディスク4に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ2に表示する。ゲームプログラム等は、光ディスク4に限らず、フラッシュメモリ17に予め記録されたものを実行するようにしてもよい。また、ゲーム装置本体5は、フラッシュメモリ17に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置3のユーザは、モニタ2等に表示されたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
【0053】
コントローラ7およびボード型コントローラ9は、無線コントローラモジュール19を内蔵するゲーム装置本体5へ、例えばBluetoothの技術を用いて操作情報等の送信データをそれぞれ無線送信する。コントローラ7は、主にモニタ2の表示画面に表示された選択肢の選択等をするための操作手段である。コントローラ7は、片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン(十字キー等を含む)とが設けられている。
【0054】
なお、他の実施形態においてはコントローラ7および/またはボード型コントローラ9とゲーム装置本体5とは有線で接続されてもよい。また、本実施形態では、ゲームシステム1に含まれるコントローラ7およびボード型コントローラ9はそれぞれ1つとするが、ゲーム装置本体5は複数のコントローラ7および複数のボード型コントローラ9と通信可能であり、所定台数のコントローラ7およびボード型コントローラ9をそれぞれ同時に使用することによって複数人でゲームをプレイすることが可能である。
【0055】
コントローラ7は、例えばプラスチック成型によって形成されたハウジングを有しており、当該ハウジングに複数の操作部(操作ボタン)が設けられている。そして、コントローラ7は、操作部に対する入力状態(各操作ボタンが押下されたか否か)を示す操作データをゲーム装置本体5に送信する。なお、後述する本発明の実施形態においては、コントローラ7を用いることなくゲームをプレイすることが可能である。ボード型コントローラ9の詳細な構成については後述する。
【0056】
次に、図2を参照して、ゲーム装置本体5の内部構成について説明する。図2は、ゲーム装置本体5の構成の一例を示すブロック図である。ゲーム装置本体5は、CPU(Central Processing Unit)10、システムLSI(Large Scale Integration)11、外部メインメモリ12、ROM/RTC(Read Only Memory/Real Time Clock)13、ディスクドライブ14、およびAV−IC(Audio Video−Integrated Circuit)15等を有する。
【0057】
CPU10は、光ディスク4に記憶されたプログラムを実行することによって処理を実行するものであり、ゲームプロセッサとして機能する。CPU10は、システムLSI11に接続される。システムLSI11には、CPU10の他、外部メインメモリ12、ROM/RTC13、ディスクドライブ14、およびAV−IC15が接続される。システムLSI11は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。なお、システムLSI11の内部構成については、後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたプログラムや、フラッシュメモリ17から読み出されたプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置本体5の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ35または外部メインメモリ12に読み出したデータを書き込む。
【0058】
システムLSI11には、入出力プロセッサ31、GPU(Graphics Processor Unit)32、VRAM(Video RAM)34、および内部メインメモリ35が設けられる。図示は省略するが、これらの構成要素31、32、34、および35は、内部バスによって互いに接続される。
【0059】
GPU32は、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM34は、GPU32がグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU32は、VRAM34に記憶されたデータを用いて画像データを作成する。
【0060】
上述のように生成された画像データは、AV−IC15によって読み出される。AV−IC15は、読み出した画像データをモニタ2に出力する。また、AV−IC15は、システムLSI11において生成された音声データを読み出し、モニタ2のスピーカに出力する。これによって、画像がモニタ2に表示されるとともに音がスピーカから出力される。
【0061】
入出力プロセッサ(I/Oプロセッサ)31は、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ31は、フラッシュメモリ17、および無線コントローラモジュール19に接続される。無線コントローラモジュール19にはアンテナ23が接続される。
【0062】
入出力プロセッサ31は、アンテナ23および無線コントローラモジュール19を介して、コントローラ7および/またはボード型コントローラ9から送信される操作データ等を受信し、内部メインメモリ35または外部メインメモリ12のバッファ領域に記憶(一時記憶)する。なお、内部メインメモリ35には、外部メインメモリ12と同様に、光ディスク4から読み出されたプログラムや、フラッシュメモリ17から読み出されたプログラムを記憶したり、各種データを記憶したりしてもよく、CPU10のワーク領域やバッファ領域として用いられてもかまわない。
【0063】
入出力プロセッサ31は、図示しない無線通信モジュールやアンテナを介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。また、入出力プロセッサ31は、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、上記アンテナ、および上記無線通信モジュールを介して受信し、受信したデータをフラッシュメモリ17に記憶する。フラッシュメモリ17には、ゲーム装置本体5と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置本体5を利用してプレイしたゲームのセーブデータ(処理の結果データまたは途中データ)が記憶されてもよい。
【0064】
次に、図3および図4を参照して、ボード型コントローラ9の構成について説明する。図3は、図1に示したボード型コントローラ9の外観の一例を示す斜視図である。図3に示されるように、ボード型コントローラ9は、ユーザがその上に乗る(ユーザの足を乗せる)台9a、台9aに掛かる荷重を検出するための少なくとも4つの荷重センサ94a〜94dを備える。各荷重センサ94a〜94dは、それぞれ台9aに内包されており、図3においてはそれらの配置位置がそれぞれ破線で示されている。なお、以下の説明において、4つの荷重センサ94a〜94dを総称して説明する場合、荷重センサ94と記載することがある。
【0065】
台9aは、略直方体に形成されており、上面視で略長方形状である。例えば、台9aは、長方形状の短辺が30cm程度に設定され、長辺が50cm程度に設定される。台9aの上面は、平坦に形成され、ユーザが両足裏をそれぞれ置いて乗るための一対の面が設定されている。具体的には、台9aの上面には、電源ボタン9cが設けられている方向が初期設定においてユーザの後方となるように配置された場合に、ユーザが左足を乗せるための面(図3における左奥側に2重線で囲まれた領域)および左足を乗せるための面(図3における右手前側に2重線で囲まれた領域)がそれぞれ設定されている。そして、台9aの4隅の側面は、例えば部分的に円柱状に張り出すように形成されている。
【0066】
台9aにおいて、4つの荷重センサ94a〜94dは、所定の間隔を置いて配置される。当該実施例では、4つの荷重センサ94a〜94dは、台9aの周縁部に、具体的には4隅にそれぞれ配置される。荷重センサ94a〜94dの間隔は、台9aに対するユーザの荷重のかけ方によるゲーム操作の意図をより精度良く検出できるように適宜な値に設定される。例えば、荷重センサ94a〜94dは、ボード型コントローラ9の4隅下部に設けられた4つの脚が配置される箇所にそれぞれ設けられる。
【0067】
荷重センサ94は、例えば歪ゲージ(歪センサ)式ロードセルであり、入力された荷重を電気信号に変換する荷重変換器である。荷重センサ94では、荷重入力に応じて、起歪体が変形して歪が生じる。この歪が、起歪体に貼り付けられた歪センサによって電気抵抗の変化に変換され、さらに電圧変化に変換される。したがって、荷重センサ94は、入力荷重を示す電圧信号を出力端子から出力することができる。
【0068】
なお、荷重センサ94は、音叉振動式、弦振動式、静電容量式、圧電式、磁歪式、またはジャイロ式のような他の方式の荷重センサであってもよい。
【0069】
図3に戻って、ボード型コントローラ9には、さらに、電源ボタン9cが設けられる。ボード型コントローラ9が起動していない状態で電源ボタン9cが操作(例えば、電源ボタン9cの押下)されると、ボード型コントローラ9の各回路コンポーネント(図4参照)に電力が供給される。ただし、ボード型コントローラ9は、ゲーム装置本体5からの指示に従って電源オンされて各回路コンポーネントに電力供給が開始される場合もある。なお、ボード型コントローラ9は、ユーザが乗っていない状態が一定時間(例えば、30秒)以上継続すると、自動的に電源がオフされてもよい。また、ボード型コントローラ9が起動している状態で、電源ボタン9cが再度操作された場合、電源がオフされて各回路コンポーネントへの電力供給が停止されてもよい。
【0070】
図4は、ボード型コントローラ9の電気的な構成の一例を示すブロック図である。なお、図4では、信号およびデータの流れは実線矢印で示され、電力の供給が破線矢印で示されている。
【0071】
図4において、ボード型コントローラ9は、その動作を制御するためのマイクロコンピュータ(マイコン)100を含む。マイコン100は、図示しないCPU、ROM、およびRAM等を含み、CPUがROMに記憶されたプログラムに従ってボード型コントローラ9の動作を制御する。
【0072】
マイコン100には、電源ボタン9c、ADコンバータ102、および無線モジュール106が接続される。さらに、無線モジュール106には、アンテナ106aが接続される。4つの荷重センサ94a〜94dは、それぞれADコンバータ102に接続される。
【0073】
荷重センサ94a〜94dは、入力された荷重を示す信号をそれぞれ出力する。これらの信号は、ADコンバータ102でアナログ信号からデジタルデータに変換されて、マイコン100に入力される。荷重センサ94a〜94dの検出値には荷重センサ94a〜94dの識別情報が付与されて、いずれの荷重センサ94a〜94dの検出値であるかが識別可能にされる。このようにして、マイコン100は、同一時刻における4つの荷重センサ94a〜94dそれぞれの荷重検出値を示すデータを取得することができる。
【0074】
荷重センサ94a〜94dからの検出値を示すデータは、ボード型コントローラ9のボード操作データ(入力データ)として、マイコン100から無線モジュール106およびアンテナ106aを介してゲーム装置本体5に送信される。例えば、ゲーム装置本体5からの命令を受けて荷重検出を行った場合、マイコン100は、ADコンバータ102から荷重センサ94a〜94dの検出値データを受信したことに応じて、当該検出値データをゲーム装置本体5に送信する。なお、マイコン100は、一定時間ごとに上記検出値データをゲーム装置本体5に送信するようにしてもよい。荷重の検出周期よりも送信周期が長い場合には、送信タイミングまでに検出された複数の検出タイミングの荷重値を含むデータを送信すればよい。
【0075】
なお、無線モジュール106は、ゲーム装置本体5の無線コントローラモジュール19と同じ無線規格(Bluetooth、無線LANなど)で通信可能にされる。したがって、ゲーム装置本体5のCPU10は、無線コントローラモジュール19等を介して情報取得命令をボード型コントローラ9に送信することができる。このように、ボード型コントローラ9は、無線モジュール106およびアンテナ106aを介して、ゲーム装置本体5からの命令を受信することができる。また、ボード型コントローラ9は、荷重センサ94a〜94dの荷重検出値(または荷重算出値)を含むボード操作データをゲーム装置本体5に送信することができる。
【0076】
例えば4つの荷重センサ94a〜94dで検出される4つの荷重値の単なる合計値を用いて実行されるようなゲームの場合には、ユーザはボード型コントローラ9の4つの荷重センサ94a〜94dに対して任意の位置をとることができる。つまり、ユーザは、台9aの上の任意の位置に任意の向きで乗ってゲームをプレイすることができる。しかしながら、ゲームの種類によっては、4つの荷重センサ94で検出される荷重値がボード型コントローラ9に対してどのような位置に加えられたのかを識別し、ボード型コントローラ9に対してユーザがどのような方向に向いて乗っているのかを識別して処理を行ってもよい。この場合、ボード型コントローラ9の4つの荷重センサ94から得られた荷重値を用いて、ボード型コントローラ9とユーザとの位置関係を推定し、当該ユーザ方向を方向入力に用いて処理することが可能となる。
【0077】
しかしながら、ボード型コントローラ9を用いて方向入力を行う場合、初期設定としてボード型コントローラ9とユーザとの位置関係が把握されている必要がある。この場合、例えば、初期設定において4つの荷重センサ94とユーザとの位置関係を予め規定しておき、当該初期設定においては当該所定の位置関係が得られるようにユーザが台9a上に乗ることが前提とされてもよい。典型的には、台9aの中央に乗ったユーザの前後左右にそれぞれ荷重センサ94a〜94dが2つずつ存在するような位置関係、つまり、ユーザがボード型コントローラ9の台9aの中央に乗った位置関係が初期設定において規定される。この場合、当該実施例では、ボード型コントローラ9の台9aが平面視で矩形状に形成されるとともにその矩形の1辺(長辺)に電源ボタン9cが設けられているので、この電源ボタン9cを目印として利用して、ユーザには電源ボタン9cの設けられた長辺が所定の方向(前、後、左または右)に存在するようにして初期設定において台9aに乗ってもらうことを予め決めておく。このようにすれば、荷重センサ94a〜94dで初期設定において検出される荷重値は、ユーザから見て所定の方向(右前、左前、右後および左後)の荷重値となる。具体的には、電源ボタン9cの設けられた長辺がユーザの後方左右となるように、初期設定においてユーザに台9aに乗ってもらう。この場合、荷重センサ94a〜94dで初期設定において検出される荷重値は、それぞれユーザから見て右後ろの荷重値、左後ろの荷重値、右前の荷重値、および左前の荷重値となる。そして、初期設定後においては、4つの荷重センサ94a〜94dから得られた荷重値を用いて、ボード型コントローラ9に乗っているユーザ方向の変化を推定し、当該ユーザ方向を用いて所定の処理が行われる。
【0078】
次に、ゲーム装置本体5が行う具体的な処理を説明する前に、図5〜図9を用いてゲーム装置本体5で行う情報処理の概要について説明する。なお、図5は、ボード型コントローラ9を用いて操作するユーザの様子の一例を示す図である。図6は、モニタ2に表示される画像の一例を示す図である。図7は、ボード型コントローラ9上においてユーザが足踏みする方向を変えた場合にプレイヤオブジェクト正面方向(移動方向)が変化する一例を示す図である。図8は、重心位置の移動に応じて推定方向ベクトルが算出される一例を示す図である。図9は、算出されたユーザ正面方向ベクトルに応じて設定される足踏み判定線の一例を示す図である。
【0079】
図5に示すように、ユーザは、ボード型コントローラ9上に乗って操作する。そして、ユーザは、モニタ2に表示された画像を見て、ボード型コントローラ9上でのユーザの正面方向を変化させながらボード型コントローラ9上で動作(例えば、足踏み動作や屈伸動作)することによってプレイする。そして、モニタ2には、ボード型コントローラ9上におけるユーザの正面方向(ユーザ方向)と、ボード型コントローラ9上におけるユーザ動作とに応じて、仮想世界においてプレイヤオブジェクトPoが動作(例えば、移動方向や姿勢が変化する動作や移動速度が変化する動作)し、プレイヤオブジェクトPoの位置や方向に応じて仮想世界に設定される仮想カメラの位置や方向を変化させたゲーム画像が表現される。一例として、図5においては、仮想世界内をウォーキング、ジョギング、またはランニングするプレイヤオブジェクトPoが表示されている。そして、ユーザは、ボード型コントローラ9上で、ウォーキング、ジョギング、またはランニングするように足踏みする。この場合、ユーザの足踏み動作に応じた速度で、プレイヤオブジェクトPoが仮想世界内を移動するとともに、ボード型コントローラ9上におけるユーザ方向に応じて仮想世界内におけるプレイヤオブジェクトPoの移動方向が変化する。
【0080】
例えば、ボード型コントローラ9上でユーザが足踏みするような動作をした場合、当該足踏み動作に応じた速度でプレイヤオブジェクトPoがウォーキング、ジョギング、またはランニングして仮想世界内を移動する。また、ボード型コントローラ9上でユーザが屈伸するような動作をした場合、当該屈伸動作に応じたジャンプ力でプレイヤオブジェクトPoが仮想世界内をジャンプして移動する。このように、ユーザは、ボード型コントローラ9上の動作によって、プレイヤオブジェクトPoの移動方法や移動速度を変化させることができる。
【0081】
上述したように、ボード型コントローラ9からはボード型コントローラ9上のユーザ動作に応じた荷重検出値が出力される。そして、上記荷重検出値を用いれば、ボード型コントローラ9に加わっている合計荷重やボード型コントローラ9に加わっている荷重の重心位置の算出が可能である。また、上記合計荷重の変化や重心位置の変化を用いれば、ユーザがボード型コントローラ9上でどのような動作をしているのか推定することが可能となる。このようなボード型コントローラ9上で推定されるユーザ動作に応じて、プレイヤオブジェクトPoの移動方法や移動速度が設定される。
【0082】
また、ボード型コントローラ9上におけるユーザ方向に応じて、仮想世界内におけるプレイヤオブジェクトPoの方向(例えば、プレイヤオブジェクトPoの正面方向や移動方向)が変化する。一例として、図7に示すように、ユーザがボード型コントローラ9上で足踏みしている方向を左に変えた場合(すなわち、ユーザ方向が左方向へ変化した場合)、プレイヤオブジェクトPoが移動する方向(プレイヤオブジェクトPoの正面方向)がプレイヤオブジェクトPoから見て左に変化する。また、ユーザがボード型コントローラ9上で足踏みしている方向を右に変えた場合(すなわち、ユーザ方向が右方向へ変化した場合)、プレイヤオブジェクトPoが移動する方向がプレイヤオブジェクトPoから見て右に変化する。このように、ボード型コントローラ9上におけるユーザ方向をプレイヤオブジェクトPoの姿勢や移動方向に連動させることによって、ユーザはボード型コントローラ9上で仮想世界内を自分自身が移動しているかのようなリアリティある操作が可能となる。なお、プレイヤオブジェクトPoを含む仮想世界画像を生成してモニタ2に表示するための仮想カメラの位置や方向については、上記プレイヤオブジェクトPoの姿勢や移動方向が変化(すなわち、ボード型コントローラ9上におけるユーザ方向が変化)することに応じて変化させてもいいし、変化させなくてもよい。前者の場合、プレイヤオブジェクトPoの方向や位置を上記仮想カメラの向きや位置に連動させることによって、ユーザはさらにモニタ2を介してあたかも仮想世界内を移動しているかのような感覚を味わうことができる。
【0083】
ボード型コントローラ9上におけるユーザ方向を推定する際、ボード型コントローラ9に加わっている荷重の重心位置の動きに基づいて算出される推定方向ベクトルが用いられる。例えば、図8に示すように、推定方向ベクトルは、ボード型コントローラ9の台9a上の位置に対応する所定の座標系(例えば、台9aの中心を原点、台9aの長辺方向をX1軸方向、短辺方向をY1軸方向とするX1Y1座標系)において、異なる時点で得られた2つの上記重心位置(典型的には、連続して得られた2つの重心位置)を結ぶ直線に垂直で、かつ、ボード型コントローラ9の上面に平行(例えば、水平方向)な方向で、当該直線の長さに設定される。すなわち、推定方向ベクトルは、上記重心位置の移動量の長さで、当該重心位置の移動方向に対して垂直方向に設定される。ここで、推定方向ベクトルが設定される上記方向は、上記移動方向に対して左水平方向および右水平方向の2方向が考えられる。後述により明らかとなるが、推定方向ベクトルは、上記2方向のうち、後述の処理において設定されるユーザ方向ベクトルの方向に近い方が選択される。そして、上記ユーザ方向は、上述したように設定された推定方向ベクトルを所定数(例えば、30フレーム分)加算することによって算出されるユーザ方向ベクトルによって推定される。具体的には、上記推定方向ベクトルを得られた時系列順に所定数加算して正規化することによってユーザ方向ベクトルを算出し、当該ユーザ方向ベクトルの方向がボード型コントローラ9上における現時点のユーザ方向であると推定する。
【0084】
また、ユーザがボード型コントローラ9上で足踏みする動作の判定においても上記重心位置が用いられる。例えば、上記座標系に、ユーザが足踏み動作において左足を上げて右足を下げた場合に上記重心位置が移動する領域(右足領域)と、ユーザが足踏み動作において右足を上げて左足を下げた場合に上記重心位置が移動する領域(左足領域)とが設定される。例えば、電源ボタン9cが設けられている長辺が後方となるようにユーザがボード型コントローラ9上に乗って足踏みする場合、台9a上における左右(例えば、電源ボタン9cを後方にした左右)に左足領域および右足領域が設定され、左足領域および右足領域の間にはユーザの前後方向に延びる所定幅の中立領域が設定される。そして、上記重心位置が中立領域から右足領域に移動した場合にユーザが左足を上げたと判断し、上記重心位置が中立領域から左足領域に移動した場合にユーザが右足を上げたと判断する。
【0085】
なお、ユーザは、ボード型コントローラ9上で向きを変えながら足踏みをすることが考えられる。この場合、図9に示すように、ボード型コントローラ9上においてユーザが足踏みしている動作を判定する際にも上記ユーザ方向ベクトルが用いられる。ここで、上記左足領域、上記右足領域、および上記中立領域それぞれの位置を固定していると、ユーザがボード型コントローラ9上で向きを変えると正確な足踏み判定ができなくなる。このような場合、上記座標系における重心位置の移動を用いて算出されるユーザ方向ベクトルに基づいて、上記座標系における上記左足領域、上記右足領域、および上記中立領域を移動させればよい。例えば、上記中立領域が延びる方向をユーザ方向ベクトルの方向に変化させるとともに、上記中立領域の中心位置がユーザの足踏み中心位置と一致するように上記中立領域を移動させる。そして、当該中立領域の移動に応じて上記左足領域および上記右足領域を移動させる。このように上記左足領域、上記右足領域、および上記中立領域を移動させることによって、ボード型コントローラ9上で向きを変えながらユーザが足踏みしたとしても、正確に足踏み判定を行うことができる。
【0086】
次に、ゲームシステム1において行われる情報処理の詳細を説明する。まず、図10を参照して、当該情報処理において用いられる主なデータについて説明する。なお、図10は、ゲーム装置本体5の外部メインメモリ12および/または内部メインメモリ35(以下、2つのメインメモリを総称して、単にメインメモリと記載する)に記憶される主なデータおよびプログラムの一例を示す図である。
【0087】
図10に示すように、メインメモリのデータ記憶領域には、操作データDa、荷重値データDb、重心位置データDc、推定方向ベクトルデータDd、ユーザ方向ベクトル候補データDe、ユーザ方向ベクトルデータDf、重心移動量データDg、足踏み中心位置データDh、足踏み判定線データDi、オブジェクト動作データDj、走行速度データDk、走行距離データDm、足踏みフラグデータDn、および画像データDo等が記憶される。なお、メインメモリには、図10に示す情報に含まれるデータの他、モニタ2に表示される他のオブジェクト等に関するデータ等、処理に必要なデータ等が適宜記憶される。また、メインメモリのプログラム記憶領域には、情報処理プログラムを構成する各種プログラム群Paが記憶される。
【0088】
操作データDaは、コントローラ7やボード型コントローラ9から送信データとして送信されてくる一連の操作情報が格納され、最新の操作データに更新される。例えば、操作データDaは、荷重データDa1等を含んでいる。荷重データDa1は、ボード型コントローラ9の荷重センサ94a〜94dがそれぞれ検出した荷重検出値を示すデータである。
【0089】
なお、ゲーム装置本体5に備える無線コントローラモジュール19は、コントローラ7やボード型コントローラ9から所定周期(例えば、1/200秒毎)に送信される操作情報に含まれるデータ(例えば、荷重検出値を示すデータ)を受信し、無線コントローラモジュール19に備える図示しないバッファに蓄えられる。その後、上記バッファに蓄えられたデータが処理周期である1フレーム毎(例えば、1/60秒毎)に読み出されて、メインメモリの操作データDa(例えば、荷重データDa1)がそれぞれ更新される。
【0090】
このとき、操作情報を受信する周期と処理周期とが異なるために、上記バッファには複数の時点に受信した操作情報が記述されていることになる。後述する処理の説明においては、後述する各ステップにおいて、複数の時点に受信した操作情報のうち最新の操作情報のみを用いて処理して、次のステップに進める態様を用いる。
【0091】
また、後述する処理フローでは、荷重データDa1が処理周期である1フレーム毎に更新される例を用いて説明するが、他の処理周期で更新されてもかまわない。例えば、ボード型コントローラ9からの送信周期毎に荷重データDa1をそれぞれ更新し、当該更新された荷重データDa1を処理周期毎に利用する態様でもかまわない。この場合、荷重データDa1を更新する周期と、他の処理周期とが異なることになる。
【0092】
荷重値データDbは、ボード型コントローラ9が検出する荷重値を示すデータの集合である。例えば、荷重値データDbは、荷重センサ94a〜94dがそれぞれ検出した荷重の合計値(合計荷重値)を示すデータの集合である。具体的には、荷重値データDbは、時系列的に算出された所定期間内(例えば、30フレーム分)の上記合計荷重値を示すデータの配列であり、配列の各要素に上記合計荷重値を示すデータが時系列に格納される。
【0093】
重心位置データDcは、ボード型コントローラ9に加わっている荷重の重心位置を示すデータの集合である。例えば、重心位置データDcは、荷重センサ94a〜94dがそれぞれ検出した荷重値から所定の数式を用いて算出される重心位置を示すデータの集合である。具体的には、重心位置データDcは、時系列的に算出された所定期間内(例えば、31フレーム分以上)の上記重心位置を示すデータの配列であり、配列の各要素に上記重心位置を示すデータが時系列に格納される。
【0094】
推定方向ベクトルデータDdは、上記重心位置の動きに基づいて設定される推定方向ベクトル(図8参照)を示すデータの集合である。例えば、推定方向ベクトルデータDdは、前回の処理で算出された重心位置と時系列的に連続する今回の処理で算出された重心位置とを用いて繰り返し算出される推定方向ベクトルを示すデータの集合である。具体的には、推定方向ベクトルデータDdは、時系列的に算出された所定期間内(例えば、30フレーム分)の上記推定方向ベクトルを示すデータの配列であり、配列の各要素に上記推定方向ベクトルを示すデータが時系列に格納される。
【0095】
ユーザ方向ベクトル候補データDeは、現時点から所定時間内(例えば、30フレーム分)に得られた推定方向ベクトルを足し合わせて正規化することによって得られるユーザ方向ベクトル候補を示すデータである。
【0096】
ユーザ方向ベクトルデータDfは、ボード型コントローラ9上におけるユーザ方向を推定したユーザ方向ベクトルを示すデータである。後述により明らかとなるが、ユーザ方向ベクトルの方向は、上記ユーザ方向ベクトル候補の方向に所定の条件に基づいて近づけることによって、逐次更新される。
【0097】
重心移動量データDgは、所定期間内における上記重心位置の移動量を示す重心移動量を示すデータである。
【0098】
足踏み中心位置データDhは、ボード型コントローラ9上において足踏みしているユーザの足踏み中心位置を示すデータである。足踏み判定線データDiは、ユーザ方向ベクトルおよび足踏み中心位置に基づいて算出され、ユーザの足踏み動作を判定するために用いられる各判定線(判定基準線、左足踏み判定線、右足踏み判定線)を示すデータである。
【0099】
オブジェクト動作データDjは、仮想世界におけるプレイヤオブジェクトPoの動作、位置、および方向を示すデータである。走行速度データDkは、仮想世界内を走行(歩行)するプレイヤオブジェクトPoの速度を示すデータである。走行距離データDmは、仮想世界内を走行(歩行)したプレイヤオブジェクトPoの距離を示すデータである。
【0100】
足踏みフラグデータDnは、ボード型コントローラ9上においてユーザが左足を上げて右足で足踏みするような動作をした場合にオンに設定され、右足を上げて左足で足踏みするような動作をした場合にオフに設定される足踏みフラグを示すデータである。
【0101】
画像データDoは、プレイヤオブジェクトデータDo1および背景画像データDo2等を含んでいる。プレイヤオブジェクトデータDo1は、仮想世界にプレイヤオブジェクトPoを配置してゲーム画像を生成するためのデータである。背景画像データDo2は、仮想世界に背景を配置してゲーム画像を生成するためのデータである。
【0102】
次に、図11〜図16を参照して、ゲーム装置本体5において行われる情報処理の詳細を説明する。なお、図11は、ゲーム装置本体5において実行される情報処理の一例を示すフローチャートである。図12は、図11におけるステップ44の推定方向ベクトル算出処理の一例を示すサブルーチンである。図13は、図11におけるステップ45のユーザ方向ベクトル算出処理の一例を示すサブルーチンである。図14は、図11におけるステップ46の足踏み判定線設定処理の一例を示すサブルーチンである。図15は、図11におけるステップ47の動作設定処理の一例を示すサブルーチンである。図16は、推定方向ベクトルの方向を反転させる反転範囲の一例を示す図である。ここで、図11〜図15に示すフローチャートにおいては、情報処理のうち、ボード型コントローラ9を用いたユーザの操作に応じて、プレイヤオブジェクトPoが動作して表示される処理について主に説明し、本願発明と直接関連しない他の処理については詳細な説明を省略する。また、図11〜図15では、CPU10が実行する各ステップを「S」と略称する。
【0103】
ゲーム装置本体5の電源が投入されると、ゲーム装置本体5のCPU10は、ROM/RTC13に記憶されている起動用のプログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶された情報処理プログラムがメインメモリに読み込まれ、CPU10によって当該プログラムの実行が開始される。図11〜図15に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
【0104】
図11において、CPU10は、処理の初期設定を行い(ステップ41)、次のステップに処理を進める。例えば、上記ステップ41における初期設定において、CPU10は、仮想世界の設定やプレイヤオブジェクトPoの配置および方向等の初期設定を行って、オブジェクト動作データDj等を更新する。また、上記ステップ41における初期設定では、CPU10は、モニタ2に表示する画像やスピーカから出力する音声を用いて、ボード型コントローラ9の前方方向(例えば、図3に示す電源ボタン9cが設けられている側面を後方側面として、当該後方側面から当該後方側面と相対する前方側面へ向かう方向)をユーザの正面方向としてボード型コントローラ9上に乗るようにユーザを促す。そして、CPU10は、ユーザ方向ベクトルをボード型コントローラ9の前面方向に設定し、ユーザ方向ベクトルデータDfを更新する。さらに、上記ステップ41における初期設定では、以下の情報処理を行うために他のパラメータを初期化する。例えば、CPU10は、上述したメインメモリに格納される各データが示す他のパラメータをそれぞれ所定値(例えば0、空値、またはNull値)に初期化する。
【0105】
次に、CPU10は、操作データを取得して(ステップ42)、次のステップに処理を進める。例えば、CPU10は、ボード型コントローラ9から受信した操作データを用いて、当該操作データに含まれる荷重検出値を示すデータを用いて荷重データDa1を更新する。ここで、上記操作データには、荷重センサ94a〜94dがそれぞれ検出した荷重検出値を示すデータが含まれており、荷重センサ94a〜94dの識別情報によって区別された当該データをそれぞれ用いて、荷重データDa1が更新される。なお、操作データを受信する周期と上記ステップ42を行う処理周期とが異なるために、当該処理周期の間に複数回の操作データが受信されてバッファに格納されている。上記ステップ42においては、上記複数回受信された操作データのうち最新の操作データのみを用いて操作データDaが更新される例を用いる。
【0106】
次に、CPU10は、荷重値および重心位置を算出して(ステップ43)、次のステップに処理を進める。例えば、CPU10は、荷重データDa1が示す荷重検出値を合計して合計荷重値を算出し、当該合計荷重値を示すデータを用いて荷重値データDbにおける時系列データ配列のうち最新のデータを更新する。具体的には、荷重データDa1は、荷重センサ94a〜94dがそれぞれ検出した最新の荷重検出値を示しているため、当該荷重検出値を合計することによって、上記合計荷重値が算出される。また、CPU10は、荷重データDa1が示す荷重検出値を用いて重心位置を算出し、当該重心位置を示すデータを用いて重心位置データDcにおける時系列データ配列のうち最新のデータを更新する。以下、重心位置の算出方法の一例を説明する。
【0107】
上記重心位置は、ボード型コントローラ9の台9aに加わる荷重の重心位置であり、各荷重センサ94a〜94d(図3参照)が検出する荷重値によって定められる。例えば、上記重心位置は、ボード型コントローラ9の台9a上の位置に対応する所定の座標系(例えば、台9aの中心を原点、台9aの長辺方向をX軸方向、短辺方向をY軸方向とするXY座標系)に基づいた座標値によって表される。そして、荷重センサ94aが検出する荷重値をa、荷重センサ94bが検出する荷重値をb、荷重センサ94cが検出する荷重値をc、荷重センサ94dが検出する荷重値をdとした場合、重心のX軸座標値(X)およびY軸座標値(Y)は、以下の数式を用いて算出することができる。
X=((a+c)―(b+d))×m
Y=((c+d)―(a+b))×n
ここで、mおよびnは、それぞれ予め定められた定数である。このようにして算出される重心位置は、ボード型コントローラ9上のユーザ動作や体重移動(姿勢)に応じて変化する。例えば、ユーザが左足を上げた場合に重心位置のX軸座標値が正の値となり、ユーザが右足を上げた場合に重心位置のX軸座標値が負の値となる。なお、上記重心位置の算出式は単なる一例であり、その他の方法によって重心位置が算出されてもよい。
【0108】
次に、CPU10は、推定方向ベクトルを算出して(ステップ44)、次のステップに処理を進める。以下、図12を参照して、上記ステップ44で行う推定方向ベクトル算出処理について説明する。
【0109】
図12において、CPU10は、前回の処理において重心位置が算出されているか否かを判断する(ステップ51)。例えば、CPU10は、重心位置データDcを参照して、前回の処理ループにおけるステップ43において重心位置が算出されているか否かを判断する。そして、CPU10は、前回の処理において重心位置が算出されている場合、次のステップ52に処理を進める。一方、CPU10は、前回の処理において重心位置が算出されていない場合、当該サブルーチンによる処理を終了する。
【0110】
ステップ52において、CPU10は、差分ベクトルを算出し、次のステップに処理を進める。例えば、CPU10は、上記座標系において、前回の処理ループにおいて算出された重心位置から今回の処理ループにおいて算出された重心位置までの差分ベクトルを算出する。
【0111】
次に、CPU10は、上記差分ベクトルを用いて推定方向ベクトルを算出し(ステップ53)、次のステップに処理を進める。例えば、CPU10は、上記座標系において、上記ステップ52で算出された差分ベクトルに直交する方向で、当該差分ベクトルと同じ長さを有するベクトルを、推定方向ベクトルとして算出する。なお、差分ベクトルに直交する方向は一対の2方向が考えられるが、CPU10は、当該2方向のうち、上記座標系においてユーザ方向ベクトルデータDfが示すユーザ方向ベクトルの方向に近い方向を推定方向ベクトルとして選択する。そして、CPU10は、算出された推定方向ベクトルを示すデータを用いて、推定方向ベクトルデータDdにおける時系列データ配列のうち最新のデータを更新する。
【0112】
次に、CPU10は、上記ステップ53で算出された推定方向ベクトルが反転範囲内か否かを判断する(ステップ54)。例えば、図16に示すように、ボード型コントローラ9の後方方向付近(例えば、当該後方方向を中心に左右それぞれ15°の範囲)に、推定方向ベクトルの方向を反転させる反転範囲が設定されている。そして、CPU10は、推定方向ベクトルが上記反転範囲内である場合、次のステップ55に処理を進める。一方、CPU10は、推定方向ベクトルが反転範囲内にない場合、当該サブルーチンによる処理を終了する。
【0113】
ステップ55において、CPU10は、上記ステップ53において算出された推定方向ベクトルの方向を反転させ、反転させた推定方向ベクトルを用いて推定方向ベクトルデータDdにおける時系列データ配列のうち最新のデータを更新して、当該サブルーチンによる処理を終了する。ここで、上記反転範囲は、ボード型コントローラ9の後方方向付近に設けられている。これは、モニタ2を見ながらユーザがプレイすることが基本の遊技姿勢とし、一般的にボード型コントローラ9の前方方向がモニタ2への方向となることを想定している。この場合、ユーザがモニタ2を背にしてボード型コントローラ9の後方方向に向くような遊技姿勢となることが考えにくいため、当該方向に推定方向ベクトルの方向が設定された場合にボード型コントローラ9の前方方向付近に当該方向を反転させることによって、ユーザ方向の判定精度を向上させることができる。このような効果を期待しない場合、上記推定方向ベクトルの方向を反転させる処理は行わなくてもかまわない。この場合、推定方向ベクトルが全方向に設定可能となり、ユーザ方向も全方向へ重み付けされることなく設定されることになるため、ユーザ自身も全方向へ任意に方向指示することが可能となる。
【0114】
図11に戻り、上記ステップ44における推定方向ベクトル算出処理の後、CPU10は、ユーザ方向ベクトルを算出して、次のステップに処理を進める(ステップ45)。以下、図13を参照して、上記ステップ45で行うユーザ方向ベクトル算出処理について説明する。
【0115】
図13において、CPU10は、所定フレーム分の推定方向ベクトルを加算し(ステップ61)、次のステップに処理を進める。例えば、CPU10は、推定方向ベクトルデータDdに格納されている時系列データ配列のうち最新の所定フレーム分(例えば、30フレーム分)のデータを取得し、当該データが示す推定方向ベクトルを足し合わせることによって1つのベクトルを算出する。なお、推定方向ベクトルデータDdに格納されている時系列データ配列の数が上記所定フレーム数未満の場合、当該時系列データ配列分のデータが示す推定方向ベクトルを足し合わせることによって1つのベクトルを算出すればよい。
【0116】
次に、CPU10は、上記ステップ61において算出したベクトルを正規化してユーザ方向ベクトル候補を算出し(ステップ62)、次のステップに処理を進める。例えば、CPU10は、上記ステップ61において算出したベクトルを長さ1に正規化してユーザ方向ベクトル候補を算出し、当該ユーザ方向ベクトル候補を用いてユーザ方向ベクトル候補データDeを更新する。なお、ユーザ方向ベクトル候補の方向は、所定フレーム分の推定方向ベクトルを足し合わせたベクトル方向となるが、上述したように推定方向ベクトルの長さが重心位置の移動量に基づいて設定されているため、結果的に重心の移動量で重み付けされた方向となる。
【0117】
次に、CPU10は、所定フレーム分(例えば、30フレーム分)の重心移動量Mgを算出し(ステップ63)、次のステップに処理を進める。例えば、CPU10は、重心位置データDcに格納されている時系列データ配列のうち、上記重心移動量Mgを算出するための所定フレーム分に1を加えた最新のフレーム分(例えば、最新の31フレーム分)の重心位置を取得する。そして、CPU10は、連続して取得された重心位置間の移動距離を、それぞれ上記所定フレーム分累積して重心移動量Mgを算出し、算出された重心移動量Mgを用いて重心移動量データDgを更新する。なお、重心位置データDcに格納されている時系列データ配列の数が上記所定フレーム数に1を加えた数未満の場合、当該時系列データ配列分のデータが示す重心位置を取得して、当該重心位置間の移動距離を累積して重心移動量Mgを算出すればよい。
【0118】
次に、CPU10は、重心移動量Mgが閾値a1以上で閾値a2未満であるか否かを判断する(ステップ64)。そして、CPU10は、重心移動量Mgが閾値a1以上で閾値a2未満である場合、次のステップ65に処理を進める。一方、CPU10は、重心移動量Mgが閾値a1以上で閾値a2未満でない場合、次のステップ66に処理を進める。ここで、a1<a2であり、例えばボード型コントローラ9の長辺方向の長さを2とした場合、閾値a1=0.75、閾値a2=1.00に設定される。
【0119】
ステップ65において、CPU10は、重心移動量Mgによって決められる割合P%だけ、ユーザ方向ベクトルの方向がユーザ方向ベクトル候補の方向に近づくようにユーザ方向ベクトルを更新し、当該サブルーチンによる処理を終了する。例えば、ボード型コントローラ9の長辺方向の長さを2とした場合、CPU10は、割合Pを
P={(Mg−a1)/(a2−a1)}*100
で算出する。具体的には、ボード型コントローラ9の長辺方向の長さを2とした場合、割合Pは、
P={(Mg−0.75)/0.25}*100
となる。そして、CPU10は、ユーザ方向ベクトル候補データDeおよびユーザ方向ベクトルデータDfを参照して、ユーザ方向ベクトルの方向がユーザ方向ベクトル候補の方向に割合P%だけ近づくようにユーザ方向ベクトルの方向を変化させ、変化させたユーザ方向ベクトルを用いてユーザ方向ベクトルデータDfを更新する。
【0120】
一方、ステップ66において、CPU10は、重心移動量Mgが閾値a2以上であるか否かを判断する。そして、CPU10は、重心移動量Mgが閾値a2以上である場合、次のステップ67に処理を進める。一方、CPU10は、重心移動量Mgが閾値a1未満である場合、ユーザ方向ベクトルを変化させることなく当該サブルーチンによる処理を終了する。
【0121】
ステップ67において、CPU10は、ユーザ方向ベクトル候補をそのままユーザ方向ベクトルとしてユーザ方向ベクトルデータDfを更新し、当該サブルーチンによる処理を終了する。
【0122】
なお、上述した処理では、重心移動量Mgに応じてユーザ方向ベクトルをユーザ方向候補に近づける割合を変化させる例を用いた。これは、ユーザが足踏みした場合に重心位置がユーザの左右に移動する特性を利用してユーザ方向を推定しているためであり、重心位置の移動量が大きい場合にユーザ方向を変化させる重み付けを行ってユーザ方向をより正確に推定するためである。したがって、このような重み付けが可能となる他のパラメータに応じて、上記割合を変化させてもかまわない。例えば、上記ステップ61において所定フレーム分の推定方向ベクトルを加算した1つのベクトルの長さに応じて、上記割合を変化させてもかまわない。当該ベクトルの長さについても、加算されている推定方向ベクトルの長さが重心位置の移動量に基づいて設定されているため、結果的に重心の移動量に基づいた重み付けが可能なパラメータとして取り扱うことができる。
【0123】
また、ユーザ方向ベクトルをユーザ方向候補に近づける割合は、0%および100%から選択的に選ばれてもかまわない。例えば、重心移動量Mgが所定の閾値(例えば、閾値a1や閾値a2、またはその間の値)未満であった場合、上記割合を0%に設定、すなわちユーザ方向ベクトルが全くユーザ方向ベクトル候補に近づかないためにユーザ方向ベクトルがそのまま設定される。また、重心移動量Mgが所定の閾値以上であった場合、上記割合を100%に設定、すなわちユーザ方向ベクトル候補がそのままユーザ方向ベクトルとなって設定される。
【0124】
図11に戻り、ステップ45におけるユーザ方向ベクトル算出処理の後、CPU10は、足踏み判定線を設定する処理を行い(ステップ46)、次のステップに処理を進める。以下、図14を参照して、上記ステップ46で行う足踏み判定線設定処理について説明する。
【0125】
図14において、CPU10は、足踏み中心位置を算出して(ステップ71)、次のステップに処理を進める。例えば、CPU10は、上記座標系(X1,Y1)における足踏み中心位置(MX1,MY1)を
MX1=(b2*MX1a+GX1)/b1
MY1=(b2*MY1a+GY1)/b1
で算出し、算出された足踏み中心位置(MX1,MY1)を用いて足踏み中心位置データDhを更新する。ここで、MX1aおよびMY1aは、前回の処理で算出された足踏み中心位置のX1座標値およびY1座標値を示している。GX1およびGY1は、上記ステップ43で算出された最新の重心位置のX1座標値およびY1座標値を示している。そして、b1およびb2は、それぞれ予め定められた定数であり、例えばb1=180、b2=b1−1=179で設定される。上記数式から明らかなように、当該数式に基づいて算出される足踏み中心位置(MX1,MY1)は、ボード型コントローラ9に加わっている最新の荷重の重心位置に所定の割合(b2/b1)で追従するようにその位置が変化する。このように上記重心位置に所定の割合で追従する位置を算出することによって、ボード型コントローラ9上で足踏みしているユーザの足踏み中心位置を求めることができる。
【0126】
なお、足踏み中心位置は、他の方法で求めてもかまわない。例えば、直前の所定期間中に得られた重心位置を平均した位置を足踏み中心位置として設定してもかまわない。このように所定期間内の重心位置を平均した位置であっても、ボード型コントローラ9上で足踏みしているユーザの足踏み中心位置を求めることができる。
【0127】
また、足踏み中心位置は、ユーザが足踏みする際に左足を乗せる位置と右足を乗せる位置との中間点を推定するための位置である。すなわち、足踏み中心位置は、ボード型コントローラ9に乗っているユーザの身体中心(身体の重心)から鉛直方向へ延びる直線が、ボード型コントローラ9の台9aと交わる位置を推定するための位置として定義されてもかまわない。このような定義に基づいて、上記足踏み中心位置を他の方法で求めてもかまわない。
【0128】
次に、CPU10は、足踏み中心位置を通るユーザ方向へ判定基準線を設定し(ステップ72)、次のステップに処理を進める。例えば、CPU10は、ユーザ方向ベクトルデータDfおよび足踏み中心位置データDhを参照して、現時点のユーザ方向ベクトルおよび足踏み中心位置を取得し、上記座標系において当該足踏み中心位置を通ってユーザ方向ベクトルの方向(ユーザ方向)に延びる判定基準線(図9参照)を設定する。そして、CPU10は、設定された判定基準線を用いて、足踏み判定線データDiに含まれる判定基準線を示すデータを更新する。
【0129】
次に、CPU10は、足踏み中心位置およびユーザ方向に応じて、中立領域幅を算出し(ステップ73)、次のステップに処理を進める。例えば、CPU10は、ユーザ方向(ユーザ方向ベクトルの方向)の直線とボード型コントローラ9の前方方向の直線とで成す角のうち、小さい方の角度が大きいほど、中立領域幅を小さく設定する。また、CPU10は、足踏み中心位置がボード型コントローラ9の台9aの中心(すなわち、上記座標系の原点)から離れるほど、中立領域幅を小さく設定する。例えば、ボード型コントローラ9の台9aの大きさは有限であり、台9aの端で足踏みする場合に足踏みすることが難しくなることがある。このような場合であっても、中立領域幅を小さく設定することによって、足踏み判定を正確に行うことができる。
【0130】
次に、CPU10は、中立領域幅に基づいて、左足踏み判定線および右足踏み判定線を設定し(ステップ74)、当該サブルーチンによる処理を終了する。例えば、CPU10は、上記判定基準線を中心として両側平行に左足踏み判定線および右足踏み判定線を設定する。なお、CPU10は、ユーザ方向に向かって上記判定基準線の左側に左足踏み判定線を設定し、ユーザ方向に向かって上記判定基準線の右側に右足踏み判定線を設定するとともに、左足踏み判定線と右足踏み判定線との間隙幅が上記中立領域幅となるように左足踏み判定線および右足踏み判定線(図9参照)を設定する。そして、CPU10は、設定された左足踏み判定線および右足踏み判定線を用いて、足踏み判定線データDiに含まれる左足踏み判定線および右足踏み判定線を示すデータを更新する。
【0131】
図11に戻り、上記ステップ46における足踏み判定線設定処理の後、CPU10は、動作設定処理を行い(ステップ47)、次のステップに処理を進める。以下、図15を参照して、ステップ47で行う動作設定処理について説明する。
【0132】
図15において、CPU10は、足踏みフラグデータDnを参照して、足踏みフラグがオフに設定されているか否かを判断する(ステップ111)。そして、CPU10は、足踏みフラグがオフに設定されている場合、次のステップ112に処理を進める。一方、CPU10は、足踏みフラグがオンに設定されている場合、次のステップ116に処理を進める。
【0133】
ステップ112において、CPU10は、最新の重心位置が中立領域から右足領域へ移動したか否かを判断する。例えば、CPU10は、重心位置データDcが示す最新の重心位置および足踏み判定線データDiが示す右足踏み判定線を用いて、左足踏み判定線および右足踏み判定線で挟まれた中立領域から右足踏み判定線を越えて右足領域へ重心位置が移動したか否かを判断する。そして、CPU10は、最新の重心位置が中立領域から右足領域へ移動した場合、次のステップ113に処理を進める。一方、CPU10は、最新の重心位置が中立領域から右足領域へ移動していない場合、次のステップ116に処理を進める。
【0134】
ステップ113において、CPU10は、左足を上げる動作にプレイヤオブジェクトPoの動作を設定し、次のステップに処理を進める。例えば、CPU10は、プレイヤオブジェクトPoが左足を上げた状態で、走る、歩く、またはその場で停止するように、プレイヤオブジェクトPoの動作を設定してオブジェクト動作データDjを更新する。ここで、プレイヤオブジェクトPoが走っているのか、歩いているのか、その場で停止しているのかについては、走行速度データDkが示す速度に基づいて設定される。また、CPU10は、ユーザ方向ベクトルデータDfが示すユーザ方向ベクトルの方向に応じて、仮想世界におけるプレイヤオブジェクトPoの方向を設定してオブジェクト動作データDjを更新する。なお、ユーザ方向ベクトルの方向やプレイヤオブジェクトPoの方向に応じて、仮想世界に設定されている仮想カメラの方向や位置を変化させる場合、上記ステップ113において仮想カメラに関するデータが更新される。
【0135】
次に、CPU10は、走行速度および走行距離を算出して(ステップ114)、次のステップに処理を進める。例えば、CPU10は、右足を上げる動作に設定されてから現時点までを処理対象期間として、当該処理対象期間の長さ(時間)、当該処理対象期間における合計荷重値の推移、および当該処理対象期間における重心位置の推移の少なくとも1つを用いて、走行速度および走行距離を算出する。
【0136】
一例として、CPU10は、上記処理対象期間の長さ(時間)に基づいて、走行速度(プレイヤオブジェクトPoが移動する速度)を算出し、算出された速度を用いて走行速度データDkを更新する。具体的には、CPU10は、上記処理対象期間の長さが短い程、プレイヤオブジェクトPoが移動する速度を速く算出する。この場合、ユーザがボード型コントローラ9上で足踏みするピッチが短いほどプレイヤオブジェクトPoが仮想世界内を移動する速度が速くなることになる。
【0137】
また、処理対象期間の長さ(時間)および上述のように算出されたプレイヤオブジェクトPoの移動速度に基づいて、走行距離(プレイヤオブジェクトPoが移動した距離)が算出され、算出された距離を用いて走行距離データDmが更新される。具体的には、CPU10は、処理対象期間の長さおよびプレイヤオブジェクトPoの移動速度に基づいて、当該処理対象期間中にプレイヤオブジェクトPoが仮想世界内を移動した距離を算出する。そして、CPU10は、走行距離データDmが示す走行距離に算出された移動距離を加算することによって新たな走行距離を算出し、当該新たな走行距離を用いて走行距離データDmを更新する。なお、CPU10は、上記新たな走行距離およびプレイヤオブジェクトPoの方向に基づいて、プレイヤオブジェクトPoの仮想世界における新たな配置位置を算出し、当該新たな配置位置を用いてオブジェクト動作データDjを更新する。
【0138】
次に、CPU10は、足踏みフラグをオンに設定して足踏みフラグデータDnを更新し(ステップ115)、当該サブルーチンによる処理を終了する。
【0139】
ステップ116において、CPU10は、足踏みフラグデータDnを参照して、足踏みフラグがオンに設定されているか否かを判断する。そして、CPU10は、足踏みフラグがオンに設定されている場合、次のステップ117に処理を進める。一方、CPU10は、足踏みフラグがオフに設定されている場合、次のステップ121に処理を進める。
【0140】
ステップ117において、CPU10は、最新の重心位置が中立領域から左足領域へ移動したか否かを判断する。例えば、CPU10は、重心位置データDcが示す最新の重心位置および足踏み判定線データDiが示す左足踏み判定線を用いて、中立領域から左足踏み判定線を越えて左足領域へ重心位置が移動したか否かを判断する。そして、CPU10は、最新の重心位置が中立領域から左足領域へ移動した場合、次のステップ118に処理を進める。一方、CPU10は、最新の重心位置が中立領域から左足領域へ移動していない場合、次のステップ121に処理を進める。
【0141】
ステップ118において、CPU10は、右足を上げる動作にプレイヤオブジェクトPoの動作を設定し、次のステップに処理を進める。例えば、CPU10は、プレイヤオブジェクトPoが右足を上げた状態で、走る、歩く、またはその場で停止するように、プレイヤオブジェクトPoの動作を設定してオブジェクト動作データDjを更新する。ここで、プレイヤオブジェクトPoが走っているのか、歩いているのか、その場で停止しているのかについては、上記ステップ113と同様に走行速度データDkが示す速度に基づいて設定される。また、CPU10は、ユーザ方向ベクトルデータDfが示すユーザ方向ベクトルの方向に応じて、仮想世界におけるプレイヤオブジェクトPoの方向を設定してオブジェクト動作データDjを更新する。なお、ユーザ方向ベクトルの方向やプレイヤオブジェクトPoの方向に応じて、仮想世界に設定されている仮想カメラの方向や位置を変化させる場合、上記ステップ113において仮想カメラに関するデータが更新される。
【0142】
次に、CPU10は、走行速度および走行距離を算出して(ステップ119)、次のステップに処理を進める。例えば、CPU10は、左足を上げる動作に設定されてから現時点までを処理対象期間として、当該処理対象期間の長さ(時間)、当該処理対象期間における合計荷重値の推移、および当該処理対象期間における重心位置の推移の少なくとも1つを用いて、上記ステップ114と同様に、走行速度および走行距離を算出する。
【0143】
次に、足踏みフラグをオフに設定して足踏みフラグデータDnを更新し(ステップ120)、当該サブルーチンによる処理を終了する。
【0144】
一方、ボード型コントローラ9上においてユーザが右足で足踏みするような動作や左足で足踏みするような動作をしていない場合(例えば、足踏み動作において一方の足を上げている状態や両足を下ろして静止している状態である場合)、CPU10は、現在設定されている動作を継続する動作に設定し(ステップ121)、次のステップに処理を進める。例えば、CPU10は、現時点においてオブジェクト動作として設定されている上げ足はそのままプレイヤオブジェクトPoの動作として設定し、走行速度データDkが示す速度に基づいて、走る、歩く、またはその場で停止する動作を設定して、設定された動作を用いてオブジェクト動作データDjを更新する。また、CPU10は、ユーザ方向ベクトルデータDfが示すユーザ方向ベクトルの方向に応じて、仮想世界におけるプレイヤオブジェクトPoの方向を設定してオブジェクト動作データDjを更新する。なお、ユーザ方向ベクトルの方向やプレイヤオブジェクトPoの方向に応じて、仮想世界に設定されている仮想カメラの方向や位置を変化させる場合、上記ステップ113において仮想カメラに関するデータが更新される。
【0145】
次に、CPU10は、走行速度および走行距離を算出して(ステップ122)、当該サブルーチンによる処理を終了する。例えば、CPU10は、走行速度データDkが示す速度を所定値だけ減衰させ、減衰後の速度を用いて走行速度データDkを更新する。具体的には、CPU10は、プレイヤオブジェクトPoの速度に基づいて、プレイヤオブジェクトPoが仮想世界内を移動した距離を算出し、走行距離データDmが示す走行距離に算出された移動距離を加算することによって新たな走行距離を算出して、当該新たな走行距離を用いて走行距離データDmを更新する。また、CPU10は、上記新たな走行距離およびプレイヤオブジェクトPoの方向に基づいて、プレイヤオブジェクトPoの仮想世界における新たな配置位置を算出し、当該新たな配置位置を用いてオブジェクト動作データDjを更新する。
【0146】
図11に戻り、上記ステップ47における動作設定処理の後、CPU10は、表示制御処理を行って(ステップ48)、次のステップに処理を進める。例えば、CPU10は、オブジェクト動作データDjが示すオブジェクトの動作、位置、および方向に基づいて、プレイヤオブジェクトPoを動作させて仮想世界に配置してモニタ2に表示する。また、CPU10は、走行速度データDkおよび走行距離データDmに基づいて、走行情報(例えば、文字情報)を生成してモニタ2に表示してもよい。
【0147】
次に、CPU10は、ゲームを終了するか否かを判断する(ステップ49)。ゲームを終了する条件としては、例えば、ゲームオーバーやゲームクリアとなる条件が満たされたことや、ユーザがゲームを終了する操作を行ったこと等がある。CPU10は、ゲームを終了しない場合に上記ステップ42に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。
【0148】
このように、上述した処理によれば、ユーザがボード型コントローラ9上で足踏みしている方向を判定できるため、ユーザの動作を正確に判定することが可能である。例えば、当該方向を方向入力とすることによって、様々な情報処理に対する操作入力として用いることが可能となる。
【0149】
なお、上述した実施例では、ユーザがボード型コントローラ9上で足踏みしているユーザ方向に応じて、仮想世界におけるプレイヤオブジェクトPoの方向を変化させる処理を行う例を用いたが、当該ユーザ方向に応じて他の処理を行ってもかまわない。例えば、上記ユーザ方向に応じて、モニタ2に表示する仮想世界を生成するための仮想カメラの方向を変化させる処理を行ってもかまわない。この場合、ユーザがボード型コントローラ9上で足踏みしている方向に応じて仮想世界に対する視線方向が変化するため、ユーザが仮想世界を歩いた場合に見える仮想世界をモニタ2に表示することが可能となり、あたかも仮想世界内にいるかのような画像を表示することが可能となる。このように、上記ユーザ方向は、仮想世界における様々なキャラクタ、オブジェクト、仮想カメラ等の方向を制御するために用いることができる。
【0150】
また、上述した実施例では、上記ユーザ方向に応じて、足踏み判定線(中立領域)の方向を変化させることによって、ボード型コントローラ9上で足踏みしているユーザ動作を正確に判定している。すなわち、足踏み判定線(中立領域)を固定した状態で足踏み動作を判定する場合、ユーザがボード型コントローラ9上で足踏み方向を変えた場合に正確な動作判定が困難となるが、当該方向変化に応じて足踏み判定線(中立領域)を変化させることによって正確な動作判定が可能となる。このように、上記ユーザ方向は、仮想世界におけるオブジェクトや仮想カメラの方向を制御するだけでなく、ユーザ動作を判定するための判定ラインの制御にも有効であり、他の判定処理の条件変更に用いることができることは言うまでもない。
【0151】
一例として、上述した足踏み判定線(中立領域)を、ユーザがボード型コントローラ9上で屈伸(ジャンプ)する動作の判定に用いることができる。例えば、最新の中心位置が中立領域内にあり、かつ、合計荷重値が所定の閾値(例えば、ユーザの体重に所定の割合を加算した値)以上に到達した場合に、ユーザがボード型コントローラ9上で屈伸する動作を行ったと判断する。このような動作判定においても、中立領域がユーザ方向に応じて変化させることができるため、当該動作判定をより正確に行うことができる。
【0152】
また、上述した説明では、ユーザがボード型コントローラ9上で足踏みしているユーザ方向に応じて、即時にオブジェクトや仮想カメラの方向制御が連動するような処理例を用いた。しかしながら、ユーザ方向の変化に応じて、所定の時間遅れてオブジェクトや仮想カメラの方向制御が行われるような処理でもかまわない。この場合、ユーザ方向が変わった後に、所定時間遅れて当該向きの変化に追従してオブジェクトや仮想カメラの方向が変化することになる。
【0153】
また、上述した情報処理例では、推定方向ベクトルの方向が反転範囲内である場合に当該推定方向ベクトルの方向を反転させて判定精度を向上させているが、他の処理段階において方向を反転させる処理を行ってもかまわない。例えば、上記ステップ65またはステップ67の処理においてユーザ方向ベクトルの方向を更新する際、新たに設定されるユーザ方向ベクトルの方向が上記反転範囲内である場合に、当該ユーザ方向ベクトルの方向を反転させてもかまわない。この場合、上記ステップ54およびステップ55における推定方向ベクトルの方向反転処理に、ユーザ方向ベクトルの方向反転処理をさらに加えてもいいし、推定方向ベクトルの方向反転処理の代わりにユーザ方向ベクトルの方向反転処理を行ってもかまわない。
【0154】
また、上述した情報処理例では、推定方向ベクトルを複数加算することによってユーザ方向ベクトル候補の方向を算出しているが、1つの推定方向ベクトルの方向をそのままユーザ方向ベクトル候補の方向としてもかまわない。この場合、上記ステップ44で推定方向ベクトルが算出された後、ステップ45の処理を行い、ステップ61の処理を行わずにステップ62において当該推定方向ベクトルを正規化してユーザ方向ベクトル候補が算出される。このような場合であっても、ユーザ方向ベクトル候補を得た1つの推定方向ベクトルを算出するために用いられた2つの重心間長さを、重心移動量Mgに設定することによって、重心間長さが長い場合にユーザ方向を変化させる重み付けが可能となる。
【0155】
また、上述した処理例では、異なるタイミングで連続して算出された2つの重心位置を結ぶ差分ベクトルを用いて、繰り返し推定方向ベクトルを算出している。しかしながら、推定方向ベクトルは、他の重心位置を用いて算出されてもかまわない。例えば、異なるタイミングで算出された2つの重心位置であれば連続して算出されたものでなくてもよく、1つの重心位置と、当該重心位置が算出されてから所定時間後に算出された重心位置とを用いて推定方向ベクトルを算出してもかまわない。
【0156】
また、上述した処理例では、2本の判定線(左足踏み判定線、右足踏み判定線)を用いて、ユーザがボード型コントローラ9上で足踏みする動作の判定を行っている。このように中立領域を設けることによって、判定線付近を重心位置が様々な方向へ移動する場合であっても、何度も足踏み判定することを防止することができる。なお、このような効果を期待しない場合、ユーザの足踏みを判定するための判定線は、1本(例えば、基準判定線;図9参照)でもかまわない。この場合、当該判定線を一方から他方へ重心位置が横断した場合にユーザが一方の足で足踏みしたと判定し、当該判定線を他方から一方へ重心位置が横断した場合にユーザが他方の足で足踏みしたと判定する。
【0157】
また、上述したゲーム例では、プレイヤオブジェクトPoを少なくとも含む仮想世界の画像をモニタ2に表示したが、他の態様の仮想世界の画像をモニタ2に表示してもかまわない。例えば、プレイヤオブジェクトPoを表示せずに、プレイヤオブジェクトPoから見た主観視点の仮想世界画像をモニタ2に表示してもよい。この場合、モニタ2に主観視点で表示されている仮想世界の奥行方向は、プレイヤオブジェクトPoの移動方向と同じであってもいいし、プレイヤオブジェクトPoの移動方向と異なっていてもよい。モニタ2に主観視点で表示されている仮想世界の奥行方向と、プレイヤオブジェクトPoの移動方向と同じである場合、移動方向を奥行方向とした仮想世界がモニタ2に表示されるために、移動方向を設定する操作が直感的で当該移動方向をユーザが所望する方向に合わせることが容易となることは言うまでもない。
【0158】
また、上述したシステム例では、仮想世界を表示するために1つの据置型の画像表示装置(モニタ2)を用いているが、可搬型の画像表示装置を用いてもかまわない。例えば、ユーザが可搬型の画像表示装置を把持して当該画像表示装置の画像を見ながら、ボード型コントローラ9上で足踏みする操作を行う場合、足踏みする方向を変えた場合であっても把持している画像表示装置自体の方向も変えることができるため、ユーザにとって仮想世界の画像が見やすく、ゲームの臨場感も高まることが考えられる。この場合、上述した1つの据置型の画像表示装置(モニタ2)に代えて可搬型の画像表示装置を用いてもいいし、据置型の画像表示装置に加えて可搬型の画像表示装置も用いるシステムであってもかまわない。
【0159】
また、上述した処理例においては、ボード型コントローラ9を用いて判定されたユーザ動作に応じて、プレイヤオブジェクトPoが仮想世界内を走ったり歩いたりする画像がモニタ2に表示される例を用いたが、他の情報処理にも本発明が適用できることは言うまでもない。例えば、ボード型コントローラ9を用いて判定されたユーザ動作に応じて、プレイヤオブジェクトPoが仮想世界内で自転車や一輪車等の乗り物を操って移動する画像がモニタ2に表示されてもかまわない。
【0160】
また、上述した説明では、ボード型コントローラ9に4つの荷重センサ94を設けているが、上記処理においてボード型コントローラ9に加わっている荷重の重心位置の情報が取得できれば、荷重センサ94を5つ以上も設けてもいいし、荷重センサ94を3つ設けてもかまわない。
【0161】
上述した説明では、コントローラ7とゲーム装置本体5とが無線通信によって接続されるとともに、ボード型コントローラ9とゲーム装置本体5とが無線通信によって接続された態様を用いたが、他の態様によって無線通信が行われてもかまわない。第1の例として、ボード型コントローラ9の操作データがコントローラ7へ無線送信され、ボード型コントローラ9から受信した操作データと共にコントローラ7の操作データを、コントローラ7がゲーム装置本体5へ無線送信する。この場合、コントローラ7とゲーム装置本体5とが無線通信によって直接的に接続されるが、ボード型コントローラ9とゲーム装置本体5とはコントローラ7を介した無線通信によって接続されることになる。第2の例として、コントローラ7の操作データがボード型コントローラ9へ無線送信され、コントローラ7から受信した操作データと共にボード型コントローラ9の操作データを、ボード型コントローラ9がゲーム装置本体5へ無線送信する。この場合、ボード型コントローラ9とゲーム装置本体5とが無線通信によって直接的に接続されるが、コントローラ7とゲーム装置本体5とはボード型コントローラ9を介した無線通信によって接続されることになる。第3の例として、コントローラ7とボード型コントローラ9とがケーブルを介して電気的に接続され、ボード型コントローラ9の操作データが当該ケーブルを介してコントローラ7へ送信される。そして、ボード型コントローラ9から上記ケーブルを介して受信した操作データと共にコントローラ7の操作データを、コントローラ7がゲーム装置本体5へ無線送信する。第4の例として、コントローラ7とボード型コントローラ9とがケーブルを介して電気的に接続され、コントローラ7の操作データが当該ケーブルを介してボード型コントローラ9へ送信される。そして、コントローラ7から上記ケーブルを介して受信した操作データと共にボード型コントローラ9の操作データを、ボード型コントローラ9がゲーム装置本体5へ無線送信する。
【0162】
また、コントローラ7および/またはボード型コントローラ9とゲーム装置本体5とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ7および/またはボード型コントローラ9に接続されたケーブルをゲーム装置本体5の接続端子に接続する。第1の例として、コントローラ7とゲーム装置本体5とが第1のケーブルを介して電気的に接続され、ボード型コントローラ9とゲーム装置本体5とも第2のケーブルを介して電気的に接続される。第2の例として、コントローラ7とゲーム装置本体5との間のみがケーブルを介して電気的に接続される。この場合、ボード型コントローラ9の操作データは、コントローラ7へ無線送信された後に上記ケーブルを介してゲーム装置本体5に送信されてもいいし、ボード型コントローラ9から直接ゲーム装置本体5に無線送信されてもよい。第3の例として、ボード型コントローラ9とゲーム装置本体5との間のみがケーブルを介して電気的に接続される。この場合、コントローラ7の操作データは、ボード型コントローラ9へ無線送信された後に上記ケーブルを介してゲーム装置本体5に送信されてもいいし、コントローラ7から直接ゲーム装置本体5に無線送信されてもよい。
【0163】
また、上記実施例では、据置型のゲーム装置3を用いて説明したが、携帯型のゲーム装置や一般的なパーソナルコンピュータ等の情報処理装置で本発明の情報処理プログラムを実行して、本発明を実現してもかまわない。また、他の実施形態では、ゲーム装置に限らず任意の携帯型電子機器、例えば、PDA(Personal Digital Assistant)や携帯電話、パーソナルコンピュータ、カメラ等であってもよい。何れの装置であっても、当該装置とボード型コントローラ9とを無線または有線で接続することによって、本発明を実現することができる。
【0164】
また、上述した説明では情報処理をゲーム装置本体5で行う例を用いたが、上記情報処理における処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、ゲーム装置本体5が他の装置(例えば、サーバや他のゲーム装置)と通信可能に構成されている場合、上記情報処理における処理ステップは、ゲーム装置本体5および当該他の装置が協働することによって実行してもよい。一例として、他の装置において、プレイヤオブジェクトPoおよび仮想世界等を設定する処理が行われ、ゲーム装置本体5からオブジェクト動作データ、走行速度データ、走行距離データ等が他の装置へ送信されて、上記情報処理が行われることが考えられる。そして、他の装置で生成された仮想世界を示す画像データがゲーム装置本体5へ送信され、当該仮想世界がモニタ2に表示される。このように、上記情報処理における処理ステップの少なくとも一部を他の装置で行うことによって、上述した情報処理と同様の処理が可能となる。なお、上記情報処理における処理ステップの少なくとも一部をボード型コントローラ9(マイコン100)で行ってもよい。また、上述した情報処理は、少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施形態においては、ゲーム装置本体5のCPU10が所定のプログラムを実行することによって、上述したフローチャートによる処理が行われたが、ゲーム装置本体5が備える専用回路によって上記処理の一部または全部が行われてもよい。
【0165】
また、上述したゲーム装置本体5の形状や、コントローラ7やボード型コントローラ9の形状および各種操作ボタンやセンサの形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、上述した情報処理で用いられる処理順序、設定値、表示態様、判定に用いられる値等は、単なる一例に過ぎず他の順序、表示態様、値であっても、本発明を実現できることは言うまでもない。
【0166】
また、上記情報処理プログラム(ゲームプログラム)は、光ディスク4等の外部記憶媒体を通じてゲーム装置本体5に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置本体5に供給されてもよい。また、情報処理プログラムは、ゲーム装置本体5内部の不揮発性記憶装置に予め記録されていてもよい。なお、情報処理プログラムを記憶する情報記憶媒体としては、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープなどでもよい。また、上記情報処理プログラムを記憶する情報記憶媒体としては、不揮発性半導体メモリや揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
【0167】
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施形態の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。
【産業上の利用可能性】
【0168】
本発明に係る情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法は、ユーザの動作を正確に判定することができ、ユーザの動作に基づいた処理等を行う情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法として有用である。
【符号の説明】
【0169】
1…ゲームシステム
2…モニタ
706…スピーカ
3…ゲーム装置
4…光ディスク
5…ゲーム装置本体
10…CPU
11…システムLSI
12…外部メインメモリ
13…ROM/RTC
14…ディスクドライブ
15…AV−IC
16…AVコネクタ
17…フラッシュメモリ
19…無線コントローラモジュール
23…アンテナ
31…入出力プロセッサ
32…GPU
34…VRAM
35…内部メインメモリ
7…コントローラ
100…マイコン
106…無線モジュール
9…ボード型コントローラ
94…荷重センサ
102…ADコンバータ

【特許請求の範囲】
【請求項1】
ユーザの身体を乗せることが可能な入力装置から出力される当該入力装置に加わる荷重に基づいたデータが利用可能であり、当該入力装置から得られたデータを処理する情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記コンピュータを
前記入力装置から出力されたデータに基づいて、当該入力装置に加わる荷重における重心位置を繰り返し取得する重心位置取得手段と、
前記重心位置を用いて、前記入力装置上で足踏みするユーザ方向を算出するユーザ方向算出手段と、
前記ユーザ方向に基づいて、所定の処理を行う処理手段として機能させる、情報処理プログラム。
【請求項2】
前記ユーザ方向算出手段は、前記重心位置の移動方向に基づいて、前記ユーザ方向を算出する、請求項1に記載の情報処理プログラム。
【請求項3】
前記ユーザ方向算出手段は、前記重心位置取得手段によって異なるタイミングで取得された2つの重心位置を結ぶ直線に垂直な方向候補を用いて、前記ユーザ方向を算出する、請求項1または2に記載の情報処理プログラム。
【請求項4】
前記ユーザ方向算出手段は、前記重心位置取得手段によって異なるタイミングで連続して取得された2つの重心位置を結ぶ直線に垂直な方向候補を用いて、前記ユーザ方向を算出する、請求項1乃至3のいずれか1つに記載の情報処理プログラム。
【請求項5】
前記ユーザ方向算出手段は、前回の処理で決定された前記ユーザ方向を、前記方向候補が示す方向へ所定の割合で近づけることによって、前記ユーザ方向を更新する、請求項3または4のいずれか1つに記載の情報処理プログラム。
【請求項6】
前記ユーザ方向算出手段は、前記方向候補が得られた重心位置間の距離が長いほど、前記割合を大きく設定する、請求項5に記載の情報処理プログラム。
【請求項7】
前記ユーザ方向算出手段は、前記方向候補が得られた重心位置間の距離が所定の長さより短い場合、前回の処理で決定された前記ユーザ方向を変化させない、請求項6に記載の情報処理プログラム。
【請求項8】
前記ユーザ方向算出手段は、異なるタイミングで繰り返し取得された2つの重心位置を結ぶ直線に垂直な方向候補を繰り返し算出し、当該繰り返し算出された複数の方向候補に基づいて1つの方向候補を算出する、請求項3乃至7のいずれか1つに記載の情報処理プログラム。
【請求項9】
前記ユーザ方向算出手段は、前記直線に垂直な一対の方向のうち、現時点で設定されている前記ユーザ方向に近い方を前記方向候補として算出する、請求項3乃至8のいずれか1つに記載の情報処理プログラム。
【請求項10】
前記ユーザ方向算出手段は、前記直線に垂直な一対の方向のうち、一方の方向が所定の範囲内である場合、他方の方向を前記方向候補として算出する、請求項3乃至9のいずれか1つに記載の情報処理プログラム。
【請求項11】
前記ユーザ方向算出手段は、異なるタイミングで繰り返し取得された2つの重心位置を結ぶ直線に垂直な方向で、かつ、当該2つの重心位置の距離を大きさとした方向候補ベクトルを繰り返し算出し、当該繰り返し算出された複数の方向候補ベクトルを加算した1つのベクトルの方向を前記方向候補として算出する、請求項3乃至7のいずれか1つに記載の情報処理プログラム。
【請求項12】
前記ユーザ方向算出手段は、前記直線に垂直な一対の方向のうち、現時点で設定されている前記ユーザ方向に近い方を前記方向候補ベクトルの方向として算出する、請求項11に記載の情報処理プログラム。
【請求項13】
前記ユーザ方向算出手段は、前記直線に垂直な一対の方向のうち、一方の方向が所定の範囲内である場合、他方の方向を前記方向候補ベクトルの方向として算出する、請求項11または12記載の情報処理プログラム。
【請求項14】
前記ユーザ方向算出手段が算出したユーザ方向に延びる少なくとも1つの判定線を設定する判定線設定手段として、さらに前記コンピュータを機能させ、
前記処理手段は、前記重心位置取得手段が繰り返し取得する重心位置が前記判定線を横断した場合、前記入力装置上でユーザが足踏みしたと判定し、当該判定に基づいて前記所定の処理を行う、請求項1乃至13のいずれか1つに記載の情報処理プログラム。
【請求項15】
前記重心位置取得手段が取得する重心位置に基づいて、前記入力装置上で足踏みするユーザの足踏み中心位置を算出する足踏み中心位置算出手段として、さらに前記コンピュータを機能させ、
前記判定線設定手段は、前記ユーザ方向へ前記足踏み中心位置を基準とした位置に前記判定線を設定する、請求項14に記載の情報処理プログラム。
【請求項16】
前記判定線設定手段は、前記足踏み中心位置を中心として所定の間隙を有する位置にそれぞれ前記ユーザ方向へ延びる2つの前記判定線を設定し、
前記処理手段は、前記重心位置が前記間隙から前記判定線の一方を横断した場合、前記入力装置上でユーザが一方の足で足踏みしたと判定し、前記重心位置が前記間隙から前記判定線の他方を横断した場合、前記入力装置上でユーザが他方の足で足踏みしたと判定し、当該判定に基づいて前記所定の処理を行う、請求項15に記載の情報処理プログラム。
【請求項17】
前記足踏み中心位置算出手段は、前記重心位置取得手段が繰り返し取得する重心位置に所定の割合で追従する位置に前記足踏み中心位置を設定する、請求項15または16に記載の情報処理プログラム。
【請求項18】
前記足踏み中心位置算出手段は、前記重心位置取得手段が所定期間内に繰り返し取得した重心位置を平均した位置に前記足踏み中心位置を設定する、請求項15または16に記載の情報処理プログラム。
【請求項19】
前記判定線設定手段は、所定の基準方向に対する前記ユーザ方向の角度に応じて、前記間隙の幅を変化させる、請求項16に記載の情報処理プログラム。
【請求項20】
前記処理手段は、前記ユーザ方向に基づいて、仮想世界に設定されたオブジェクトおよび仮想カメラの少なくとも一方の方向を変化させることによって、前記所定の処理を行う、請求項1乃至19のいずれか1つに記載の情報処理プログラム。
【請求項21】
ユーザの身体を乗せることが可能な入力装置から出力される当該入力装置に加わる荷重に基づいたデータが利用可能であり、当該入力装置から得られたデータを処理する情報処理装置であって、
前記入力装置から出力されたデータに基づいて、当該入力装置に加わる荷重における重心位置を繰り返し取得する重心位置取得手段と、
前記重心位置を用いて、前記入力装置上で足踏みするユーザ方向を算出するユーザ方向算出手段と、
前記ユーザ方向に基づいて、所定の処理を行う処理手段とを備える、情報処理装置。
【請求項22】
複数の装置が通信可能に構成され、ユーザの身体を乗せることが可能な入力装置から出力される当該入力装置に加わる荷重に基づいたデータが利用可能であり、当該入力装置から得られたデータを処理する情報処理システムであって、
前記入力装置から出力されたデータに基づいて、当該入力装置に加わる荷重における重心位置を繰り返し取得する重心位置取得手段と、
前記重心位置を用いて、前記入力装置上で足踏みするユーザ方向を算出するユーザ方向算出手段と、
前記ユーザ方向に基づいて、所定の処理を行う処理手段とを備える、情報処理システム。
【請求項23】
ユーザの身体を乗せることが可能な入力装置から出力される当該入力装置に加わる荷重に基づいたデータが利用可能であり、当該入力装置から得られたデータを処理することが可能な少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行される情報処理方法であって、
前記入力装置から出力されたデータに基づいて、当該入力装置に加わる荷重における重心位置を繰り返し取得する重心位置取得ステップと、
前記重心位置を用いて、前記入力装置上で足踏みするユーザ方向を算出するユーザ方向算出ステップと、
前記ユーザ方向に基づいて、所定の処理を行う処理ステップとを含む、情報処理方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate


【公開番号】特開2013−88838(P2013−88838A)
【公開日】平成25年5月13日(2013.5.13)
【国際特許分類】
【出願番号】特願2011−225538(P2011−225538)
【出願日】平成23年10月13日(2011.10.13)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】