説明

情報処理プログラムおよび情報処理装置

【課題】所定の筐体に搭載された加速度センサから出力されるデータを用いて、安価で正確な操作を可能とする情報処理プログラムおよび情報処理装置を提供する。
【解決手段】加速度データを繰り返し取得し、加速度データが示す加速度の大きさおよび方向を示す加速度ベクトルを順次累積して、累積ベクトルを算出する。取得した加速度データを用いて、累積ベクトル算出手段が算出する累積ベクトルに所定の割合で追従する追従ベクトルを算出し、累積ベクトルと追従ベクトルとの差分を差分ベクトルとして算出する。そして、差分ベクトルにしたがって決められる値を用いて表示装置に表示される仮想世界における位置を指定し、当該位置を用いて所定の処理を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理プログラムおよび情報処理装置に関し、より特定的には、コントローラのハウジングに生じる加速度を検出して操作される情報処理装置およびその装置で実行される情報処理プログラムに関する。
【背景技術】
【0002】
従来、ユーザが入力装置のハウジングを振ったり回転させたりして操作して、そのハウジングの動きに応じた処理を行う情報処理装置が各種開発されている。例えば、振動ジャイロ(角速度センサ)を搭載したリモートコマンダー(入力装置)を用いて処理を行う情報処理装置が開示されている(例えば、特許文献1参照)。
【0003】
上記特許文献1で開示された情報処理装置は、ユーザがリモートコマンダーの振った方向を振動ジャイロより得られる角速度より判別し、その判別結果に応じたコマンドを実行している。具体的には、ユーザがリモートコマンダーを上方向に振ったときに生じる角速度により、振動ジャイロに取り付けられた駆動用圧電磁器から発生する電圧が上昇する。一方、ユーザがリモートコマンダーを下方向に振ったときの角速度により、駆動用圧電磁器から発生する電圧が下降する。リモートコマンダーに対して振動ジャイロがこのような状態で搭載されたとき、情報処理装置は、上記電圧が上昇して所定範囲まで到達した際にリモートコマンダーを上方向に振ったと判別し、上記電圧が下降して所定範囲まで低下した際にリモートコマンダーを下方向に振ったと判別する。そして、情報処理装置は、上方向に振ったと判別したときのコマンドとして表示画面内のカーソルを上方向に移動させ、下方向に振ったと判別したときのコマンドとして表示画面内のカーソルを下方向に移動させる。
【特許文献1】特開平6−50758号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
しかしながら、上記特許文献1で開示された入力装置に搭載される振動ジャイロ(角速度センサ)は、加速度センサ等と比較するとコストが高く、入力装置自体が高価となる。一方、振動ジャイロを単純に加速度センサに置き換えて入力装置に搭載する場合、当該加速度センサが出力するデータの値をそのまま用いると、入力装置に作用する重力加速度の影響を受けるために、正確な判別が困難となる。また、入力装置を所定方向へ移動させているとき、入力装置に逆方向の加速度が生じたり、ユーザの操作状態に応じて不安定な加速度が生じたり、機器自体の精度誤差の影響を受けたり等するために、正確な判別が困難となることがある。
【0005】
それ故に、本発明の目的は、所定の筐体に搭載された加速度センサから出力されるデータを用いて、安価で正確な操作を可能とする情報処理プログラムおよび情報処理装置を提供することである。
【課題を解決するための手段】
【0006】
上記の目的を達成するために、本発明は以下の構成を採用した。なお、括弧内の参照符号やステップ番号等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明の範囲を何ら限定するものではない。
【0007】
第1の発明は、所定の筐体(70、71、76、77)に加わる少なくとも1軸方向の加速度を検出する加速度センサ(701、706)から出力される加速度データ(accn)を用いた処理を実行する情報処理装置(5)のコンピュータ(10)に実行させる情報処理プログラムである。情報処理プログラムは、加速度データ取得手段(ステップ43、ステップ103を実行するCPU10;以下、単にステップ番号のみ記載する)、累積ベクトル算出手段(S48、S108)、追従ベクトル算出手段(S49、S109)、差分ベクトル算出手段(S50、S110)、および処理手段(S51、S113)として、コンピュータを機能させる。加速度データ取得手段は、加速度データを繰り返し取得する。累積ベクトル算出手段は、加速度データ取得手段が取得した加速度データが示す加速度の大きさおよび方向を示す加速度ベクトルを順次累積して、累積ベクトル(veca)を算出する。追従ベクトル算出手段は、加速度データ取得手段が取得した加速度データを用いて、累積ベクトル算出手段が算出する累積ベクトルに所定の割合(K)で追従する追従ベクトル(vecg)を算出する。差分ベクトル算出手段は、累積ベクトルと追従ベクトルとの差分を差分ベクトル(vecd)として算出する。処理手段は、差分ベクトルにしたがって決められる値(vecdX、vecdY、vecdZ、daX、daY、daZ)を用いて表示装置(2)に表示される仮想世界における位置(pos)を指定し、当該位置を用いて所定の処理を行う。
【0008】
第2の発明は、上記第1の発明において、処理手段は、差分ベクトルの各軸成分値(vecdX、vecdY、vecdZ)を仮想世界の位置として指定し、当該位置を用いて所定の処理を行う。
【0009】
第3の発明は、上記第1の発明において、差分累積値算出手段(S112)として、さらにコンピュータを機能させる。差分累積値算出手段は、差分ベクトル算出手段が算出した差分ベクトルの各軸成分値を、それぞれ順次累積して差分累積値(da)を算出する。処理手段は、差分累積値算出手段が算出した差分累積値(daX、daY、daZ)を仮想世界の位置として指定し、当該位置を用いて所定の処理を行う。
【0010】
第4の発明は、上記第2または第3の発明において、累積ベクトル算出手段は、減衰処理手段(S47、S107)を含む。減衰処理手段は、累積ベクトルに加速度ベクトルを加算する前または後に逐次累積ベクトルを減衰させる。
【0011】
第5の発明は、上記第2の発明において、処理手段は、差分ベクトル算出手段が算出した差分ベクトルの大きさが所定の閾値を超えたとき、当該差分ベクトルの各軸成分値を仮想世界の位置として指定し、当該位置を用いて所定の処理を行う。
【0012】
第6の発明は、上記第3の発明において、差分累積値算出手段は、差分ベクトル算出手段が算出した差分ベクトルの大きさが所定の閾値を超えたとき、当該差分ベクトルの各軸成分値を、それぞれ順次累積して差分累積値を算出する。
【0013】
第7の発明は、上記第2または第3の発明において、加速度センサは、検出する加速度の大きさが所定の測定可能範囲内で検出可能である。情報処理プログラムは、変化量ベクトル算出手段(S82、S86、S90)および予測加速度ベクトル算出手段(S83、S84、S87、S88、S91、S92)として、さらにコンピュータを機能させる。変化量ベクトル算出手段は、加速度データ取得手段が取得した加速度データが示す加速度の大きさが測定可能範囲内の値であるとき(S81、S85、S89でYes)、加速度データ取得手段が取得した加速度データを用いて、加速度の変化量を示す変化量ベクトルaccv)を算出する。予測加速度ベクトル算出手段は、加速度データ取得手段が取得した加速度データが示す加速度の大きさが測定可能範囲を超える値であるとき(S81、S85、S89でNo)、前回算出された変化量ベクトルから所定量減じることによって新たな変化量ベクトルを算出し、累積ベクトル算出手段が前回用いた加速度ベクトルに当該新たな変化量ベクトルを加算して予測加速度ベクトル(accn)を算出する。加速度データ取得手段が取得した加速度データが示す加速度の大きさおよび方向を示す加速度ベクトルの大きさが測定可能範囲を超える値であるとき、累積ベクトル算出手段は、累積ベクトルに予測加速度ベクトルを累積して新たな累積ベクトルを算出する。
【0014】
第8の発明は、上記第2または第3の発明において、処理手段が行う所定の処理は、指定する仮想世界における位置に所定のオブジェクト(OBJ)を配置し、当該位置の移動に応じて当該オブジェクトを仮想世界で移動させる処理である。
【0015】
第9の発明は、上記第2の発明において、処理手段は、差分ベクトルの各軸成分値を、仮想世界に設定した座標系(xyz)の各座標値にそれぞれ対応させることによって位置として指定する。処理手段は、所定の条件を満たすとき、仮想世界に設定された座標系の原点(基準位置)を当該仮想世界において移動させる。
【0016】
第10の発明は、上記第2の発明において、加速度データ取得手段は、第1および第2の筐体(71、77)によって構成される入力装置(7)において、当該第1および第2の筐体それぞれに搭載された第1および第2の加速度センサから出力される第1および第2の加速度データをそれぞれ繰り返し取得する。累積ベクトル算出手段は、第1の加速度データが示す加速度の大きさおよび方向を示す第1の加速度ベクトルおよび第2の加速度データが示す加速度の大きさおよび方向を示す第2の加速度ベクトルを順次それぞれ累積して、第1の累積ベクトルおよび第2の累積ベクトルをそれぞれ算出する。追従ベクトル算出手段は、第1の加速度データを用いて、第1の累積ベクトルに所定の割合で追従する第1の追従ベクトルを算出し、第2の加速度データを用いて、第2の累積ベクトルに所定の割合で追従する第2の追従ベクトルを算出する。差分ベクトル算出手段は、第1の累積ベクトルと第1の追従ベクトルとの差分を第1の差分ベクトルとして算出し、第2の累積ベクトルと第2の追従ベクトルとの差分を第2の差分ベクトルとして算出する。処理手段は、第1の差分ベクトルの各軸成分値を仮想世界に設定した第1の座標系の各座標値にそれぞれ対応させることによって第1の位置を指定し、第2の差分ベクトルの各軸成分値を仮想世界に設定した第1の座標系とは異なる第2の座標系の各座標値にそれぞれ対応させることによって第2の位置を指定する。処理手段が行う所定の処理は、第1の位置に第1のオブジェクト(OBJ1)を配置し、第2の位置に第2のオブジェクト(OBJ2)を配置して、当該第1の位置および第2の位置の移動に応じてそれぞれのオブジェクトを仮想世界で移動させる処理である。
【0017】
第11の発明は、上記第3の発明において、筐体は、ユーザが押下することに応じて所定の操作データを出力する操作ボタン(72)が設けられる。情報処理プログラムは、操作データ取得手段(S111)として、さらにコンピュータを機能させる。操作データ取得手段は、操作データを繰り返し取得する。差分累積値算出手段は、所定の操作ボタンが押下されたことを示す操作データが取得されている期間中にのみ、差分ベクトルの各軸成分値を、それぞれ順次累積する。
【0018】
第12の発明は、所定の筐体に加わる少なくとも1軸方向の加速度を検出する加速度センサから出力される加速度データを用いた処理を実行する情報処理装置ある。情報処理装置は、加速度データ取得手段、累積ベクトル算出手段、追従ベクトル算出手段、差分ベクトル算出手段、および処理手段を備える。加速度データ取得手段は、加速度データを繰り返し取得する。累積ベクトル算出手段は、加速度データ取得手段が取得した加速度データが示す加速度の大きさおよび方向を示す加速度ベクトルを順次累積して、累積ベクトルを算出する。追従ベクトル算出手段は、加速度データ取得手段が取得した加速度データを用いて、累積ベクトル算出手段が算出する累積ベクトルに所定の割合で追従する追従ベクトルを算出する。差分ベクトル算出手段は、累積ベクトルと追従ベクトルとの差分を差分ベクトルとして算出する。処理手段は、差分ベクトルにしたがって決められる値を用いて表示装置に表示される仮想世界における位置を指定し、当該位置を用いて所定の処理を行う。
【発明の効果】
【0019】
上記第1の発明によれば、差分ベクトルにしたがって決められる値(例えば、差分ベクトルの各軸成分値や差分ベクトルの各軸成分値を累積した値)を筐体の動かし始めからの実空間における3次元位置として用いて、仮想世界における位置として指定するため、安価な加速度センサから得られる出力値を用いた正確な位置指定が可能となる。
【0020】
上記第2の発明によれば、差分ベクトルの各軸成分値を筐体の動かし始めからの実空間における3次元位置として用いて、仮想世界における位置として指定するため、安価な加速度センサから得られる出力値を用いた正確な位置指定が可能となる。例えば、ユーザが筐体を停止状態から一方方向へ動かして停止させた場合、差分ベクトルが当該動きを示した後にやがて0となる。したがって、差分ベクトルの各軸成分値を仮想世界にスケーリング等を行って座標指定した位置は、基準位置から筐体を動かす方向に移動して、やがて基準位置に戻る。このように筐体の動きに応じて仮想世界内で移動させながら、最終的またはある程度の周期で基準位置に戻すような位置の座標指定に最適となる。さらに、累積ベクトルに追従ベクトルを追従させる強さに応じて、仮想世界に指定される位置の動きを調整することができる。例えば、累積ベクトルへの追従を強くすると、筐体を動かすことによって生じた動的加速度成分も含む追従ベクトルが算出される。したがって、筐体を動かして指定された位置が仮想世界において維持されにくくなり、位置が基準位置に戻るタイミングが早くなる。一方、累積ベクトルへの追従を弱くすると、筐体の動きが停止した後も上記動的加速度成分が累積ベクトルに一定期間残存する。したがって、筐体を動かして指定された位置が仮想世界において維持されやすくなり、位置が基準位置に戻るタイミングが遅くなる。
【0021】
上記第3の発明によれば、差分ベクトルの各軸成分値を累積した値を筐体の動かし始めからの実空間における3次元位置として用いて、仮想世界における位置として指定するため、安価な加速度センサから得られる出力値を用いた正確な位置指定が可能となる。例えば、差分ベクトルの各軸成分値を累積した値は、ユーザが筐体を実空間において移動させる相対位置を模したパラメータとして用いることも可能であり、筐体の相対位置に応じた仮想世界上の位置が指定可能となる。
【0022】
上記第4の発明によれば、差分ベクトルを減衰することによって、加速度センサ等の機器自体の精度誤差を吸収し、筐体が静止状態であれば差分ベクトルの大きさを確実に0に近づけて安定させることができる。また、差分ベクトルの減衰を大きくすると、筐体の大きな動きに反応して位置が指定される。一方、差分ベクトルの減衰を小さくすると、筐体の小さな動きにも反応した位置が指定される。つまり、差分ベクトルの減衰率を調整することによって、操作に対する応答感度を調整することもできる。
【0023】
上記第5の発明によれば、差分ベクトルの大きさが所定の閾値より大きいときに、処理手段が行う所定の処理に反映されるため、筐体に対する微小な動きがキャンセルされ、筐体の動きの誤認識も防止することができる。
【0024】
上記第6の発明によれば、差分ベクトルの大きさが所定の閾値より大きいときに、差分累積値算出手段が行う累積処理が行われるため、処理手段が行う所定の処理において筐体に対する微小な動きがキャンセルされ、筐体の動きの誤認識も防止することができる。
【0025】
上記第7の発明によれば、加速度センサの計測可能範囲を逸脱するような加速度が生じた場合でも、当該加速度を予測することによって正確な位置指定が可能となる。
【0026】
上記第8の発明によれば、差分ベクトルの各軸成分値や差分ベクトルの各軸成分値を累積した値によって指定された仮想世界の位置にオブジェクトを配置し、当該位置の移動に応じてオブジェクトを移動させるゲームや情報処理を行うことができる。
【0027】
上記第9の発明によれば、仮想世界に指定される位置を指定可能な範囲に制限がなくなるため、より自由度の高い操作が可能となる。
【0028】
上記第10の発明によれば、複数の筐体で構成される入力装置を用いて、当該筐体を動かして操作する態様において、それぞれの筐体の動きに応じて別の位置の指定が可能となり、仮想世界においてそれぞれ別のオブジェクトを動かすような操作が可能となる。
【0029】
上記第11の発明によれば、ユーザが筐体の所定の操作ボタンを押下している期間のみ操作が有効となり、当該期間終了後、最後に指定された位置がそのまま固定されるため、ユーザの意図に応じた任意の位置を指定することが容易となる。
【0030】
また、本発明の情報処理装置によれば、上述した情報処理プログラムと同様の効果を得ることができる。
【発明を実施するための最良の形態】
【0031】
図1および図2を参照して、本発明の一実施形態に係る情報処理プログラムを実行する装置について説明する。以下、説明を具体的にするために、当該装置の一例の据置型のゲーム装置本体5を含むゲームシステムについて説明する。なお、図1は据置型のゲーム装置3を含むゲームシステム1の外観図であり、図2はゲーム装置本体5のブロック図である。以下、当該ゲームシステム1について説明する。
【0032】
図1において、ゲームシステム1は、表示手段の一例の家庭用テレビジョン受像機(以下、モニタと記載する)2と、当該モニタ2に接続コードを介して接続する据置型のゲーム装置3とから構成される。モニタ2は、ゲーム装置本体5から出力された音声信号を音声出力するためのスピーカ2aを備える。また、ゲーム装置3は、本願発明の情報処理プログラムの一例のゲームプログラムを記録した光ディスク4と、当該光ディスク4のゲームプログラムを実行してゲーム画面をモニタ2に表示出力させるためのコンピュータを搭載したゲーム装置本体5と、ゲーム画面に表示されたキャラクタ等を操作するゲームに必要な操作情報をゲーム装置本体5に与えるためのコントローラ7とを備えている。
【0033】
また、ゲーム装置本体5は、無線コントローラモジュール19(図2参照)を内蔵する。無線コントローラモジュール19は、コントローラ7から無線送信されるデータを受信し、ゲーム装置本体5からコントローラ7へデータを送信して、コントローラ7とゲーム装置本体5とを無線通信によって接続する。さらに、ゲーム装置本体5には、当該ゲーム装置本体5に対して交換可能に用いられる情報記憶媒体の一例の光ディスク4が脱着される。
【0034】
また、ゲーム装置本体5には、セーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ17(図2参照)が搭載される。ゲーム装置本体5は、光ディスク4に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ2に表示する。また、ゲームプログラム等は、光ディスク4に限らず、フラッシュメモリ17に予め記録されたものを実行するようにしてもよい。さらに、ゲーム装置本体5は、フラッシュメモリ17に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置本体5のプレイヤは、モニタ2に表示されたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
【0035】
コントローラ7は、無線コントローラモジュール19を内蔵するゲーム装置本体5へ、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて操作情報等の送信データを無線送信する。コントローラ7は、2つのコントロールユニット(コアユニット70およびサブユニット76)が屈曲自在な接続ケーブル79を介して互いに接続されて構成されており、主にモニタ2の表示画面に表示されるオブジェクト等を操作するための操作手段である。コアユニット70およびサブユニット76は、それぞれ片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン(十字キーやスティック等を含む)とが設けられている。また、後述により明らかとなるが、コアユニット70は、当該コアユニット70から見た画像を撮像する撮像情報演算部74を備えている。また、撮像情報演算部74の撮像対象の一例として、モニタ2の表示画面近傍に2つのLEDモジュール(以下、マーカと記載する)8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって例えば赤外光を出力する。また、コントローラ7(例えば、コアユニット70)は、ゲーム装置本体5の無線コントローラモジュール19から無線送信された送信データを通信部75で受信して、当該送信データに応じた音や振動を発生させることもできる。
【0036】
なお、本実施例では、コアユニット70とサブユニット76とを屈曲自在な接続ケーブル79で接続したが、サブユニット76に無線ユニットを搭載することで、接続ケーブル79をなくすこともできる。例えば、無線ユニットとしてBluetooth(登録商標)ユニットをサブユニット76に搭載することで、サブユニット76からコアユニット70へ操作データを送信することが可能になる。また、コントローラ7(例えば、コアユニット70)は、ゲーム装置本体5の無線コントローラモジュール19から無線送信された送信データを通信部75で受信して、当該送信データに応じた音や振動を発生させることもできる。
【0037】
次に、図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等を有する。
【0038】
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に読み出したデータを書き込む。
【0039】
また、システムLSI11には、入出力プロセッサ31、GPU(Graphics Processor Unit)32、DSP(Digital Signal Processor)33、VRAM(Video RAM)34、および内部メインメモリ35が設けられる。図示は省略するが、これらの構成要素31〜35は、内部バスによって互いに接続される。
【0040】
GPU32は、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM34は、GPU32がグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU32は、VRAM34に記憶されたデータを用いて画像データを作成する。
【0041】
DSP33は、オーディオプロセッサとして機能し、内部メインメモリ35や外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。
【0042】
上述のように生成された画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、AVコネクタ16を介して、読み出した画像データをモニタ2に出力するとともに、読み出した音声データをモニタ2に内蔵されるスピーカ2aに出力する。これによって、画像がモニタ2に表示されるとともに音がスピーカ2aから出力される。
【0043】
入出力プロセッサ(I/Oプロセッサ)31は、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ31は、フラッシュメモリ17、無線通信モジュール18、無線コントローラモジュール19、拡張コネクタ20、および外部メモリカード用コネクタ21に接続される。無線通信モジュール18にはアンテナ22が接続され、無線コントローラモジュール19にはアンテナ23が接続される。
【0044】
入出力プロセッサ31は、無線通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ31は、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール18およびアンテナ22を介して当該データをネットワークに送信する。また、入出力プロセッサ31は、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22、および無線通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10は、ゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置本体5と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置本体5を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。
【0045】
また、入出力プロセッサ31は、アンテナ23および無線コントローラモジュール19を介して、コントローラ7から送信される操作データ等を受信し、内部メインメモリ35または外部メインメモリ12のバッファ領域に記憶(一時記憶)する。なお、内部メインメモリ35には、外部メインメモリ12と同様に、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりしてもよく、CPU10のワーク領域やバッファ領域として用いられてもかまわない。
【0046】
さらに、入出力プロセッサ31には、拡張コネクタ20および外部メモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール18に替えてネットワークとの通信を行ったりすることができる。外部メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ31は、拡張コネクタ20や外部メモリカード用コネクタ21を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【0047】
また、ゲーム装置本体5(例えば、前部主面)には、当該ゲーム装置本体5の電源ボタン24、ゲーム処理のリセットボタン25、光ディスク4を脱着する投入口、およびゲーム装置本体5の投入口から光ディスク4を取り出すイジェクトボタン26等が設けられている。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、ゲーム装置本体5の各構成要素に対して、図示しないACアダプタを経て電力が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置本体5の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
【0048】
次に、図3を参照して、コントローラ7について説明する。なお、図3は、コントローラ7の外観構成を示す斜視図である。
【0049】
図3において、コントローラ7は、コアユニット70とサブユニット76とが接続ケーブル79で接続されて構成されている。コアユニット70は、ハウジング71を有しており、当該ハウジング71に複数の操作部72が設けられている。一方、サブユニット76は、ハウジング77を有しており、当該ハウジング77に複数の操作部78が設けられている。
【0050】
接続ケーブル79の一方端には、コアユニット70のコネクタ73に着脱自在なコネクタ791が設けられており、接続ケーブル79の他方端は固定的にサブユニット76と接続されている。そして、接続ケーブル79のコネクタ791は、コアユニット70の後面に設けられたコネクタ73と嵌合し、コアユニット70とサブユニット76とが当該接続ケーブル79を介して接続される。
【0051】
次に、図4および図5を参照して、コアユニット70について説明する。なお、図4は、コアユニット70の上面後方から見た斜視図である。図5は、コアユニット70を下面前方から見た斜視図である。
【0052】
図4および図5において、コアユニット70は、例えばプラスチック成型によって形成されたハウジング71を有している。ハウジング71は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【0053】
ハウジング71上面の中央前面側に、十字キー72aが設けられる。この十字キー72aは、十字型の4方向プッシュスイッチであり、矢印で示す4つの方向(前後左右)に対応する操作部分が十字の突出片にそれぞれ90°間隔で配置される。プレイヤが十字キー72aのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー72aを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、カーソルの移動方向を指示したりすることができる。
【0054】
なお、十字キー72aは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、リング状に4方向の操作部分を備えたプッシュスイッチとその中央に設けられたセンタスイッチとを複合した複合スイッチを上記十字キー72aの代わりに設けてもかまわない。また、ハウジング71上面から突出した傾倒可能なスティックを倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー72aの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー72aの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー72aの代わりに設けてもかまわない。また、少なくとも4つの方向(前後左右)をそれぞれ示すスイッチに対して、プレイヤによって押下されたスイッチに応じて操作信号を出力する操作部を上記十字キー72aの代わりに設けてもかまわない。
【0055】
ハウジング71上面の十字キー72aより後面側に、複数の操作ボタン72b〜72gが設けられる。操作ボタン72b〜72gは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン72b〜72gに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン72b〜72dには、1番ボタン、2番ボタン、およびAボタン等としての機能が割り当てられる。また、操作ボタン72e〜72gには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン72b〜72gは、ゲーム装置3が実行するゲームプログラムに応じてそれぞれの機能が割り当てられる。なお、図4に示した配置例では、操作ボタン72b〜72dは、ハウジング71上面の中央前後方向に沿って並設されている。また、操作ボタン72e〜72gは、ハウジング71上面の左右方向に沿って操作ボタン72bおよび72dの間に並設されている。そして、操作ボタン72fは、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0056】
また、ハウジング71上面の十字キー72aより前面側に、操作ボタン72hが設けられる。操作ボタン72hは、遠隔からゲーム装置3本体の電源をオン/オフする電源スイッチである。この操作ボタン72hも、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0057】
また、ハウジング71上面の操作ボタン72cより後面側に、複数のLED702が設けられる。ここで、コントローラ7は、他のコントローラ7と区別するためにコントローラ種別(番号)が設けられている。例えば、LED702は、コントローラ7に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、無線コントローラモジュール19からコントローラ7へ、複数のLED702のうち、上記コントローラ種別に対応するLEDを点灯させるための信号が送信される。
【0058】
また、ハウジング71上面には、操作ボタン72bおよび操作ボタン72e〜72gの間に後述するスピーカ(図6のスピーカ706)からの音を外部に放出するための音抜き孔が形成されている。
【0059】
一方、ハウジング71下面には、凹部が形成されている。ハウジング71下面の凹部は、プレイヤがコアユニット70を把持したときに当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン72iが設けられる。操作ボタン72iは、例えばBボタンとして機能する操作部である。
【0060】
また、ハウジング71前面には、撮像情報演算部74の一部を構成する撮像素子743が設けられる。ここで、撮像情報演算部74は、コアユニット70が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大200フレーム/秒程度のサンプリング周期であるため比較的高速なコアユニット70の動きでも追跡して解析することができる。この撮像情報演算部74の詳細な構成については、後述する。また、ハウジング71の後面には、コネクタ73が設けられている。コネクタ73は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【0061】
ここで、以下の説明を具体的にするために、コアユニット70に対して設定する座標系について定義する。図4および図5に示すように、互いに直交するXYZ軸をコアユニット70に対して定義する。具体的には、コアユニット70の前後方向となるハウジング71の長手方向をZ軸とし、コアユニット70の前面(撮像情報演算部74が設けられている面)方向をZ軸正方向とする。また、コアユニット70の上下方向をY軸とし、ハウジング71の上面(操作ボタン72aが設けられた面)方向をY軸正方向とする。さらに、コアユニット70の左右方向をX軸とし、ハウジング71の左側面(図4では表されずに図5で表されている側面)方向をX軸正方向とする。
【0062】
次に、図6および図7を参照して、コアユニット70の内部構造について説明する。なお、図6は、コアユニット70の上筐体(ハウジング71の一部)を外した状態を後面側から見た斜視図である。図7は、コアユニット70の下筐体(ハウジング71の一部)を外した状態を前面側から見た斜視図である。ここで、図7に示す基板700は、図6に示す基板700の裏面から見た斜視図となっている。
【0063】
図6において、ハウジング71の内部には基板700が固設されており、当該基板700の上主面上に操作ボタン72a〜72h、加速度センサ701、LED702、およびアンテナ754等が設けられる。そして、これらは、基板700等に形成された配線(図示せず)によってマイコン751等(図8、図10参照)に接続される。また、図示しない無線モジュール753(図10参照)およびアンテナ754によって、コアユニット70がワイヤレスコントローラとして機能する。なお、ハウジング71内部には図示しない水晶振動子が設けられており、後述するマイコン751の基本クロックを生成する。また、基板700の上主面上に、スピーカ706およびアンプ708が設けられる。加速度センサ701が、基板700の中央部ではなく周辺部に設けられていることにより、コアユニット70の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分の含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコアユニット70の動きを良好な感度で判定することができる。
【0064】
一方、図7において、基板700の下主面上の前端縁に撮像情報演算部74が設けられる。撮像情報演算部74は、コアユニット70の前方から順に赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744によって構成されており、それぞれ基板700の下主面に取り付けられる。また、基板700の下主面上の後端縁にコネクタ73が取り付けられる。さらに、基板700の下主面上にサウンドIC707およびマイコン751が設けられている。サウンドIC707は、基板700等に形成された配線によってマイコン751およびアンプ708と接続され、ゲーム装置本体5から送信されたサウンドデータに応じてアンプ708を介してスピーカ706に音声信号を出力する。そして、基板700の下主面上には、バイブレータ704が取り付けられる。このバイブレータ704は、例えば振動モータやソレノイドである。バイブレータ704が作動することによってコアユニット70に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。バイブレータ704は、ハウジング71のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング71が大きく振動することになり、振動を感じやすくなる。
【0065】
図8および図9を参照して、サブユニット76について説明する。なお、図8は、サブユニット76の一例を示す斜視図である。図9は、図8のサブユニット76の上筐体(ハウジング77の一部)を外した状態を示す斜視図である。
【0066】
図8において、サブユニット76は、例えばプラスチック成型によって形成されたハウジング77を有している。ハウジング77は、その前後方向を長手方向とし、サブユニット76において最太部となる頭部を前方に形成した流線型の立体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【0067】
ハウジング77上面の上記最太部近傍に、スティック78aが設けられる。スティック78aは、ハウジング77上面から突出した傾倒可能なスティックを倒すことによって、傾倒方向や傾倒量を検出し、それに応じて操作信号を出力する操作部である。例えば、プレイヤがスティック先端を360°任意の方向に傾倒することによって任意の方向や位置を指定することができ、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したりすることができる。また、プレイヤは、スティック78aの傾倒量によって、プレイヤキャラクタ等の移動量を指示することができる。
【0068】
なお、スティック78aは、プレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、上述した十字キーやリング状に4方向の操作部分を備えたプッシュスイッチとその中央に設けられたセンタスイッチとを複合した複合スイッチを上記スティック78aの代わりに設けてもかまわない。また、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記スティック78aの代わりに設けてもかまわない。また、タッチパッドを、上記スティック78aの代わりに設けてもかまわない。また、少なくとも4つの方向(前後左右)をそれぞれ示すスイッチに対して、プレイヤによって押下されたスイッチに応じて操作信号を出力する操作部を上記スティック78aの代わりに設けてもかまわない。
【0069】
サブユニット76のハウジング77の前面に、複数の操作ボタン78dおよび78eが設けられる。操作ボタン78dおよび78eは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン78dおよび78eに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン78dおよび78eには、XボタンおよびYボタン等としての機能が割り当てられる。これら操作ボタン78dおよび78eは、ゲーム装置3が実行するゲームプログラムに応じてそれぞれの機能が割り当てられる。なお、図8に示した配置例では、操作ボタン78dおよび78eは、ハウジング77前面の上下方向に沿って並設されている。
【0070】
図9において、ハウジング77の内部には基板が固設されており、当該基板の上主面上にスティック78aおよび加速度センサ761等が設けられる。そして、これらは、基板等に形成された配線(図示せず)を介して接続ケーブル79と接続されている。加速度センサ761は、ハウジング77の長手方向の中央部かつ短手方向の中央部に配置されるのが好ましい。
【0071】
ここで、以下の説明を具体的にするために、サブユニット76に対して設定する座標系について定義する。図8に示すように、互いに直交するXYZ軸をサブユニット76に対して定義する。具体的には、サブユニット76の前後方向となるハウジング77の長手方向をZ軸とし、サブユニット76の前面(操作ボタン78dおよび78eが設けられている面)方向をZ軸正方向とする。また、サブユニット76の上下方向をY軸とし、ハウジング77の上面方向(スティック78aが突出する方向)をY軸正方向とする。さらに、サブユニット76の左右方向をX軸とし、ハウジング77の左側面(図8では表されている側面)方向をX軸正方向とする。
【0072】
次に、図10を参照して、コントローラ7の内部構成について説明する。なお、図10は、コントローラ7の構成を示すブロック図である。
【0073】
図10において、コアユニット70は、上述した操作部72、撮像情報演算部74、加速度センサ701、バイブレータ704、スピーカ706、サウンドIC707、およびアンプ708の他に、その内部に通信部75を備えている。また、サブユニット76は、上述した操作部78および加速度センサ761を備えており、接続ケーブル79とコネクタ791および73とを介して、マイコン751と接続されている。
【0074】
撮像情報演算部74は、赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744を含んでいる。赤外線フィルタ741は、コアユニット70の前方から入射する光から赤外線のみを通過させる。レンズ742は、赤外線フィルタ741を透過した赤外線を集光して撮像素子743へ出射する。撮像素子743は、例えばCMOSセンサやあるいはCCDのような固体撮像素子であり、レンズ742が集光した赤外線を撮像する。したがって、撮像素子743は、赤外線フィルタ741を通過した赤外線だけを撮像して画像データを生成する。撮像素子743で生成された画像データは、画像処理回路744で処理される。具体的には、画像処理回路744は、撮像素子743から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部75へ出力する。なお、これらの撮像情報演算部74は、コアユニット70のハウジング71に固設されており、ハウジング71自体の方向を変えることによってその撮像方向を変更することができる。
【0075】
コアユニット70は、3軸(X、Y、Z軸)の加速度センサ701を備えていることが好ましい。また、サブユニット76は、3軸(X、Y、Z軸)の加速度センサ761を備えていることが好ましい。この3軸の加速度センサ701および761は、それぞれ3方向、すなわち、上下方向、左右方向、および前後方向(上述したXYZ軸方向)で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、上下および左右方向(または他の対になった方向)のそれぞれに沿った直線加速度のみを検知する2軸の加速度検出手段や何れか1軸に沿った直線加速度のみを検知する1軸の加速度検出手段を使用してもよい。例えば、この1軸〜3軸の加速度センサ701および761は、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能であるタイプのものでもよい。加速度センサ701および761は、シリコン微細加工されたMEMS(Micro Electro Mechanical Systems:微小電子機械システム)の技術に基づいた静電容量式(静電容量結合式)であることが好ましい。しかしながら、既存の加速度検出手段の技術(例えば、圧電方式や圧電抵抗方式)あるいは将来開発される他の適切な技術を用いて1軸〜3軸の加速度センサ701および761が提供されてもよい。
【0076】
当業者には公知であるように、加速度センサ701および761に用いられるような加速度検出手段は、加速度センサの持つ各軸に対応する直線に沿った加速度(直線加速度)のみを検知することができる。つまり、加速度センサ701および761からの直接の出力は、その1軸〜3軸のそれぞれに沿った直線加速度(静的または動的)を示す信号である。このため、加速度センサ701および761は、非直線状(例えば、円弧状)の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【0077】
しかしながら、加速度センサ701および761から出力される加速度の信号に基づいて、ゲーム装置のプロセッサ(例えばCPU10)、コントローラ7またはサブユニット76のプロセッサ(例えばマイコン751)等のコンピュータが処理を行うことによって、コアユニット70およびサブユニット76に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。
【0078】
例えば、加速度センサ701および761を搭載するコアユニット70およびサブユニット76が静的な状態であることを前提としてコンピュータ側で処理する場合(すなわち、加速度センサ701および761によって検出される加速度が重力加速度のみであるとして処理する場合)、コアユニット70およびサブユニット76が現実に静的な状態であれば、検出された加速度に基づいてコアユニット70およびサブユニット76の姿勢が重力方向に対して傾いているか否か、またはどの程度傾いているかを知ることができる。具体的には、加速度センサ701および761の検出軸が鉛直下方向を向いている状態を基準としたとき、当該検出軸方向に1G(重力加速度)が作用しているか否かだけでコアユニット70およびサブユニット76が鉛直下方向に対して傾いているか否かを知ることができる。また、上記検出軸方向に作用している加速度の大きさによって、コアユニット70およびサブユニット76が鉛直下方向に対してどの程度傾いているかも知ることができる。また、多軸方向の加速度を検出可能な加速度センサ701および761の場合には、さらに各軸に対して検出された加速度の信号に対して処理を施すことによって、重力方向に対してコアユニット70およびサブユニット76がどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ701および761からの出力に基づいて、プロセッサがコアユニット70およびサブユニット76の傾き角度のデータを算出する処理を行ってもよいが、当該傾き角度のデータを算出する処理を行うことなく、加速度センサ701および761からの出力に基づいて、おおよそのコアユニット70およびサブユニット76の傾き具合を推定するような処理としてもよい。このように、加速度センサ701および761をプロセッサと組み合わせて用いることによって、コアユニット70およびサブユニット76の傾き、姿勢、または位置を判定することができる。
【0079】
一方、加速度センサ701および761が動的な状態であることを前提とする場合には、当該加速度センサ701および761が重力加速度成分に加えて加速度センサ701および761の動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、コアユニット70およびサブユニット76の動き方向等を知ることができる。具体的には、加速度センサ701および761を備えるコアユニット70およびサブユニット76がプレイヤの手で動的に加速されて動かされる場合に、加速度センサ701および761によって生成される加速度信号を処理することによって、コアユニット70およびサブユニット76の様々な動きおよび/または位置を算出することができる。なお、加速度センサ701および761が動的な状態であることを前提とする場合であっても、加速度センサ701および761の動きに応じた加速度を所定の処理により除去すれば、重力方向に対するコアユニット70およびサブユニット76の傾きを知ることが可能である。
【0080】
他の実施例では、加速度センサ701および761は、信号をマイコン751に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置をそれぞれ備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサ701および761が静的な加速度(例えば、重力加速度)を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角に変換するものであってもよい。加速度センサ701および761でそれぞれ検知された加速度を示すデータは、通信部75に出力される。
【0081】
ここで、コアユニット70やサブユニット76を把持してプレイヤが振った場合、振り始めは加速して振り終わりは減速となる。したがって、コアユニット70やサブユニット76には、振り始めで振っている方向と同じ方向の加速度が生じた後、徐々に加速度の大きさが減少して、振り終わりで振っている方向とは逆の方向に加速度が生じる。一方、一般的に、加速度センサ701および761から出力される加速度ベクトル(あるいは、加速度の正負)は、コアユニット70やサブユニット76に生じる加速度の方向とは真逆のベクトルとなる。したがって、以下の説明において、加速度センサ701および761の特性として、加速度センサ701および761から出力されるデータは、当該加速度センサ701および761に加えられる加速度(つまり実際に加速する方向)とは真逆方向の加速度を示すデータが出力されるものとする。すなわち、加速度センサ701および761は、加速による慣性力に応じた加速度データが出力されるものである。また、コアユニット70やサブユニット76が静止時に加速度センサ701および761にそれぞれ加わる重力加速度は、重力方向と同じ方向の加速度データとして出力されることになる。
【0082】
通信部75は、マイクロコンピュータ(Micro Computer:マイコン)751、メモリ752、無線モジュール753、およびアンテナ754を含んでいる。マイコン751は、処理の際にメモリ752を記憶領域として用いながら、送信データを無線送信する無線モジュール753を制御する。また、マイコン751は、アンテナ754を介して無線モジュール753が受信したゲーム装置本体5からのデータに応じて、サウンドIC707およびバイブレータ704の動作を制御する。サウンドIC707は、通信部75を介してゲーム装置本体5から送信されたサウンドデータ等を処理する。また、マイコン751は、通信部75を介してゲーム装置本体5から送信された振動データ(例えば、バイブレータ704をONまたはOFFする信号)等に応じて、バイブレータ704を作動させる。
【0083】
コアユニット70に設けられた操作部72からの操作信号(コアキーデータ)、加速度センサ701からの加速度信号(コア加速度データ)、および撮像情報演算部74からの処理結果データは、マイコン751に出力される。また、接続ケーブル79を介して、サブユニット76に設けられた操作部78からの操作信号(サブキーデータ)および加速度センサ761からの加速度信号(サブ加速度データ)は、マイコン751に出力される。マイコン751は、入力した各データ(コアキーデータ、サブキーデータ、コア加速度データ、サブ加速度データ、処理結果データ)を無線コントローラモジュール19へ送信する送信データとして一時的にメモリ752に格納する。ここで、通信部75から無線コントローラモジュール19への無線送信は、所定の周期毎に行われるが、ゲームの処理は1/60秒を単位として行われることが一般的であるので、それよりも短い周期でデータを収集して送信を行うことが必要となる。具体的には、ゲームの処理単位は16.7ms(1/60秒)であり、ブルートゥース(Bluetooth;登録商標)で構成される通信部75の送信間隔は5msである。マイコン751は、無線コントローラモジュール19への送信タイミングが到来すると、メモリ752に格納されている送信データを一連の操作情報として、無線モジュール753へ出力する。そして、無線モジュール753は、例えばブルートゥース(登録商標)の技術に基づいて、所定周波数の搬送波を用いて操作情報で変調し、その微弱電波信号をアンテナ754から放射する。つまり、コアユニット70に設けられた操作部72からのコアキーデータ、サブユニット76に設けられた操作部78からのサブキーデータ、コアユニット70に設けられた加速度センサ701からのコア加速度データ、サブユニット76に設けられた加速度センサ761からのサブ加速度データ、および撮像情報演算部74からの処理結果データは、無線モジュール753で微弱電波信号に変調されてコアユニット70から放射される。そして、ゲーム装置3の無線コントローラモジュール19でその微弱電波信号を受信し、ゲーム装置3で当該微弱電波信号を復調や復号することによって、一連の操作情報(コアキーデータ、サブキーデータ、コア加速度データ、サブ加速度データ、および処理結果データ)を取得することができる。そして、ゲーム装置3のCPU10は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。
【0084】
次に、ゲーム装置本体5が行う具体的な処理を説明する前に、本ゲーム装置本体5で行うゲームの概要について説明する。図11に示すように、コアユニット70およびサブユニット76は、それぞれ全体として大人や子供の片手で把持可能な大きさである。そして、ゲームシステム1でコントローラ7を用いてゲームをプレイするためには、プレイヤは、一方の手(例えば右手)でコアユニット70を把持し、他方の手(例えば左手)でサブユニット76を把持して、コアユニット70およびサブユニット76をそれぞれ振り動かす動作を行う。例えば、図11においては、プレイヤが右手でコアユニット70を把持し左手でサブユニット76を把持して、それぞれ上下に振り動かしている様子を示している。このようなプレイヤがコアユニット70およびサブユニット76をそれぞれ振り動かす動作において、ゲーム装置本体5がコアユニット70およびサブユニット76の動きをそれぞれ判定し、当該コアユニット70およびサブユニット76の動きに応じた仮想ゲーム空間内の位置をそれぞれ決定してゲーム処理が行われる。なお、プレイヤがコアユニット70のみを把持してゲーム操作する場合、一方の手(例えば右手)でコアユニット70を把持して、コアユニット70を振り動かす動作を行う。この場合、プレイヤがコアユニット70を振り動かす動作に応じて、ゲーム装置本体5がコアユニット70の動きを判定し、当該コアユニット70の動きに応じた仮想ゲーム空間内の位置を決定してゲーム処理が行われる。
【0085】
例えば、プレイヤが静的にコアユニット70やサブユニット76を傾けることによって、コアユニット70やサブユニット76の静的な姿勢に応じた操作情報(具体的には、コア加速度データおよびサブ加速度データにそれぞれ含まれるX、Y、およびZ軸方向加速度データ)をゲーム装置本体5に与える。また、プレイヤがコアユニット70やサブユニット76を上下や左右に振り動かす動作では、コアユニット70やサブユニット76からその振り方向への加速度や遠心力等に応じた動的な操作情報をゲーム装置本体5に与える。このようなコアユニット70やサブユニット76に加わる加速度の変化は、加速度センサ701および761によってそれぞれ検出できるため、加速度センサ701および761からそれぞれ出力されるX、Y、およびZ軸方向加速度データに対して追加の処理を行うことによって、コアユニット70やサブユニット76の静的な姿勢や動的な動作を算出することができる。一般的に、動作に応じて生じる加速度を検出する場合、加速度センサ701および761から出力される加速度ベクトル(あるいは、加速度の正負)は、コントローラ7の加速方向とは真逆のベクトルとなるため、検出した加速度の方向を考慮してコアユニット70やサブユニット76の傾きや動きを算出することが必要であることは言うまでもない。
【0086】
図12〜図14は、コントローラ7の動きに応じて行われるゲーム処理や情報処理の一例を示す図である。ゲーム処理の一例として、モニタ2に表示されるオブジェクトをコアユニット70およびサブユニット76の動きに応じてそれぞれ動かす処理(モニタ2に表示された仮想ゲーム空間における2本のスティックでそれぞれドラムを叩く等)や、モニタ2に表示されるオブジェクトをコアユニット70の動きに応じて動かす処理(モニタ2に表示された仮想ゲーム空間におけるキャラクタをコアユニット70の動きに応じて振り回す、仮想ゲーム空間に配置された物を動かす等)がある。また、ゲーム処理とは異なった情報処理の一例として、コアユニット70および/またはサブユニット76の動きに応じてディスプレイに表示されたブラウザのジェスチャー(ウインドウを移動させる、ウインドウを閉じる、ページをめくる等)を行う。
【0087】
例えば、図12においては、モニタ2に仮想ゲーム空間に配置された2本のスティックオブジェクトOBJ1およびOBJ2とドラムオブジェクトDとが表示されている。スティックオブジェクトOBJ1は、コアユニット70が振り下ろされることに応じて、仮想ゲーム空間内においてドラムオブジェクトDの打撃面に向かって振り下ろされる(図12において実線で示す状態)。そして、スティックオブジェクトOBJ1は、コアユニット70の振り下ろし動作が終了し、振り下ろし前の位置まで戻されることに応じて、仮想ゲーム空間内における基準位置(図12において破線で示す状態)まで戻る。一方、スティックオブジェクトOBJ2は、サブユニット76が振り下ろされることに応じて、仮想ゲーム空間内においてドラムオブジェクトDの打撃面に向かって振り下ろされる(図12において破線で示す状態)。そして、スティックオブジェクトOBJ2は、サブユニット76の振り下ろし動作が終了し、振り下ろし前の位置まで戻されることに応じて、仮想ゲーム空間内における基準位置(図12において実線で示す状態)まで戻る。
【0088】
また、図13においては、仮想ゲーム空間に配置された軸Cを中心として、当該軸CにキャラクタオブジェクトOBJを連結してモニタ2に表示している。キャラクタオブジェクトOBJは、コアユニット70が円を描くように動かされることに応じて、仮想ゲーム空間内において軸Cを中心に振り回される。このとき、キャラクタオブジェクトOBJが軸Cを中心に振り回される角速度は、コアユニット70が円を描くように動く動作と同期するように設定される。そして、キャラクタオブジェクトOBJは、コアユニット70の動作が停止することに応じて、やがて軸Cにぶら下がった状態で停止する。
【0089】
また、図14においては、モニタ2に仮想ゲーム空間に配置された物オブジェクトOBJが表示されている。そして、物オブジェクトOBJは、所定ボタンが押下されている期間のコアユニット70の動きに応じて、表示画面内でコアユニット70の動きに応じて移動する。
【0090】
これらのゲーム例においては、コアユニット70およびサブユニット76がそれぞれ動かし始めの位置からどのくらいの位置まで動いたかを示すパラメータがCPU10によってそれぞれ算出される。そして、CPU10は、それぞれのパラメータを仮想ゲーム空間内にスケーリングして座標指定した位置座標に置き換えて、スティックオブジェクトOBJ1およびOBJ2やキャラクタオブジェクトOBJや物オブジェクトOBJをそれぞれ移動させている。したがって、スティックオブジェクトOBJ1およびOBJ2やキャラクタオブジェクトOBJや物オブジェクトOBJは、プレイヤがコアユニット70および/またはサブユニット76を動かす動作と同じようにそれぞれ振り下ろされたり、振り回されたり、移動したりするため、プレイヤはあたかもドラムを演奏したり、キャラクタを振り回したり、物を動かしているような感覚を味わえる。ここで、後述により明らかとなるが、算出する上記パラメータの種類によっては、コアユニット70および/またはサブユニット76の動きが停止したことに応じて、仮想ゲーム空間上のオブジェクトが基準位置に必ず戻る態様(例えば、図12や図13のゲーム例)と、オブジェクトが移動した位置でそのまま停止する態様(例えば、図14のゲーム例)とがある。
【0091】
次に、ゲームシステム1において行われるゲーム処理の詳細を説明する。以下、説明するゲーム処理においては、コアユニット70およびサブユニット76をそれぞれ操作する場合、コアユニット70から得られるコア加速度データに基づいて行われる処理と、サブユニット76から得られるサブ加速度データに基づいて行われる処理とは同様であり、操作対象とするオブジェクトが異なるのみである。そして、コア加速度データに基づいて行われる処理と、サブ加速度データに基づいて行われる処理とは、同時に進行する。したがって、以下の説明においては、コアユニット70から得られるコア加速度データに基づいて行われる前者の処理を主に説明する。
【0092】
まず、図15を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図15は、ゲーム装置本体5の外部メインメモリ12および/または内部メインメモリ35(以下、2つのメインメモリを総称して、単にメインメモリと記載する)に記憶される主なデータを示す図である。
【0093】
図15に示すように、メインメモリには、最新加速度データDa、最終加速度データDb、加速度変化量データDc、累積ベクトルデータDd、追従ベクトルデータDe、差分ベクトルデータDf、仮想ゲーム空間位置データDg、姿勢データDh、および画像データDi等が記憶される。なお、メインメモリには、図15に示す情報に含まれるデータの他、ゲームに登場するオブジェクトOBJや他のオブジェクト等に関するデータや仮想ゲーム空間に関するデータ(背景のデータ等)等、ゲーム処理に必要なデータが記憶される。
【0094】
最新加速度データDaは、コアユニット70に生じた最新加速度accnを示すデータであり、コアユニット70から送信データとして送信されてくる一連の操作情報に含まれる最新のコア加速度データが記憶される。この最新加速度データDaには、加速度センサ701がX軸成分に対して検出した加速度accnXを示すX軸方向加速度データDa1、Y軸成分に対して検出した加速度accnYを示すY軸方向加速度データDa2、およびZ軸成分に対して検出した加速度accnZを示すZ軸方向加速度データDa3が含まれる。なお、ゲーム装置本体5に備える無線コントローラモジュール19は、コアユニット70から所定周期(例えば、1/200秒毎)に送信される操作情報に含まれるコア加速度データを受信し、無線コントローラモジュール19に備える図示しないバッファに蓄えられる。その後、上記バッファに蓄えられた最新のコア加速度データがゲーム処理周期である1フレーム毎(例えば、1/60秒毎)に読み出されて、メインメモリの最新加速度データDaが更新される。
【0095】
なお、後述する処理フローでは、最新加速度データDaがゲーム処理周期である1フレーム毎に更新される例を用いて説明するが、他の処理周期で更新されてもかまわない。例えば、コアユニット70からの送信周期毎に最新加速度データDaを更新し、当該更新されたコア加速度データをゲーム処理周期毎に利用する態様でもかまわない。この場合、最新加速度データDaに記憶する加速度データDa1〜Da3を更新する周期と、ゲーム処理周期とが異なることになる。
【0096】
最終加速度データDbは、加速度変化量accvを算出するために用いた最新加速度accnを最終加速度acclとして格納したデータである。つまり、最終加速度データDbには、最新加速度データDaと同様に、X軸成分に対する最終加速度acclXを示すX軸方向加速度データDb1、Y軸成分に対する最終加速度acclYを示すY軸方向加速度データDb2、およびZ軸成分に対する最終加速度acclZを示すZ軸方向加速度データDb3が含まれる。
【0097】
加速度変化量データDcは、最新加速度accnと最終加速度acclとの間の変化量を示す加速度変化量accvを示すデータである。そして、加速度変化量データDcには、X軸成分に対する加速度変化量accvXを示すX軸方向加速度変化量データDc1、Y軸成分に対する加速度変化量accvYを示すY軸方向加速度変化量データDc2、およびZ軸成分に対する加速度変化量accvZを示すZ軸方向加速度変化量データDc3が含まれる。つまり、加速度変化量accvは、各軸毎に加速度変化量accvX、accvY、およびaccvZを含んでおり、最新加速度accnと最終加速度acclとの間の変化量を示す変化量ベクトルとして用いることができる。
【0098】
累積ベクトルデータDdは、最新加速度accnを累積して算出される累積ベクトルvecaを示すデータが格納される。具体的には、累積ベクトルデータDdには、累積ベクトルvecaのX軸成分vecaXを示すX軸方向成分データDd1、Y軸成分vecaYを示すY軸方向成分データDd2、およびZ軸成分vecaZを示すZ軸方向成分データDd3が含まれる。
【0099】
追従ベクトルデータDeは、累積ベクトルvaca(実施例においては、最新(現時点)の累積ベクトルvaca)に所定の割合で追従する追従ベクトルvecgを示すデータが格納される。具体的には、追従ベクトルデータDeは、追従ベクトルvecgのX軸成分vecgXを示すX軸方向成分データDe1、Y軸成分vecgYを示すY軸方向成分データDe2、およびZ軸成分vecgZを示すZ軸方向成分データDe3が含まれる。
【0100】
差分ベクトルデータDfは、累積ベクトルvecaと追従ベクトルvecgとの差分ベクトルvecdを示すデータが格納される。具体的には、差分ベクトルデータDfには、差分ベクトルvecdのX軸成分vecdXを示すX軸方向成分データDf1、Y軸成分vecdYを示すY軸方向成分データDf2、およびZ軸成分vecdZを示すZ軸方向成分データDf3が含まれる。
【0101】
仮想ゲーム空間位置データDgは、差分ベクトルvecdに応じて決定された仮想ゲーム空間におけるオブジェクトの位置posを示すデータが格納される。具体的には、仮想ゲーム空間にxyz軸座標系が設定されるとき、仮想ゲーム空間位置データDgには、オブジェクトの位置posのx軸座標posxを示すx軸座標データDg1、y軸座標posyを示すy軸座標データDg2、およびz軸座標poszを示すz軸座標データDg3が含まれる。
【0102】
姿勢データDhは、静的な状態におけるコアユニット70の姿勢を示すデータであり、例えばコアユニット70に対して作用する重力加速度の方向を3次元ベクトルで示すデータである。
【0103】
画像データDiは、オブジェクト画像データDi1等を含んでいる。オブジェクト画像データDi1は、仮想ゲーム空間の位置posにオブジェクトOBJを配置してゲーム画像を生成するためのデータである。
【0104】
次に、図16〜図18を参照して、ゲーム装置本体5において行われるゲーム処理の詳細を説明する。なお、図16は、ゲーム装置本体5において実行されるゲーム処理の流れを示すフローチャートである。図17は、図16におけるステップ44のコントローラの姿勢算出処理の詳細な動作を示すサブルーチンである。図18は、図16におけるステップ45の加速度変化量を算出する処理の詳細な動作を示すサブルーチンである。なお、図16〜図18に示すフローチャートにおいては、ゲーム処理のうち、プレイヤがコアユニット70を動かすことに応じてオブジェクトOBJを移動させる処理について説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図16〜図18では、CPU10が実行する各ステップを「S」と略称する。
【0105】
ゲーム装置本体5の電源が投入されると、ゲーム装置本体5のCPU10は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図16〜図18に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【0106】
図16において、CPU10は、ゲーム処理の初期化を行い(ステップ41)、次のステップに処理を進める。例えば、上記ステップ41におけるゲーム処理初期化では、仮想ゲーム空間において2本のスティックを振り下ろしてドラムを演奏したり、キャラクタを振り回したり、物を動かしたりするゲーム処理のとき、仮想ゲーム空間の設定やゲームオブジェクトの配置等の初期設定を行う。
【0107】
次に、CPU10は、認識処理の初期化を行い(ステップ42)、次のステップに処理を進める。上記ステップ42における認識処理の初期化処理では、コアユニット70の動きを算出するための各パラメータを初期化する。例えば、CPU10は、最終加速度データDbに格納される最終加速度acclX、acclY、およびacclZをそれぞれ0に設定する。CPU10は、加速度変化量データDcに格納される加速度変化量accvX、accvY、およびaccvZをそれぞれ0に設定する。CPU10は、累積ベクトルデータDdに格納される各成分vecaX、vecaY、およびvecaZをそれぞれ0に設定する。CPU10は、追従ベクトルデータDeに格納される各成分vecgX、vecgY、およびvecgZをそれぞれ0に設定する。CPU10は、差分ベクトルデータDfに格納される各成分vecdX、vecdY、およびvecdZをそれぞれ0に設定する。CPU10は、仮想ゲーム空間位置データDgに格納される各座標posx、posy、およびposzをそれぞれ0に設定する。そして、CPU10は、姿勢データDhに格納されるコアユニット70の静的な姿勢を、所定方向に向いた長さ1の3次元ベクトルに設定する。
【0108】
次に、CPU10は、最新加速度accnを取得して(ステップ43)、次のステップに処理を進める。例えば、CPU10は、コアユニット70から受信した最新の操作情報に含まれるコア加速度データが示す加速度を最新加速度accnとして最新加速度データDaに格納する。具体的には、コアユニット70から受信した最新の操作情報に含まれるX軸方向のコア加速度データが示す加速度が、最新加速度accnXとしてX軸方向加速度データDa1に格納される。また、最新の操作情報に含まれるY軸方向のコア加速度データが示す加速度が、最新加速度accnYとしてY軸方向加速度データDa2に格納される。そして、最新の操作情報に含まれるZ軸方向のコア加速度データが示す加速度が、最新加速度accnZとしてZ軸方向加速度データDa3に格納される。
【0109】
次に、CPU10は、コアユニット70の姿勢を算出する処理を行って(ステップ44)、処理を次のステップに進める。以下、図17を参照して、上記ステップ44で行うコアユニット70の姿勢算出処理について説明する。
【0110】
図17において、CPU10は、最新加速度データDaに格納された最新加速度accnを参照して、コアユニット70が静的な状態にあるか否かを判断する(ステップ61)。一例として、CPU10は、最新加速度accnX、accnY、およびaccnZの何れかの値が、重力加速度に相当する値以上を示している場合、コアユニット70が静的な状態にないと判断する。他の例として、CPU10は、最新加速度accnX、accnY、およびaccnZのそれぞれの変化量が全て所定値未満である場合、コアユニット70が静的な状態にあると判断する。最新加速度accnを参照してコアユニット70の静的な状態にあることを判定する方法は他にも考えられるが、上記ステップ61においては他の方法を用いてコアユニット70の状態を判定してもかまわない。そして、CPU10は、コアユニット70が静的な状態にある場合、次のステップ62に処理を進める。一方、CPU10は、コアユニット70が静的な状態にない場合、当該サブルーチンによる処理を終了する。
【0111】
ステップ62において、CPU10は、最新加速度accnを用いてコアユニット70の姿勢を算出し姿勢データDhに格納して、当該サブルーチンによる処理を終了する。コアユニット70が静的な状態で配置されている場合、コアユニット70には重力加速度が作用する。この重力加速度がコアユニット70に作用している方向は、最新加速度accnX、accnY、およびaccnZの値から算出することが可能である。ここで、コアユニット70に対して重力加速度が作用する方向は、実空間における鉛直下方向であり、コアユニット70に定義されたXYZ軸に対する鉛直下方向を取得することが可能となる。例えば、CPU10は、コアユニット70に作用する重力加速度の方向を示す3次元ベクトルデータをコアユニット70の静的な姿勢として、姿勢データDhに格納する。
【0112】
図16に戻り、ステップ44におけるコアユニット70の姿勢算出処理の後、CPU10は、加速度変化量accvを算出する処理を行って(ステップ45)、処理を次のステップに進める。以下、図18を参照して、上記ステップ45で行う加速度変化量算出処理について説明する。
【0113】
図18において、CPU10は、最新加速度データDaに含まれるX軸方向加速度データDa1に格納された最新加速度accnXを参照して、最新加速度accnXが加速度センサ701の測定限界に達しているか否かを判断する(ステップ81)。一般的に、加速度センサ701および761は、加速度が測定可能な範囲が限られており、その限度を超えたときに当該範囲の上限値(下限値)を出力することがある。例えば、加速度の測定可能範囲が−4G〜+4Gの加速度センサ701や加速度センサ761を用いた場合、コアユニット70やサブユニット76に4G以上の加速度が作用しても−4Gまたは+4Gを示す加速度データを出力する。上記ステップ81においては、このような加速度の測定可能範囲を超える加速度が作用しているか否かの判定が行われる。例えば、CPU10は、加速度の測定可能範囲の上下限値付近となる値を閾値(例えば、−3.39Gおよび+3.39G)として、最新加速度accnX≦−3.39または最新加速度accnX≧+3.39である場合、最新加速度accnXが加速度センサ701の測定限界に達していると判断する。そして、CPU10は、最新加速度accnXが測定限界に達していない場合、次のステップ82に処理を進める。一方、CPU10は、最新加速度accnXが測定限界に達している場合、次のステップ83に処理を進める。
【0114】
ステップ82において、CPU10は、X軸方向の加速度変化量accvXを算出してX軸方向加速度変化量データDc1を更新し、次のステップ85に処理を進める。例えば、上記ステップ82において、CPU10は、現在格納されている最新加速度accnXおよび最終加速度acclXを参照して、加速度変化量accvXをaccnX−acclXで算出する。
【0115】
一方、ステップ83において、CPU10は、加速度変化量accvXを予測によって算出する処理を行ってX軸方向加速度変化量データDc1を更新し、次のステップに処理を進める。例えば、上記ステップ83において、CPU10は、現在格納されている加速度変化量accvX(すなわち、前回の処理で算出された加速度変化量accvX)を参照し、当該加速度変化量accvXに所定の減衰率を乗算して新たな加速度変化量accvXを算出して、X軸方向加速度変化量データDc1を更新する。ここで、上記加速度変化量accvXに乗算する値は、加速度センサ701の測定範囲外の値を予測するための加速度変化量の減衰率であり、1未満の正の値(例えば0.6)である。
【0116】
次に、CPU10は、最新加速度accnXをステップ83で算出された加速度変化量accvXに合わせて修正してX軸方向加速度データDa1を更新し(ステップ84)、次のステップ85に処理を進める。例えば、CPU10は、現在格納されている最新加速度accnXを参照し、当該最新加速度accnXにステップ83で算出された加速度変化量accvXを加算して新たな最新加速度accnXを算出して、X軸方向加速度データDa1を更新する。
【0117】
ステップ85において、CPU10は、最新加速度データDaに含まれるY軸方向加速度データDa2に格納された最新加速度accnYを参照して、最新加速度accnYが加速度センサ701の測定限界に達しているか否かを判断する。例えば、CPU10は、上記ステップ81と同様に、加速度の測定可能範囲の上下限値付近となる値を閾値(例えば、−3.39Gおよび+3.39G)として、最新加速度accnY≦−3.39または最新加速度accnY≧+3.39である場合、最新加速度accnYが加速度センサ701の測定限界に達していると判断する。そして、CPU10は、最新加速度accnYが測定限界に達していない場合、次のステップ86に処理を進める。一方、CPU10は、最新加速度accnYが測定限界に達している場合、次のステップ87に処理を進める。
【0118】
ステップ86において、CPU10は、Y軸方向の加速度変化量accvYを算出してY軸方向加速度変化量データDc2を更新し、次のステップ89に処理を進める。例えば、上記ステップ86において、CPU10は、現在格納されている最新加速度accnYおよび最終加速度acclYを参照して、加速度変化量accvYをaccnY−acclYで算出する。
【0119】
一方、ステップ87において、CPU10は、加速度変化量accvYを予測によって算出する処理を行ってY軸方向加速度変化量データDc2を更新し、次のステップに処理を進める。例えば、上記ステップ87において、CPU10は、現在格納されている加速度変化量accvY(すなわち、前回の処理で算出された加速度変化量accvY)を参照し、当該加速度変化量accvYに上記減衰率を乗算して新たな加速度変化量accvYを算出して、Y軸方向加速度変化量データDc2を更新する。
【0120】
次に、CPU10は、最新加速度accnYをステップ87で算出された加速度変化量accvYに合わせて修正してY軸方向加速度データDa2を更新し(ステップ88)、次のステップ89に処理を進める。例えば、CPU10は、現在格納されている最新加速度accnYを参照し、当該最新加速度accnYにステップ87で算出された加速度変化量accvYを加算して新たな最新加速度accnYを算出して、Y軸方向加速度データDa2を更新する。
【0121】
ステップ89において、CPU10は、最新加速度データDaに含まれるZ軸方向加速度データDa3に格納された最新加速度accnZを参照して、最新加速度accnZが加速度センサ701の測定限界に達しているか否かを判断する。例えば、CPU10は、上記ステップ81と同様に、加速度の測定可能範囲の上下限値付近となる値を閾値(例えば、−3.39Gおよび+3.39G)として、最新加速度accnZ≦−3.39または最新加速度accnZ≧+3.39である場合、最新加速度accnZが加速度センサ701の測定限界に達していると判断する。そして、CPU10は、最新加速度accnZが測定限界に達していない場合、次のステップ90に処理を進める。一方、CPU10は、最新加速度accnZが測定限界に達している場合、次のステップ91に処理を進める。
【0122】
ステップ90において、CPU10は、Z軸方向の加速度変化量accvZを算出してZ軸方向加速度変化量データDc3を更新し、当該サブルーチンによる処理を終了する。例えば、上記ステップ90において、CPU10は、現在格納されている最新加速度accnZおよび最終加速度acclZを参照して、加速度変化量accvZをaccnZ−acclZで算出する。
【0123】
一方、ステップ91において、CPU10は、加速度変化量accvZを予測によって算出する処理を行ってZ軸方向加速度変化量データDc3を更新し、次のステップに処理を進める。例えば、上記ステップ91において、CPU10は、現在格納されている加速度変化量accvZ(すなわち、前回の処理で算出された加速度変化量accvZ)を参照し、当該加速度変化量accvZに上記減衰率を乗算して新たな加速度変化量accvZを算出して、Z軸方向加速度変化量データDc3を更新する。
【0124】
次に、CPU10は、最新加速度accnZをステップ91で算出された加速度変化量accvZに合わせて修正してZ軸方向加速度データDa3を更新し(ステップ92)、当該サブルーチンによる処理を終了する。例えば、CPU10は、現在格納されている最新加速度accnZを参照し、当該最新加速度accnZにステップ91で算出された加速度変化量accvZを加算して新たな最新加速度accnZを算出して、Z軸方向加速度データDa3を更新する。
【0125】
このようにステップ45で算出される加速度変化量accvは、各軸毎に加速度変化量accvX、accvY、およびaccvZとして算出しており、変化量ベクトルとして用いることができる。
【0126】
図16に戻り、ステップ45における加速度変化量accvを算出した後、CPU10は、最新加速度accnで最終加速度acclを更新して、最終加速度データDbに格納し(ステップ46)、処理を次のステップに進める。例えば、CPU10は、現在最新加速度データDaに格納されている最新加速度accnX、accnY、およびaccnZを、それぞれ最終加速度acclX、acclY、およびacclZとして最終加速度データDbに格納する。
【0127】
次に、CPU10は、累積ベクトルvecaを所定量減衰させて、累積ベクトルデータDdを更新し(ステップ47)、処理を次のステップに進める。例えば、CPU10は、現在格納されている累積ベクトルvecaのX軸成分vecaXを参照し、当該X軸成分vecaXに所定の減衰率(1未満の正の値であり、例えば0.89)を乗算して新たなX軸成分vecaXを算出してX軸方向成分データDd1を更新する。また、CPU10は、現在格納されているY軸成分vecaYに上記減衰率を乗算して新たなY軸成分vecaYを算出してY軸方向成分データDd2を更新する。そして、CPU10は、現在格納されているZ軸成分vecaZに上記減衰率を乗算して新たなZ軸成分vecaZを算出してZ軸方向成分データDd3を更新する。
【0128】
なお、上記ステップ47においては、累積ベクトルvecaの各成分に所定の減衰率を乗算することによって、累積ベクトルvecaを減衰しているが、他の方法で累積ベクトルvecaを減衰させてもかまわない。例えば、累積ベクトルvecaの各成分が0となる方向に一定量加算または減算することによって、累積ベクトルvecaを減衰させてもかまわない。
【0129】
次に、CPU10は、累積ベクトルvecaに最新加速度accnを加算して、累積ベクトルデータDdを更新し(ステップ48)、処理を次のステップに進める。例えば、CPU10は、現在格納されている累積ベクトルvecaのX軸成分vecaXを参照し、当該X軸成分vecaXに最新加速度accnXを加算して新たなX軸成分vecaXを算出してX軸方向成分データDd1を更新する。また、CPU10は、現在格納されているY軸成分vecaYを参照し、当該Y軸成分vecaYに最新加速度accnYを加算して新たなY軸成分vecaYを算出してY軸方向成分データDd2を更新する。そして、CPU10は、現在格納されているZ軸成分vecaZを参照し、当該Z軸成分vecaZに最新加速度accnZを加算して新たなZ軸成分vecaZを算出してZ軸方向成分データDd3を更新する。なお、上記ステップ47およびステップ48は、同時に実行してもいいし、実行する順序を逆にしてもかまわない。
【0130】
次に、CPU10は、追従ベクトルvecgを算出し(ステップ49)、次のステップに処理を進める。例えば、CPU10は、累積ベクトルデータDdに格納されたX軸成分vecaX、Y軸成分vecaY、およびZ軸成分vecaZと、追従ベクトルデータDeに格納された追従ベクトルvecgのX軸成分vecgX、Y軸成分vecgY、およびZ軸成分vecgZとを参照する。そして、CPU10は、新たなX軸成分vecgX、Y軸成分vecgY、およびZ軸成分vecgZを、それぞれ
vecgX←vecgX+(vecaX−vecgX)*K
vecgY←vecgY+(vecaY−vecgY)*K
vecgZ←vecgZ+(vecaZ−vecgZ)*K
で算出し、追従ベクトルデータDeを更新する。ここで、Kは追従係数であり、例えばK=0.006に設定される。このように、追従ベクトルvecgは、現時点の累積ベクトルvacaの各軸成分値(vecaX、vecaY、vecaZ)に、所定の割合でそれぞれ追従させた各軸成分値(vecgX、vecgY、vecgZ)を有しており、現時点の累積ベクトルvacaに所定の割合で逐次追従させたものである。上記算出式によって、追従ベクトルvecgは、累積ベクトルvecaに追従するベクトルとして算出されているが、追従係数Kが非常に小さな値であるため、累積ベクトルvecaのX軸成分vecaX、Y軸成分vecaY、およびZ軸成分vecaZを平滑化したようなベクトルとなる。また、追従ベクトルvecgは、常にコアユニット70に作用している重力加速度等の静的加速度成分を累積したパラメータとしても扱うことができる。
【0131】
なお、上記ステップ49においては、現時点の累積ベクトルvacaの各軸成分値(vecaX、vecaY、vecaZ)に、所定の割合でそれぞれ追従させた各軸成分値を算出することによって追従ベクトルvecgを設定したが、他の時点における累積ベクトルvacaを用いて追従ベクトルvecgを設定してもかまわない。例えば、現時点から数フレーム前までに算出された過去の時点における累積ベクトルvacaの各軸成分値(vecaX、vecaY、vecaZ)に、所定の割合でそれぞれ追従させた各軸成分値を算出することによって追従ベクトルvecgを設定してもかまわない。
【0132】
次に、CPU10は、差分ベクトルvecdを算出し(ステップ50)、次のステップに処理を進める。例えば、CPU10は、累積ベクトルデータDdに格納されたX軸成分vecaX、Y軸成分vecaY、およびZ軸成分vecaZと、追従ベクトルデータDeに格納された追従ベクトルvecgのX軸成分vecgX、Y軸成分vecgY、およびZ軸成分vecgZとを参照する。そして、CPU10は、新たな差分ベクトルvecdのX軸成分vecdX、Y軸成分vecdY、およびZ軸成分vecdZをそれぞれ
vecdX=vecaX−vecgX
vecdY=vecaY−vecgY
vecdZ=vecaZ−vecgZ
で算出し、差分ベクトルデータDfを更新する。上記算出式から明らかなように、差分ベクトルvecdは、累積ベクトルvecaから追従ベクトルvecgが除かれている。
【0133】
次に、CPU10は、ゲームメイン処理を行い(ステップ51)、処理を次のステップに進める。CPU10は、上記ステップ50の処理で算出された差分ベクトルvecdを用いて、ゲームメイン処理を行う。例えば、CPU10は、差分ベクトルvecdの各成分(X軸成分vecdX、Y軸成分vecdY、Z軸成分vecdZ)を仮想ゲーム空間にスケーリングして直接座標指定し、当該座標指定値を用いてゲーム処理を行う。一例として、CPU10は、差分ベクトルvecdの各成分を、オブジェクトOBJの位置posのx軸座標posx、y軸座標posy、およびz軸座標poszにそれぞれ置き換えて座標指定して仮想ゲーム空間位置データDgを更新する。そして、CPU10は、仮想ゲーム空間の位置posにオブジェクトOBJを配置して、ゲーム画像をモニタ2に表示することによって、一連のゲーム処理を行う。以下、図19および図20を参照して、差分ベクトルvecdを用いたゲーム処理例を説明する。なお、図19は、プレイヤがコアユニット70を動かす実空間と、モニタ2に表示される仮想ゲーム空間との関係の一例を示す図である。図20は、プレイヤがコアユニット70を静止状態から上に動かした際のY軸方向に対する各パラメータの変化例を示す図である。
【0134】
図19において、仮想ゲーム空間には、互いに直交するxyz軸が設定される。ここで、コアユニット70の下面を鉛直下方向に向けた状態でコアユニット70の前面をモニタ2の正面に向けた場合、当該モニタ2に表示される仮想ゲーム空間のxyz軸と、コアユニット70に設定されたXYZ軸との位置関係は、図19に示すようにそれぞれ同じ方向となる位置関係となる。具体的には、コアユニット70に設定されたX軸正方向が仮想ゲーム空間に設定されたx軸正方向となり、コアユニット70に設定されたY軸正方向が仮想ゲーム空間に設定されたy軸正方向となり、コアユニット70に設定されたZ軸正方向が仮想ゲーム空間に設定されたz軸正方向となる。
【0135】
仮想ゲーム空間に配置されるオブジェクトOBJの位置は、xyz座標値で示され、具体的にはオブジェクトの位置pos(posx,posy,posz)で設定される。そして、差分ベクトルvecdの各成分(X軸成分vecdX、Y軸成分vecdY、Z軸成分vecdZ)を仮想ゲーム空間にスケーリングして座標指定することによって、位置pos(posx,posy,posz)が設定される。例えば、位置pos(posx,posy,posz)は、それぞれ
posx=vecdX
posy=vecdY
posz=vecdZ
によって算出される。
【0136】
コアユニット70が実空間において静止している場合(図19において破線で示すコアユニット70)、差分ベクトルvecdが(0,0,0)となる(図20のA状態)。この場合、位置pos0(pos0x,pos0y,pos0z)=(0,0,0)が座標指定されるため、仮想ゲーム空間においてオブジェクトOBJがxyz軸座標の原点(以下、基準位置と記載する)に配置される(図19において破線で示すオブジェクトOBJ)。
【0137】
その後、プレイヤがコアユニット70を上面方向(反重力方向)へ動かして停止する場合を想定する。この場合、コアユニット70には上面方向への加速度が作用するため、加速度センサ701から出力されるデータは、コアユニット70に作用する加速度とは真逆方向の加速度、すなわち最新加速度accn(図20では、最新加速度accnのうち、Y軸成分加速度accnYの変化を破線で示す)がY軸負方向に変化する(図20のB状態)。その後、コアユニット70を上面方向に動かして停止させると、コアユニット70には下面方向の加速度(減速時の加速度)が作用するため、加速度センサ701から出力されるデータが示す最新加速度accnは、コアユニット70の動きが停止するときにY軸正方向に変化する(図20のC状態)。
【0138】
このような最新加速度accnの変化に対して、最新加速度accnの各成分値を順次累積して累積ベクトルveca(図20では、累積ベクトルvecaのY軸成分vecaYの変化を一点鎖線で示す)が得られる。累積ベクトルvecaは、最新加速度accnの各成分値の累積となるため、最新加速度accnの変化を大きくしたような変化を示す。ここで、累積ベクトルvecaは、常にその値が減衰する(上記ステップ47参照)ため、コアユニット70が加速している状態(上記B状態)等では累積と減衰とが相反する方向に働く。その後のコアユニット70が減速している状態(上記C状態)等では、累積ベクトルvecaの値の正負が変わるまでの期間で累積と減衰とが同じ方向に働く。したがって、累積ベクトルvecaは、コアユニット70が減速している方向(つまり、コアユニット70を動かしている方向)により大きく変化することになる。
【0139】
このような累積ベクトルvecaの変化に対して、追従ベクトルvecg(図20では、追従ベクトルvecgのY軸成分vecgYの変化を二点鎖線で示す)は、現時点の累積ベクトルvecaを目標として遅れて追うように変化する。つまり、追従ベクトルvecgは、上述した累積ベクトルvecaの変化を平滑化したような変化となる。
【0140】
このような累積ベクトルvecaおよび追従ベクトルvecgの変化に対して、両者を差分することによって差分ベクトルvecd(図20では、差分ベクトルvecdのY軸成分vecdYの変化を太線で示す)が得られる。つまり、差分ベクトルvecdは、累積ベクトルvecaの変化を平滑化した追従ベクトルvecgを基準とした累積ベクトルvecaの変化を示す。したがって、図20に示すように、差分ベクトルvecdは、コアユニット70の動かし始め(図20のB状態)に若干逆方向の値が算出されることもあるが、結果的にコアユニット70を動かした方向の値が大きくなり(図20のC状態)、コアユニット70を動かした方向を示している期間も長くなる。
【0141】
したがって、プレイヤがコアユニット70を上面方向へ動かして停止する場合、差分ベクトルvecd(vecdX,vecdY,vecdZ)は、図19に示すようなY軸正方向のベクトル(例えば、差分ベクトルvecd(0,+a,0))を示す。つまり、プレイヤがコアユニット70を動かす方向と同じ方向の差分ベクトルvecdが算出される。
【0142】
そして、算出されたY軸正方向の差分ベクトルvecdの各成分を仮想ゲーム空間にスケーリングして新たな座標指定を行うことによって、位置posが基準位置から変化する。例えば、差分ベクトルvecd(0,+a,0)をそのまま仮想ゲーム空間のxyz軸座標値にスケーリングして座標指定することによって、位置posが基準位置から(0,+a,0)に変化する。この位置posの変化に応じて、オブジェクトOBJの位置も変化するため、当該オブジェクトOBJが仮想ゲーム空間の基準位置からy軸正方向へ移動して、モニタ2に表示される。一方、上述したようにコアユニット70に設定されたY軸正方向が仮想ゲーム空間に設定されたy軸正方向となるため、結果的にプレイヤが実空間でコアユニット70を動かす方向に、オブジェクトOBJが仮想ゲーム空間で動いてモニタ2に表示されることになる。例えば、位置posにスティックオブジェクトOBJ1を配置する、位置posにキャラクタオブジェクトOBJを配置する、または位置posに物オブジェクトOBJを配置することによって、上述した図12〜図14を用いて説明したゲーム例の実現が可能となる。このように、プレイヤがコアユニット70を動かし始めた位置を基準としたコアユニット70の位置として差分ベクトルvecdを算出し、当該差分ベクトルvecdを仮想ゲーム空間にスケーリングすることによって、コアユニット70の実空間上の位置に応じた仮想ゲーム空間上の位置が指定可能となる。
【0143】
なお、図19に示した各座標軸の関係は、加速度センサ701から出力されるデータが、加速度センサ701に加えられる加速度とは真逆方向の加速度を示すデータを出力し、当該データをそのまま仮想ゲーム空間へスケーリングすることを前提にしている。そして、コアユニット70の座標軸(XYZ軸)の方向と仮想ゲーム空間の座標軸(xyz軸)の方向とを同じにすることによって、コアユニット70の動く位置と同じ方向にスケーリングされて座標指定される態様を示している。しかしながら、加速度センサの特性が加速度と同じ方向の加速度を示すデータを出力するときや、処理途中でデータから得られる加速度の正負を逆に変換するとき等は、仮想ゲーム空間またはコアユニット70に設定する座標軸の方向を図19とは逆にしてもかまわない。取り扱うデータの正負関係によって、コアユニット70の座標軸および/または仮想ゲーム空間の座標軸を適宜設定すれば、コアユニット70の動く位置と同じ方向に座標指定可能であることは言うまでもない。
【0144】
なお、円を描くようにコアユニット70を動かし続けたり、コアユニット70を上下に繰り返し振り続けたりするように、コアユニット70を常に動かし続けるような場合は、Y軸方向に対する各パラメータの変化が例えば図21に示したようになる。この場合、差分ベクトルvecdにコアユニット70の動きとは逆方向の成分が含まれていても、直前のコアユニット70の動きから得られる値によって相殺されるため、オブジェクトOBJの動きに視覚的な影響を与えることがない。
【0145】
なお、上記ステップ51の処理で行われる差分ベクトルvecdを用いたゲームメイン処理は、差分ベクトルvecdが所定の条件を満たすときのみ有効にしてもかまわない。例えば、CPU10は、差分ベクトルvecdの大きさが所定の閾値を越えたとき、差分ベクトルvecdを用いたゲームメイン処理を行う。具体的には、CPU10は、差分ベクトルvecdの大きさが所定の閾値を越えているとき、差分ベクトルvecdの各成分(X軸成分vecdX、Y軸成分vecdY、Z軸成分vecdZ)を仮想ゲーム空間にスケーリングして直接座標指定し、当該座標指定値を用いてゲーム処理を行う。一方、CPU10は、差分ベクトルvecdの大きさが所定の閾値を越えていないとき、所定の値(例えば、予め決められた固定値や前回の処理で算出された座標指定値)を上記座標指定値としてゲーム処理を行う。これによって、累積ベクトルvecdの大きさが所定の閾値より大きいときに当該累積ベクトルvecdにしたがって決められる座標指定値が有効となるため、コアユニット70に対する微小な動きがキャンセルされ、コアユニット70の動きの誤認識も防止することができる。
【0146】
図16に戻り、CPU10は、上記ステップ51のゲームメイン処理の後、ゲームを終了するか否かを判断する(ステップ52)。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。CPU10は、ゲームを終了しない場合に上記ステップ43に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。
【0147】
ここで、上述した加速度データ処理における基本原理について説明する。例えば、加速度センサ701から得られる値をそのまま仮想ゲーム空間にスケーリングして座標指定した場合、コアユニット70の動きとは異なった位置や方向に位置posが設定されることがある。一例として、コアユニット70には常に重力加速度が作用しているため、コアユニット70が静止状態または移動状態であっても、常に当該重力加速度が影響した値が仮想ゲーム空間に座標指定され、コアユニット70の動きとは無関係な位置posが算出されることがあり得る。また、コアユニット70を所定方向へ移動させて静止するとき、コアユニット70には、所定方向の加速度が生じた後に逆方向の加速度が生じる。したがって、逆方向の加速度が生じる期間では、コアユニット70の動きとは逆方向の位置posが算出される。さらに、加速度センサ701等の機器自体の精度誤差が直接影響するため、コアユニット70の動きに応じて、プレイヤが意図するような位置posが算出することが困難となる。
【0148】
一方、本願の処理動作では、位置posを求めるために差分ベクトルvecdを用いている。この差分ベクトルvecdは、上述したようにコアユニット70の移動に応じて生じる加速度ベクトルを積分したようなベクトルであり、コアユニット70が実空間において移動する速度を模して変化するパラメータである。したがって、プレイヤがコアユニット70を停止状態から一方方向へ動かして停止させた場合、当該動きをベクトルで示してやがて0となる。したがって、差分ベクトルvecdの各成分を仮想ゲーム空間にスケーリングして座標指定することによって位置posを求めると、基準位置からプレイヤがコアユニット70を動かす方向に位置posが移動して、やがて基準位置に戻ることになる。このように差分ベクトルvecdを仮想ゲーム空間にスケーリングして座標指定することによって位置posを得る場合、コアユニット70の静止に応じて位置posが基準位置に戻るため、コアユニット70の動きに応じて仮想ゲーム空間を移動させながら、最終的またはある程度の周期で基準位置に戻すような位置posの座標指定に最適である。
【0149】
また、加速度センサ701から得られる値から重力加速度等の静的成分を除いて累積したベクトルは、理論的にはコアユニット70の静止状態に応じて0となる。しかしながら、上記ベクトルは、加速度センサ701等の機器自体の精度誤差やプレイヤの不安定な操作状態等によって、現実には0とならないことが多い。一方、差分ベクトルvecd(累積ベクトルveca)は、常に減衰される3次元ベクトルである(ステップ47参照)。このように差分ベクトルvecdを常に減衰することによって、加速度センサ701等の機器自体の精度誤差を吸収し、コアユニット70の静止状態であれば差分ベクトルvecdを確実に0に近づけることができる。また、差分ベクトルvecd(累積ベクトルveca)に乗算する減衰率を小さく(すなわち、減衰を大きく)すると、コアユニット70の大きな動きに反応した位置posが座標指定される。一方、差分ベクトルvecd(累積ベクトルveca)に乗算する減衰率を大きく(すなわち、減衰を小さく)すると、コアユニット70の小さな動きにも反応して位置posが座標指定される。つまり、累積ベクトルvecaに乗算する減衰率を調整することによって、操作に対する応答感度を調整することもできる。
【0150】
また、上記ステップ49で算出する追従ベクトルvecgは、追従係数Kが非常に小さな値(例えばK=0.006)に設定されている。しかしながら、追従係数Kの値を調整することによって、検出されたコアユニット70の動的加速度成分に影響を与える度合いを調整するパラメータとして用いることができる。例えば、上記ステップ49で用いられる追従係数Kを大きく(すなわち、追従を強く)すると、上記ステップ50における差分ベクトルvecdの算出においてコアユニット70を動かすことによって生じた動的加速度成分を累積した値も累積ベクトルvecaから除算してしまう。したがって、追従係数Kを大きくした場合、コアユニット70を動かして座標指定された位置posが仮想ゲーム空間において維持されにくくなり、位置posが基準位置に戻るタイミングが早くなる。一方、追従係数Kを小さく(すなわち、追従を弱く)すると、コアユニット70を動かすことによって生じた動的加速度成分が当該動作後も累積ベクトルvecaとして一定期間残存してしまう。したがって、追従係数Kを小さくした場合、コアユニット70を動かして座標指定された位置posが仮想ゲーム空間において維持されやすくなり、位置posが基準位置に戻るタイミングが遅くなる。
【0151】
また、コアユニット70とサブユニット76とを用いて、それぞれ仮想ゲーム空間における別の位置posを求めることもできる。例えば、仮想ゲーム空間にコアユニット70用の第1の基準位置および第1の座標軸と、サブユニット76用の第2の基準位置および第2の座標軸とをそれぞれ別に設定する。そして、上述した処理動作に基づいて、コアユニット70から得られるコア加速度データを用いて第1の差分ベクトルvecd1を算出し、第1の差分ベクトルvecd1の各成分値を第1の座標軸にスケーリングして座標指定する。また、上述した処理動作に基づいて、サブユニット76から得られるサブ加速度データを用いて第2の差分ベクトルvecd2を算出し、第2の差分ベクトルvecd2の各成分値を第2の座標軸にスケーリングして座標指定する。このように、コアユニット70およびサブユニット76からそれぞれ得られる加速度データから算出された差分ベクトルvecdを、別々の座標軸にスケーリングして座標指定することによって、別の位置posを求めることができる。これによって、プレイヤは、コアユニット70およびサブユニット76を操作して、2つのオブジェクトOBJをそれぞれ別の動きで動かすことも可能となる。例えば、コアユニット70およびサブユニット76を操作して、図12に示すような2つのスティックオブジェクトOBJ1およびOBJ2をそれぞれ振り下ろすような仮想演奏が可能となる。
【0152】
また、仮想ゲーム空間に設定される基準位置(xyz座標の原点)は、オブジェクトOBJの移動に応じて当該基準位置も移動させてもかまわない。例えば、図13に示したようなゲーム例の場合、プレイヤが所定の操作部72を操作することに応じて、その時点のキャラクタオブジェクトOBJの移動方向に基準位置も移動するようにしてもかまわない。これによって、仮想ゲーム空間においてキャラクタオブジェクトOBJが移動可能な範囲に制限がなくなるため、より自由度の高いゲームが可能となる。
【0153】
また、上記ステップ45の加速度変化量accvの算出においては、加速度センサ701の測定限界範囲を超えたときに、直前の加速度変化量accvを用いて新たに算出する加速度変化量accvの予測を行っている。この加速度変化量accvの予測方法は、単純に直前の加速度変化量accvに所定の減衰率を乗算して行われているため、即時性が高い。例えば、加速度センサ701から得られる加速度データを全てバッファリングしてからスプライン曲線等で補間する方法と比較すると、非常に即時性が高くバッファリングのメモリも不要となり計算処理負荷も軽くなる。
【0154】
また、上記ステップ51におけるゲームメイン処理においては、姿勢データDhに格納されているコアユニット70の静的な姿勢を用いれば、プレイヤがコアユニット70を操作している実空間において、プレイヤが当該実空間のどの方向にコアユニット70を振り動かしているのかが推定できる。例えば、上述したように、累積ベクトルvecdを用いれば、コアユニット70を動かし始めた位置を基準としたコアユニット70の位置が推定でき、厳密にはコアユニット70を基準とした位置(上面方向の位置、左側面方向の位置等)を推定できる。一方、姿勢データDhに格納されているコアユニット70の静的な姿勢は、プレイヤがコアユニット70を動かす前の静的な状態等において、コアユニット70に対して作用する重力加速度の方向を示しており、コアユニット70の本体に対する実空間の鉛直方向を示すデータとなる、したがって、差分ベクトルvecdおよび姿勢データDhに格納されているコアユニット70の静的な姿勢を用いれば、コアユニット70が実空間においてどの方向に動いた位置なのか(例えば、実空間における水平方向の位置や上下方向の位置等)を推定することができる。また、コアユニット70を操作する基本姿勢や方向(コアユニット70でモニタ2を指し示すようにその正面をモニタ2に向ける、コアユニット70を横持ちしてその側面をモニタ2に向ける等)を設定した場合、プレイヤがコアユニット70を上下方向、左右方向、前後方向等のどの方向に動かした位置なのか推定することができる。
【0155】
また、差分ベクトルvecdをさらに累積した値を仮想ゲーム空間にスケーリングして座標指定することによって、上述した態様とは異なったゲームメイン処理が可能となる。以下、図22を参照して、差分ベクトルvecdをさらに累積した値を用いてゲームメイン処理を行う場合の、ゲーム装置本体5において行われるゲーム処理の詳細を説明する。なお、図22は、当該ゲーム処理において、ゲーム装置本体5において実行されるゲーム処理の流れを示すフローチャートである。なお、図22に示すフローチャートにおいても、ゲーム処理のうち、プレイヤがコアユニット70を動かすことに応じてオブジェクトOBJを移動させる処理について説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図22でも、CPU10が実行する各ステップを「S」と略称する。
【0156】
図22において、差分ベクトルvecdを算出するまでのステップ101〜ステップ110の処理は、上述した図16におけるステップ41〜ステップ50と同様である。したがって、ステップ101〜ステップ110の処理について、詳細な説明を省略する。なお、差分ベクトルvecdをさらに累積した値(差分累積値da)を用いてゲーム処理を行う場合、図15に記載した主な各データに加えて、差分累積値daを示すデータもメインメモリに格納される。ここで、差分累積値daは、差分累積値daのX軸座標daX、差分累積値daのY軸座標daY、および差分累積値daのZ軸座標daZを含んでいる。
【0157】
ステップ110における差分ベクトルvecd算出処理の後、CPU10は、所定ボタンが押下されたか否かを判断する(ステップ111)。ここで、本実施例で説明するゲーム処理においては、コアユニット70を動かして仮想ゲーム空間におけるオブジェクトOBJを移動させる際、所定ボタン(例えば、操作部72d(Aボタン)や操作部72i(Bボタン))を押下している間のみ、その操作が有効となる。上記ステップ111においては、CPU10は、コアユニット70から出力される操作情報に含まれているコアキーデータを参照し、上記操作を有効とする所定ボタンが押下されているか否かを判定する。そして、CPU10は、所定ボタンが押下されている場合、次のステップ112に処理を進める。一方、CPU10は、所定ボタンが押下されていない場合、次のステップ113に処理を進める。
【0158】
ステップ112において、CPU10は、差分累積値daに差分ベクトルvecdの各成分値を加算して新たな差分累積値daを算出し、次のステップ113に処理を進める。例えば、CPU10は、現在メインメモリに格納されている差分累積値daのX軸座標daXおよび差分ベクトルvecdのX軸成分vecdXを参照し、当該X軸座標daXにX軸成分vecdXを加算して新たなX軸座標daXを算出して、差分累積値daを示すメインメモリのデータを更新する。また、CPU10は、現在メインメモリに格納されている差分累積値daのY軸座標daYおよび差分ベクトルvecdのY軸成分vecdYを参照し、当該Y軸座標daYにY軸成分vecdYを加算して新たなY軸座標daYを算出して、差分累積値daを示すメインメモリのデータを更新する。さらに、CPU10は、現在メインメモリに格納されている差分累積値daのZ軸座標daZおよび差分ベクトルvecdのZ軸成分vecdZを参照し、当該Z軸座標daZにZ軸成分vecdZを加算して新たなZ軸座標daZを算出して、差分累積値daを示すメインメモリのデータを更新する。
【0159】
なお、上記ステップ112の処理は、所定ボタンが押下され、かつ上記ステップ110で算出される差分ベクトルvecdが所定の条件を満たすときに行われてもかまわない。例えば、CPU10は、所定ボタンが押下され、かつ差分ベクトルvecdの大きさが所定の閾値を越えたとき、当該差分ベクトルvecdを加算して新たな差分累積値daを算出する処理を行う。具体的には、CPU10は、差分ベクトルvecdの大きさが所定の閾値を越えているとき、差分ベクトルvecdの各成分(X軸成分vecdX、Y軸成分vecdY、Z軸成分vecdZ)を差分累積値daに加算して新たな差分累積値daを算出する。これによって、累積ベクトルvecdの大きさが所定の閾値より大きいときに当該累積ベクトルvecdの各成分が差分累積値daに加算されるため、後述するゲームメイン処理においてコアユニット70に対する微小な動きがキャンセルされ、コアユニット70の動きの誤認識も防止することができる。
【0160】
ステップ113において、CPU10は、ゲームメイン処理を行い、処理を次のステップに進める。CPU10は、上記ステップ112の処理で算出されている差分累積値daを用いて、ゲームメイン処理を行う。例えば、CPU10は、差分累積値daの各座標値(X軸座標daX、Y軸座標daY、Z軸座標daZ)を仮想ゲーム空間にスケーリングして直接座標指定して、当該座標指定値を用いてゲーム処理を行う。一例として、CPU10は、差分累積値daの各座標値を、オブジェクトOBJの位置posのx軸座標posx、y軸座標posy、およびz軸座標poszにそれぞれ置き換えて座標指定して、仮想ゲーム空間位置データDgを更新する。そして、CPU10は、仮想ゲーム空間の位置posにオブジェクトOBJを配置して、ゲーム画像をモニタ2に表示することによって、一連のゲーム処理を行う。以下、図23を参照して、差分累積値daを用いたゲーム処理例を説明する。なお、図23は、図19と同様に、プレイヤがコアユニット70を動かす実空間と、モニタ2に表示される仮想ゲーム空間との関係の一例を示す図である。
【0161】
図23において、仮想ゲーム空間には、互いに直交する図19と同様のxyz軸が設定される。すなわち、コアユニット70の下面を鉛直下方向に向けた状態でコアユニット70の前面をモニタ2の正面に向けた場合、当該モニタ2に表示される仮想ゲーム空間のxyz軸と、コアユニット70に設定されたXYZ軸との位置関係は、図23に示すようにそれぞれ同じ方向となる位置関係となる。
【0162】
仮想ゲーム空間に配置されるオブジェクトOBJの位置は、xyz座標値で示され、具体的にはオブジェクトの位置pos(posx,posy,posz)で設定される。そして、差分累積値daの各座標値(X軸座標daX、Y軸座標daY、Z軸座標daZ)を仮想ゲーム空間にスケーリングして座標指定することによって、位置pos(posx,posy,posz)が設定される。例えば、位置pos(posx,posy,posz)は、それぞれ
posx=daX
posy=daY
posz=daZ
によって算出される。
【0163】
コアユニット70が実空間において静止している場合(図23において破線で示すコアユニット70)、差分ベクトルvecdが(0,0,0)となる。この場合、差分累積値daがそれまでの差分ベクトルvecdが累積された値で安定しており、例えば差分累積値da0=(da0X,da0Y,da0Z)で安定している。したがって、この状態における位置pos0は、位置pos0(pos0x,pos0y,pos0z)=(da0X,da0Y,da0Z)となるため、仮想ゲーム空間においてオブジェクトOBJがxyz軸座標の原点である基準位置以外に配置されて停止していることもある(図23において破線で示すオブジェクトOBJ)。
【0164】
その後、プレイヤが所定ボタンを押下しながらコアユニット70を上面方向(反重力方向)へ動かして当該所定ボタンを離す場合を想定する。上述したように、プレイヤがコアユニット70を上面方向へ動かして停止する場合、差分ベクトルvecd(vecdX,vecdY,vecdZ)は、図23に示すようなY軸正方向のベクトル(例えば、差分ベクトルvecd(0,+a,0))を示す。つまり、プレイヤがコアユニット70を動かす方向と同じ方向の差分ベクトルvecdが算出される。
【0165】
そして、算出されたY軸正方向の差分ベクトルvecdの各成分が差分累積値da0に加算されて、新たな差分累積値da(daX,daY,daZ)が算出される。具体的には、
daX=da0X+vecdX
daY=da0Y+vecdY
daZ=da0Z+vecdZ
となる。そして、新たな差分累積値da(daX,daY,daZ)を仮想ゲーム空間にスケーリングして座標指定することによって、位置posが位置pos0から変化する。例えば、差分ベクトルvecd(0,+a,0)が累積された新たな差分累積値daをそのまま仮想ゲーム空間のxyz軸座標値にスケーリングして座標指定することによって、位置pos0(pos0x,pos0y,pos0z)=(da0X,da0Y,da0Z)から位置pos(posx,posy,posz)=(daX,daY,daZ)に変化、すなわち位置pos0からy軸正方向に+aだけ移動した位置posが得られる。この位置posの変化に応じて、オブジェクトOBJの位置も変化するため、当該オブジェクトOBJが仮想ゲーム空間の位置pos0からy軸正方向へ移動して、モニタ2に表示される。一方、上述したようにコアユニット70に設定されたY軸正方向が仮想ゲーム空間に設定されたy軸正方向となるため、結果的にプレイヤが実空間で所定ボタンを押下しながらコアユニット70を動かす方向に、オブジェクトOBJが仮想ゲーム空間で動いてモニタ2に表示されることになる。例えば、位置posに物オブジェクトOBJを配置することによって、上述した図14を用いて説明したゲーム例の実現が可能となる。この場合、プレイヤがコアユニット70の所定ボタンを押下している間のみ操作が有効となってその位置に物オブジェクトOBJが停止するため、プレイヤの意図に応じた任意の位置に物オブジェクトOBJを移動させやすくなる。
【0166】
この本願の実施例の処理動作では、位置posを求めるために差分ベクトルvecdを累積した値(差分累積値da)を用いている。ここで、差分ベクトルvecdは、コアユニット70が実空間において移動する速度を模して変化するパラメータである。そして、差分累積値daは、差分ベクトルvecdを累積した値であることから、コアユニット70の速度を積分したような値であり、コアユニット70が実空間において移動する相対位置を模して変化するパラメータである。このように、プレイヤがコアユニット70を動かし始めた位置を基準としたコアユニット70の位置として差分ベクトルvecdを算出し、当該差分ベクトルvecdを累積した値を仮想ゲーム空間にスケーリングして座標指定することによって、コアユニット70の実空間上の相対位置に応じた仮想ゲーム空間上の位置が指定可能となる。
【0167】
なお、上述した処理では、プレイヤがコアユニット70の所定ボタンを押下している間のみ操作が有効となる一例を示したが、所定ボタンの押下とは無関係に当該操作を常に有効としてもかまわない。この場合、差分ベクトルvecdの大きさが0となるまでの期間は、常に差分累積値daが更新されることになり、結果として位置posも移動し続ける。したがって、モニタ2に表示された物オブジェクトOBJやカーソル等を仮想ゲーム空間内で移動させ続けることができ、モニタ2に表示された画面をスクロールするような操作も可能となる。また、所定ボタンの押下とは無関係に常に更新される差分累積値daは、実空間におけるコアユニット70の位置やコアユニット70が指し示している方向を示すパラメータとして用いることができ、上述した撮像情報演算部74による位置指定操作の補助的な利用も可能である。
【0168】
図22に戻り、CPU10は、上記ステップ113のゲームメイン処理の後、ゲームを終了するか否かを判断する(ステップ114)。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。CPU10は、ゲームを終了しない場合に上記ステップ103に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。
【0169】
このように、差分ベクトルvecdにしたがって決められる値(例えば、差分ベクトルvecdの各軸成分値や差分ベクトルvecdの各軸成分値を累積した差分累積値da)は、コアユニット70やサブユニット76の動かし始めからの実空間における3次元位置として用いることができる。そして、差分ベクトルvecdにしたがって決められる値をスケーリングして仮想世界における位置posとして指定するため、安価な加速度センサから得られる出力値を用いた正確な位置指定が可能となる。
【0170】
なお、上述した処理では、コアユニット70やサブユニット76の動きを3次元ベクトルで認識し、位置posを3次元座標値でスケーリングして座標指定しているが、2次元や1次元で処理することも可能である。例えば、図19や図23で示される仮想ゲーム空間を、xy座標系で座標指定される2次元の仮想ゲーム世界とする。そして、上述した処理動作をXおよびY成分のみを用いて行えば、XY平面に沿ったコアユニット70やサブユニット76の動きを2次元ベクトルで認識して、xy座標系にスケーリングした座標指定が可能となる。また、上記仮想ゲーム空間や仮想ゲーム世界において、例えば一方向のみで座標指定されるx軸座標系を設定する。そして、上述した処理動作をX成分のみを用いて行えば、X軸に沿ったコアユニット70やサブユニット76の動きを1次元の値で認識して、x軸座標系にスケーリングした座標指定が可能となる。
【0171】
また、2軸方向や1軸方向のみの加速度を検出する加速度センサを用いても本発明を実現することができる。例えば、X軸およびY軸方向(図4、図5、図8参照)に対して生じる加速度を検出する加速度センサがコアユニット70やサブユニット76に設けられている場合、上述した処理動作をXおよびY成分のみを用いて行えば、XY平面に沿ったコアユニット70やサブユニット76の動きを認識することが可能である。また、Y軸成分のみ検出して出力する加速度センサを用いても、上述した処理動作をY成分のみを用いて行えば、Y軸方向へのコアユニット70やサブユニット76の動きを認識することが可能である。
【0172】
また、上述した実施例では、差分ベクトルvecdにしたがって決められる値をそのまま仮想ゲーム空間の座標値としてスケーリングして座標指定する一例を用いているが、任意の関数等を用いて仮想ゲーム空間の座標指定をしてもかまわない。例えば、差分ベクトルvecdにしたがって決められる値に所定の係数を四則演算(加算・減算・乗算・除算)して、仮想ゲーム空間の座標系に適当なスケーリングを行うことによって、位置posを座標指定してもかまわない。
【0173】
また、上述した説明では、コアユニット70やサブユニット76を動かす動作に応じた処理を行う据置型のゲーム装置本体5に本願発明を適用した例を説明したが、携帯ゲーム装置にも適用することができる。例えば、携帯ゲーム装置の本体に加速度センサを搭載し、実空間において当該本体を動かすときに、当該加速度センサの出力を用いて携帯ゲーム装置の表示画面に表示された仮想ゲーム空間に対する座標指定を行う。このように本願発明を適用することで、携帯ゲーム装置等でゲームを行うには好適である。
【0174】
また、上述した説明では、据置型や携帯型のゲーム装置に本願発明を適用した例を説明したが、加速度センサを備えた入力装置によって操作される一般的なパーソナルコンピュータ等の情報処理装置や加速度センサが搭載された本体を有する情報処理装置にも適用することができる。例えば、前者の情報処理装置では、入力装置の加速度センサから出力される加速度データに応じて、情報処理装置が表示しているオブジェクトやウインドウの状態や位置を制御したり、画面スクロールしたりする等、入力装置に生じる加速度に基づいて様々な処理を行うことができる。また、後者の情報処理装置は、本体に加わる加速度を検出する加速度センサを搭載し、当該加速度センサから出力される加速度データに応じた処理を実行する情報処理装置であればよく、例えば一般的なパーソナルコンピュータ、携帯電話機、PDA(Personal Digital Assistant)等のデバイスにも適用することができる。
【0175】
例えば、後者の情報処理装置の一例として、他の電話機との間で無線通信する通信部を備えた携帯電話機の場合には、携帯電話機本体に加速度センサが搭載される。そして、実空間において携帯電話機の本体を動かすときに、携帯電話機に搭載された加速度センサからの出力値を用いて携帯電話機の表示画面に表示された空間やワークエリア等の平面に対する座標指定を行う。このように本願発明を適用することで、携帯電話機等でゲームや操作を行うには好適である。
【0176】
また、上述した説明では、コアユニット70およびサブユニット76とゲーム装置本体5とが無線通信によって接続された態様を用いたが、コアユニット70またはサブユニット76とゲーム装置本体5とがケーブルを介して電気的に接続されてもかまわない。この場合、コアユニット70またはサブユニット76に接続されたケーブルをゲーム装置本体5の接続端子に接続する。
【0177】
また、上述したコアユニット70およびサブユニット76の形状や、それらに設けられている操作部72の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。
【0178】
また、本発明の情報処理プログラムやゲームプログラムは、光ディスク4等の外部記憶媒体を通じてゲーム装置本体5に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置本体5に供給されてもよい。また、情報処理プログラムやゲームプログラムは、ゲーム装置本体5内部の不揮発性記憶装置に予め記録されていてもよい。なお、情報処理プログラムやゲームプログラムを記憶する情報記憶媒体としては、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体の他に、不揮発性半導体メモリでもよい。
【0179】
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示にすぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
【産業上の利用可能性】
【0180】
本発明に係る情報処理プログラムおよび情報処理装置は、安価な加速度センサから出力される加速度データを用いて座標指定することができ、ゲームコントローラ等の入力装置に与えられる動作に応じてゲーム処理や情報処理等を行うプログラムおよび装置や、本体等の筐体に与えられる動作に応じてゲーム処理や情報処理等を行うプログラムおよび装置として有用である。
【図面の簡単な説明】
【0181】
【図1】本発明の一実施形態に係るゲームシステム1を説明するための外観図
【図2】図1のゲーム装置本体5の機能ブロック図
【図3】図1のコントローラ7の外観構成を示す斜視図
【図4】図3のコアユニット70の上面後方から見た斜視図
【図5】図4のコアユニット70を下面前方から見た斜視図
【図6】図3のコアユニット70の上筐体を外した状態を示す斜視図
【図7】図5のコアユニット70の下筐体を外した状態を示す斜視図
【図8】サブユニット76の一例を示す斜視図
【図9】図8のサブユニット76の上筐体を外した状態を示す斜視図
【図10】図3のコントローラ7の構成を示すブロック図
【図11】図3のコントローラ7を用いてゲーム操作するときの状態を概説する図解図
【図12】コントローラ7の動きに応じて行われる処理の第1の例を示す図
【図13】コントローラ7の動きに応じて行われる処理の第2の例を示す図
【図14】コントローラ7の動きに応じて行われる処理の第3の例を示す図
【図15】ゲーム装置本体5のメインメモリに記憶される主なデータを示す図
【図16】ゲーム装置本体5において実行されるゲーム処理の流れを示すフローチャート
【図17】図16におけるステップ44のコントローラの姿勢算出処理の詳細な動作を示すサブルーチン
【図18】図16におけるステップ45の加速度変化量を算出する処理の詳細な動作を示すサブルーチン
【図19】プレイヤがコアユニット70を動かす実空間と、モニタ2に表示される仮想ゲーム空間との関係の一例を示す図
【図20】プレイヤがコアユニット70を静止状態から上に動かした際のY軸方向に対する各パラメータの変化例を示す図
【図21】プレイヤがコアユニット70を動かし続けた際のY軸方向に対する各パラメータの変化例を示す図
【図22】ゲーム装置本体5において実行されるゲーム処理の流れの他の例を示すフローチャート
【図23】プレイヤがコアユニット70を動かす実空間と、モニタ2に表示される仮想ゲーム空間との関係の他の例を示す図
【符号の説明】
【0182】
1…ゲームシステム
2…モニタ
2a、706…スピーカ
3…ゲーム装置
4…光ディスク
5…ゲーム装置本体
10…CPU
11…システムLSI
12…外部メインメモリ
13…ROM/RTC
14…ディスクドライブ
15…AV−IC
16…AVコネクタ
17…フラッシュメモリ
18…無線通信モジュール
19…無線コントローラモジュール
20…拡張コネクタ
21…外部メモリカード用コネクタ
22、23…アンテナ
24…電源ボタン
25…リセットボタン
26…イジェクトボタン
31…入出力プロセッサ
32…GPU
33…DSP
34…VRAM
35…内部メインメモリ
7…コントローラ
70…コアユニット
71、77…ハウジング
72、78…操作部
73、791…コネクタ
74…撮像情報演算部
741…赤外線フィルタ
742…レンズ
743…撮像素子
744…画像処理回路
75…通信部
751…マイコン
752…メモリ
753…無線モジュール
754…アンテナ
700…基板
701、761…加速度センサ
702…LED
704…バイブレータ
707…サウンドIC
708…アンプ
76…サブユニット
79…接続ケーブル
8…マーカ

【特許請求の範囲】
【請求項1】
所定の筐体に加わる少なくとも1軸方向の加速度を検出する加速度センサから出力される加速度データを用いた処理を実行する情報処理装置のコンピュータに実行させる情報処理プログラムであって、
前記コンピュータを、
前記加速度データを繰り返し取得する加速度データ取得手段と、
前記加速度データ取得手段が取得した加速度データが示す加速度の大きさおよび方向を示す加速度ベクトルを順次累積して、累積ベクトルを算出する累積ベクトル算出手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記累積ベクトル算出手段が算出する累積ベクトルに所定の割合で追従する追従ベクトルを算出する追従ベクトル算出手段と、
前記累積ベクトルと前記追従ベクトルとの差分を差分ベクトルとして算出する差分ベクトル算出手段と、
前記差分ベクトルにしたがって決められる値を用いて表示装置に表示される仮想世界における位置を指定し、当該位置を用いて所定の処理を行う処理手段として機能させる、情報処理プログラム。
【請求項2】
前記処理手段は、前記差分ベクトルの各軸成分値を仮想世界の前記位置として指定し、当該位置を用いて所定の処理を行う、請求項1に記載の情報処理プログラム。
【請求項3】
前記差分ベクトル算出手段が算出した前記差分ベクトルの各軸成分値を、それぞれ順次累積して差分累積値を算出する差分累積値算出手段として、さらに前記コンピュータを機能させ、
前記処理手段は、前記差分累積値算出手段が算出した差分累積値を仮想世界の前記位置として指定し、当該位置を用いて所定の処理を行う、請求項1に記載の情報処理プログラム。
【請求項4】
前記累積ベクトル算出手段は、前記累積ベクトルに前記加速度ベクトルを加算する前または後に逐次前記累積ベクトルを減衰させる減衰処理手段を含む、請求項2または3に記載の情報処理プログラム。
【請求項5】
前記処理手段は、前記差分ベクトル算出手段が算出した差分ベクトルの大きさが所定の閾値を超えたとき、当該差分ベクトルの各軸成分値を仮想世界の前記位置として指定し、当該位置を用いて所定の処理を行う、請求項2に記載の情報処理プログラム。
【請求項6】
前記差分累積値算出手段は、前記差分ベクトル算出手段が算出した差分ベクトルの大きさが所定の閾値を超えたとき、当該差分ベクトルの各軸成分値を、それぞれ順次累積して前記差分累積値を算出する、請求項3に記載の情報処理プログラム。
【請求項7】
前記加速度センサは、検出する加速度の大きさが所定の測定可能範囲内で検出可能であり、
前記情報処理プログラムは、
前記加速度データ取得手段が取得した加速度データが示す加速度の大きさが前記測定可能範囲内の値であるとき、前記加速度データ取得手段が取得した加速度データを用いて、加速度の変化量を示す変化量ベクトルを算出する変化量ベクトル算出手段と、
前記加速度データ取得手段が取得した加速度データが示す加速度の大きさが前記測定可能範囲を超える値であるとき、前回算出された変化量ベクトルから所定量減じることによって新たな変化量ベクトルを算出し、前記累積ベクトル算出手段が前回用いた加速度ベクトルに当該新たな変化量ベクトルを加算して予測加速度ベクトルを算出する予測加速度ベクトル算出手段として、さらに前記コンピュータを機能させ、
前記加速度データ取得手段が取得した加速度データが示す加速度の大きさおよび方向を示す加速度ベクトルの大きさが前記測定可能範囲を超える値であるとき、前記累積ベクトル算出手段は、前記累積ベクトルに前記予測加速度ベクトルを累積して新たな累積ベクトルを算出する、請求項2または3に記載の情報処理プログラム。
【請求項8】
前記処理手段が行う所定の処理は、指定する仮想世界における前記位置に所定のオブジェクトを配置し、当該位置の移動に応じて当該オブジェクトを仮想世界で移動させる処理である、請求項2または3に記載の情報処理プログラム。
【請求項9】
前記処理手段は、前記差分ベクトルの各軸成分値を、仮想世界に設定した座標系の各座標値にそれぞれ対応させることによって前記位置として指定し、
前記処理手段は、所定の条件を満たすとき、仮想世界に設定された前記座標系の原点を当該仮想世界において移動させる、請求項2に記載の情報処理プログラム。
【請求項10】
前記加速度データ取得手段は、第1および第2の筐体によって構成される入力装置において、当該第1および第2の筐体それぞれに搭載された第1および第2の加速度センサから出力される第1および第2の加速度データをそれぞれ繰り返し取得し、
前記累積ベクトル算出手段は、前記第1の加速度データが示す加速度の大きさおよび方向を示す第1の加速度ベクトルおよび前記第2の加速度データが示す加速度の大きさおよび方向を示す第2の加速度ベクトルを順次それぞれ累積して、第1の累積ベクトルおよび第2の累積ベクトルをそれぞれ算出し、
前記追従ベクトル算出手段は、前記第1の加速度データを用いて、前記第1の累積ベクトルに所定の割合で追従する第1の追従ベクトルを算出し、前記第2の加速度データを用いて、前記第2の累積ベクトルに所定の割合で追従する第2の追従ベクトルを算出し、
前記差分ベクトル算出手段は、前記第1の累積ベクトルと前記第1の追従ベクトルとの差分を第1の差分ベクトルとして算出し、前記第2の累積ベクトルと前記第2の追従ベクトルとの差分を第2の差分ベクトルとして算出し、
前記処理手段は、前記第1の差分ベクトルの各軸成分値を仮想世界に設定した第1の座標系の各座標値にそれぞれ対応させることによって第1の位置を指定し、前記第2の差分ベクトルの各軸成分値を仮想世界に設定した前記第1の座標系とは異なる第2の座標系の各座標値にそれぞれ対応させることによって第2の位置を指定し、
前記処理手段が行う所定の処理は、前記第1の位置に第1のオブジェクトを配置し、前記第2の位置に第2のオブジェクトを配置して、当該第1の位置および第2の位置の移動に応じてそれぞれのオブジェクトを仮想世界で移動させる処理である、請求項2に記載の情報処理プログラム。
【請求項11】
前記筐体は、ユーザが押下することに応じて所定の操作データを出力する操作ボタンが設けられ、
前記操作データを繰り返し取得する操作データ取得手段として、さらに前記コンピュータを機能させ、
前記差分累積値算出手段は、所定の操作ボタンが押下されたことを示す前記操作データが取得されている期間中にのみ、前記差分ベクトルの各軸成分値を、それぞれ順次累積する、請求項3に記載の情報処理プログラム。
【請求項12】
所定の筐体に加わる少なくとも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

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate


【公開番号】特開2009−3651(P2009−3651A)
【公開日】平成21年1月8日(2009.1.8)
【国際特許分類】
【出願番号】特願2007−163022(P2007−163022)
【出願日】平成19年6月20日(2007.6.20)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】