説明

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

【課題】入力装置に生じた加速度を用いて当該入力装置が振られた方向を精確に判別することができる情報処理プログラムおよび情報処理装置を提供する。
【解決手段】データ取得手段は、加速度データを繰り返し取得する。加速度ベクトル生成手段は、データ取得手段が取得した第1加速度データに基づいて第1加速度ベクトルを生成し、当該第1加速度データに対してデータ取得手段が時系列的に取得した第2加速度データに基づいて第2加速度ベクトルを生成する。外積方向算出手段は、第1加速度ベクトルと第2加速度ベクトルとの外積の向きを算出する。振り方向判別手段は、外積の向きに基づいて、入力装置の振り方向を判別する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理プログラムおよび情報処理装置に関し、特に例えば、入力装置に対する少なくとも2軸方向の加速度をそれぞれ検出する加速度検出部から出力される加速度データを処理するための情報処理プログラムおよび情報処理装置に関する。
【背景技術】
【0002】
従来、ゲームに用いられる棒状の入力装置の移動方向を検出するために、当該入力装置に加速度センサが搭載されているゲーム装置の入力制御装置が知られている(例えば、特許文献1参照)。そして、上記ゲーム装置では、上記入力装置をユーザが把持して振った方向を判別し、当該方向に応じてゲーム処理が行われる。例えば、上記入力装置が振られている状態において当該入力装置に生じた加速度から、重力加速度成分を取り除いた並進加速度を用いて、上記入力装置が振られた方向を判別することが考えられる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2000−308756号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
ここで、上記入力装置における並進加速度を取得するためには、当該入力装置に作用している重力加速度を抽出する必要がある。しかしながら、上記入力装置に生じる加速度は、並進加速度と重力加速度とが合算された値となっているため、重力加速度成分のみを精確に算出することが容易ではなく、ある程度の推定要素が含まれてしまう。したがって、上記入力装置に生じた加速度から、推定によって得られた重力加速度成分を取り除いて得られた並進加速度についても、精確に得ることが困難となるため、結果的に上記入力装置が振られた方向の判別結果についても精度が悪くなってしまうことがある。
【0005】
それ故に、本発明の目的は、入力装置に生じた加速度を用いて当該入力装置が振られた方向を精確に判別することができる情報処理プログラムおよび情報処理装置を提供することである。
【課題を解決するための手段】
【0006】
上記目的を達成するために、本発明は、以下に述べるような特徴を有している。
【0007】
本発明は、入力装置に対する少なくとも2軸方向の加速度をそれぞれ検出する加速度センサから出力される加速度データを用いた処理を行う情報処理装置のコンピュータで実行される情報処理プログラムである。情報処理プログラムは、データ取得手段、加速度ベクトル生成手段、外積方向算出手段、および振り方向判別手段として、コンピュータを機能させる。データ取得手段は、加速度データを繰り返し取得する。加速度ベクトル生成手段は、データ取得手段が取得した第1加速度データに基づいて第1加速度ベクトルを生成し、当該第1加速度データに対してデータ取得手段が時系列的に取得した第2加速度データに基づいて第2加速度ベクトルを生成する。外積方向算出手段は、第1加速度ベクトルと第2加速度ベクトルとの外積の向きを算出する。振り方向判別手段は、外積の向きに基づいて、入力装置の振り方向を判別する。
【0008】
上記によれば、入力装置の振り方向が加速度ベクトルの外積の向きを用いて判別されるため、入力装置に生じた加速度を用いて当該入力装置が振られた方向を精確に判別することができる。
【0009】
また、振り方向判別手段は、外積の向きが第1の方向か、当該第1の方向と逆方向の第2の方向であるかに基づいて、入力装置の振り方向を判別してもよい。
【0010】
また、振り方向判別手段は、外積の向きが第1の方向である場合、入力装置の振り方向が第3の方向であると判別し、外積の向きが第2の方向である場合には、入力装置の振り方向が当該第3の方向とは逆方向となる第4の方向であると判別してもよい。
【0011】
上記によれば、外積の向きが満たしている条件によって、入力装置が振られた方向を容易に判別することができる。
【0012】
また、外積方向算出手段は、外積値算出手段を含んでいてもよい。外積値算出手段は、第1加速度ベクトルと第2加速度ベクトルとの外積の所定方向の成分を示す外積値を算出する。この場合、振り方向判別手段は、外積値に基づいて、入力装置の振り方向を判別してもよい。
【0013】
また、振り方向判別手段は、外積値が正か負かに基づいて、入力装置の振り方向を判別してもよい。
【0014】
上記によれば、外積値が満たしている条件によって、入力装置が振られた方向を容易に判別することができる。
【0015】
また、外積方向算出手段は、外積値算出手段、第1閾値判定手段、および第2閾値判定手段を含んでいてもよい。外積値算出手段は、第1加速度ベクトルと第2加速度ベクトルとの外積の所定方向の成分を示す外積値を算出する。第1閾値判定手段は、外積値が、負の値で予め設定された第1閾値未満であるか否かを判定する。第2閾値判定手段は、正の値で、かつ、第1閾値とは絶対値が異なる第2閾値より、外積値が大きいか否かを判定する。この場合、振り方向判別手段は、外積値が第1閾値未満であると第1閾値判定手段が判定した場合に入力装置の振り方向が第3の方向であると判別し、外積値が第2閾値より大きいと第2閾値判定手段が判定した場合に入力装置の振り方向が第4の方向であると判別してもよい。
【0016】
上記によれば、第1閾値および第2閾値の絶対値の大きさによって、入力装置の振り方向毎に当該振り方向が判定されるレスポンスを調整することができる。
【0017】
また、振り方向判別手段は、外積値が第1閾値以上であると第1閾値判定手段が判定し、かつ、当該外積値が第2閾値以下であると第2閾値判定手段が判定した場合、入力装置が振られていないと判断してもよい。
【0018】
上記によれば、加速度センサが検出した加速度に対するノイズの影響を除外すると共に、加速度が閾値付近で推移している場合に振り方向の判別結果が頻繁に切り換わることを防止することができる。
【0019】
また、加速度センサは、入力装置に対する少なくとも3軸方向の加速度をそれぞれ検出して、当該加速度に応じた加速度データを出力してもよい。加速度ベクトル生成手段は、3軸を座標軸とする空間に所定の射影平面を設定し、当該空間内に配置した第1加速度データが示す第1加速度および第2加速度データが示す第2加速度をそれぞれ当該射影平面に射影することによって第1加速度ベクトルおよび第2加速度ベクトルをそれぞれ生成してもよい。
【0020】
上記によれば、所定の射影平面に射影した加速度ベクトルを用いることによって、当該加速度ベクトルの推移の分析を精確に行うことができる。
【0021】
また、加速度センサは、入力装置に対する少なくとも3軸方向の加速度をそれぞれ検出して、当該加速度に応じた加速度データを出力してもよい。加速度ベクトル生成手段は、3軸を座標軸とする空間に、第3の方向および第4の方向に振られる入力装置において想定される振りの回転軸に対して非平行に射影平面を設定し、当該空間内に配置した第1加速度データが示す第1加速度および第2加速度データが示す第2加速度をそれぞれ当該射影平面に射影することによって第1加速度ベクトルおよび第2加速度ベクトルをそれぞれ生成してもよい。
【0022】
また、加速度ベクトル生成手段は、空間において回転軸に対して実質的に垂直に射影平面を設定してもよい。
【0023】
上記によれば、入力装置において想定される振りの回転軸に対して平行とならない位置に射影平面を設定することによって、当該加速度ベクトルの推移の分析をさらに精確に行うことができる。
【0024】
また、加速度センサは、入力装置に対する少なくとも3軸方向の加速度をそれぞれ検出して、当該加速度に応じた加速度データを出力してもよい。入力装置が第3の方向に振られた場合に3軸を座標軸とする空間で描かれる加速度センサが検出する加速度の軌跡は、所定の平面に射影された場合に実質的に円形状で描かれてもよい。入力装置が第4の方向に振られた場合に空間で描かれる加速度センサが検出する加速度の軌跡は、所定の平面に射影された場合に実質的に円形状で入力装置が第3の方向に振られた場合に得られる軌跡の時系列的な方向とは逆方向で描かれてもよい。この場合、加速度ベクトル生成手段は、所定の平面に対して実質的に非垂直に射影平面を設定し、当該空間内に配置した第1加速度データが示す第1加速度および第2加速度データが示す第2加速度をそれぞれ当該射影平面に射影することによって第1加速度ベクトルおよび第2加速度ベクトルをそれぞれ生成してもよい。
【0025】
また、加速度ベクトル生成手段は、所定の平面に対して実質的に平行に射影平面を設定してもよい。
【0026】
上記によれば、想定される加速度の軌跡形状に対して実質的に垂直とならない位置に射影平面を設定することによって、当該加速度ベクトルの推移の分析をさらに精確に行うことができる。
【0027】
また、加速度ベクトル生成手段は、第1加速度における3軸方向成分のうち2軸方向の成分を射影平面上に射影した値と他の1軸方向の成分の値とを用いて第1加速度ベクトルを生成し、第2加速度における当該2軸方向の成分を射影平面上に射影した値と第2加速度における当該他の1軸方向の成分の値とを用いて第2加速度ベクトルを生成してもよい。
【0028】
上記によれば、所定の射影平面に3軸方向のうち2軸方向の成分を射影した加速度ベクトルを用いることによって、当該加速度ベクトルの推移の分析を精確に行うことができる。
【0029】
また、上記情報処理プログラムは、角度算出手段および表示制御手段として、さらにコンピュータを機能させてもよい。角度算出手段は、外積値算出手段によって算出された外積値に基づいて、振り方向判別手段が判別する振り方向に対する角度を算出する。表示制御手段は、角度算出手段が算出した角度に応じて、仮想世界におけるオブジェクトを当該角度に基づいて配置して表示装置に表示する。
【0030】
上記によれば、入力装置の振り方向を判別するための加速度ベクトルの外積値を用いて、当該方向に対する角度も算出することができる。
【0031】
また、角度算出手段は、外積値算出手段によって算出された外積値に基づいて、振り方向判別手段が判別する振り方向に対する角速度を算出し、当該角速度に基づいて角度を算出してもよい。
【0032】
上記によれば、入力装置の振り方向を判別するための加速度ベクトルの外積値を用いて、当該方向に対する角速度を算出することによって、当該方向に対する角度を容易に算出することができる。
【0033】
また、角度算出手段は、外積値算出手段によって算出された外積値に基づいて、振り方向判別手段が判別する振り方向に対する角加速度を算出し、当該角加速度に基づいて角速度を算出してもよい。
【0034】
上記によれば、入力装置の振り方向を判別するための加速度ベクトルの外積値を用いて、当該方向に対する角加速度を算出することによって、当該方向に対する角速度を容易に算出することができる。
【0035】
また、本発明は、情報処理装置の形態で実施されてもよい。
【発明の効果】
【0036】
本発明によれば、入力装置の振り方向が加速度ベクトルの外積値を用いて判別されるため、入力装置に生じた加速度を用いて当該入力装置が振られた方向を精確に判別することができる。
【図面の簡単な説明】
【0037】
【図1】本発明の一実施形態に係るゲームシステム1を説明するための外観図
【図2】図1のゲーム装置本体5の機能ブロック図
【図3】図1のコントローラ7の上面後方から見た斜視図
【図4】図3のコントローラ7を下面前方から見た斜視図
【図5】図3のコントローラ7の上筐体を外した状態を示す斜視図
【図6】図4のコントローラ7の下筐体を外した状態を示す斜視図
【図7】図3のコントローラ7の構成を示すブロック図
【図8】図1のコントローラ7を用いてゲーム操作するときの状態の一例を概説する図解図
【図9】図1のモニタ2に表示されるゲーム画像の一例を示す図
【図10】図1のモニタ2に表示されるゲーム画像の他の例を示す図
【図11】プレイヤが図8のコントローラ7を振り上げた際に生じる加速度の軌跡の一例を示す図
【図12】図11の加速度ベクトルのXZ軸成分を射影する射影平面の一例を示す図
【図13】プレイヤが図8のコントローラ7を振り上げた際に算出される加速度射影ベクトルの一例を示す図
【図14】図1のゲーム装置本体5のメインメモリに記憶される主なデータおよびプログラムの一例を示す図
【図15】図1のゲーム装置本体5において実行されるゲーム処理の一例を示すフローチャート
【図16】図15におけるステップ43の外積値算出処理の一例を示すサブルーチン
【図17】図15におけるステップ46のクラブ角度算出処理の一例を示すサブルーチン
【図18】図17におけるステップ82の動的な角加速度算出処理の一例を示すサブルーチン
【図19】図17におけるステップ83の静的な角加速度算出処理の一例を示すサブルーチン
【発明を実施するための形態】
【0038】
図1を参照して、本発明の一実施形態に係る情報処理プログラムを実行する情報処理装置について説明する。以下、説明を具体的にするために、当該情報処理装置の一例として据置型のゲーム装置本体5を用い、ゲーム装置本体5を含むゲームシステムについて説明する。なお、図1は、据置型のゲーム装置3を含むゲームシステム1の一例を示す外観図である。図2は、ゲーム装置本体5の一例を示すブロック図である。以下、当該ゲームシステム1について説明する。
【0039】
図1において、ゲームシステム1は、表示手段の一例である家庭用テレビジョン受像機(以下、モニタと記載する)2と、モニタ2に接続コードを介して接続する据置型のゲーム装置3とから構成される。モニタ2は、ゲーム装置3から出力された音声信号を音声出力するためのスピーカ2aを備える。また、ゲーム装置3は、本願発明の情報処理プログラムの一例となるプログラム(例えば、ゲームプログラム)を記録した光ディスク4と、光ディスク4のプログラムを実行してゲーム画面をモニタ2に表示出力させるためのコンピュータを搭載したゲーム装置本体5と、ゲーム画面に表示されたキャラクタ等を操作するゲームに必要な操作情報をゲーム装置本体5に与えるためのコントローラ7とを備えている。
【0040】
ゲーム装置本体5は、無線コントローラモジュール19(図2参照)を内蔵する。無線コントローラモジュール19は、コントローラ7から無線送信されるデータを受信し、ゲーム装置本体5からコントローラ7へデータを送信して、コントローラ7とゲーム装置本体5とを無線通信によって接続する。また、ゲーム装置本体5には、ゲーム装置本体5に対して交換可能に用いられる情報記憶媒体の一例である光ディスク4が脱着される。
【0041】
ゲーム装置本体5には、セーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ17(図2参照)が搭載される。ゲーム装置本体5は、光ディスク4に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ2に表示する。ゲームプログラム等は、光ディスク4に限らず、フラッシュメモリ17に予め記録されたものを実行するようにしてもよい。また、ゲーム装置本体5は、フラッシュメモリ17に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置3のプレイヤは、モニタ2に表示されたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
【0042】
コントローラ7は、無線コントローラモジュール19を内蔵するゲーム装置本体5へ、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて操作情報等の送信データを無線送信する。コントローラ7は、主にモニタ2の表示画面に表示されるプレイヤオブジェクト等を操作するための操作手段である。コントローラ7は、片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン(十字キーやスティック等を含む)とが設けられている。また、後述により明らかとなるが、コントローラ7は、コントローラ7から見た画像を撮像する撮像情報演算部74を備えている。そして、撮像情報演算部74の撮像対象の一例として、モニタ2の表示画面近傍に2つのLEDモジュール(以下、マーカと記載する)8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって例えば赤外光を出力する。また、コントローラ7は、ゲーム装置本体5の無線コントローラモジュール19から無線送信された送信データを通信部75で受信して、当該送信データに応じた音や振動を発生させることもできる。
【0043】
次に、図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等を有する。
【0044】
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に読み出したデータを書き込む。
【0045】
システムLSI11には、入出力プロセッサ31、GPU(Graphics Processor Unit)32、DSP(Digital Signal Processor)33、VRAM(Video RAM)34、および内部メインメモリ35が設けられる。図示は省略するが、これらの構成要素31〜35は、内部バスによって互いに接続される。
【0046】
GPU32は、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM34は、GPU32がグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU32は、VRAM34に記憶されたデータを用いて画像データを作成する。
【0047】
DSP33は、オーディオプロセッサとして機能し、内部メインメモリ35や外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。
【0048】
上述のように生成された画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、AVコネクタ16を介して、読み出した画像データをモニタ2に出力するとともに、読み出した音声データをモニタ2に内蔵されるスピーカ2aに出力する。これによって、画像がモニタ2に表示されるとともに音がスピーカ2aから出力される。
【0049】
入出力プロセッサ(I/Oプロセッサ)31は、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ31は、フラッシュメモリ17、無線通信モジュール18、無線コントローラモジュール19、拡張コネクタ20、および外部メモリカード用コネクタ21に接続される。無線通信モジュール18にはアンテナ22が接続され、無線コントローラモジュール19にはアンテナ23が接続される。
【0050】
入出力プロセッサ31は、無線通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ31は、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール18およびアンテナ22を介して当該データをネットワークに送信する。また、入出力プロセッサ31は、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22、および無線通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10は、ゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置本体5と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置本体5を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。
【0051】
入出力プロセッサ31は、アンテナ23および無線コントローラモジュール19を介して、コントローラ7から送信される操作データ等を受信し、内部メインメモリ35または外部メインメモリ12のバッファ領域に記憶(一時記憶)する。なお、内部メインメモリ35には、外部メインメモリ12と同様に、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりしてもよく、CPU10のワーク領域やバッファ領域として用いられてもかまわない。
【0052】
入出力プロセッサ31には、拡張コネクタ20および外部メモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール18に替えてネットワークとの通信を行ったりすることができる。外部メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ31は、拡張コネクタ20や外部メモリカード用コネクタ21を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【0053】
ゲーム装置本体5(例えば、前部主面)には、当該ゲーム装置本体5の電源ボタン24、ゲーム処理のリセットボタン25、光ディスク4を脱着する投入口、およびゲーム装置本体5の投入口から光ディスク4を取り出すイジェクトボタン26等が設けられている。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、ゲーム装置本体5の各構成要素に対して、図示しないACアダプタを介して電力が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置本体5の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
【0054】
図3および図4を参照して、コントローラ7について説明する。なお、図3は、コントローラ7の上面後方から見た一例を示す斜視図である。図4は、コントローラ7を下面前方から見た一例を示す斜視図である。
【0055】
図3および図4において、コントローラ7は、例えばプラスチック成型によって形成されたハウジング71を有しており、当該ハウジング71に複数の操作部72が設けられている。ハウジング71は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【0056】
ハウジング71上面の中央前面側に、十字キー72aが設けられる。この十字キー72aは、十字型の4方向プッシュスイッチであり、4つの方向(前後左右)に対応する操作部分が十字の突出片にそれぞれ90°間隔で配置される。プレイヤが十字キー72aのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー72aを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
【0057】
なお、十字キー72aは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に4つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記4つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、4つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング71上面から突出した傾倒可能なスティック(いわゆる、ジョイスティック)を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を十字キー72aの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー72aの代わりに設けてもかまわない。また、タッチパッドを、十字キー72aの代わりに設けてもかまわない。
【0058】
ハウジング71上面の十字キー72aより後面側に、複数の操作ボタン72b〜72gが設けられる。操作ボタン72b〜72gは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン72b〜72gに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン72b〜72dには、1番ボタン、2番ボタン、およびAボタン等としての機能が割り当てられる。また、操作ボタン72e〜72gには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン72a〜72gは、ゲーム装置本体5が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図3に示した配置例では、操作ボタン72b〜72dは、ハウジング71上面の中央前後方向に沿って並設されている。また、操作ボタン72e〜72gは、ハウジング71上面の左右方向に沿って操作ボタン72bおよび72dの間に並設されている。そして、操作ボタン72fは、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0059】
ハウジング71上面の十字キー72aより前面側に、操作ボタン72hが設けられる。操作ボタン72hは、遠隔からゲーム装置本体5の電源をオン/オフする電源スイッチである。この操作ボタン72hも、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0060】
ハウジング71上面の操作ボタン72cより後面側に、複数のLED702が設けられる。ここで、コントローラ7は、他のコントローラ7と区別するためにコントローラ種別(番号)が設けられている。例えば、LED702は、コントローラ7に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、無線コントローラモジュール19からコントローラ7へ、複数のLED702のうち、上記コントローラ種別に対応するLEDを点灯させるための信号が送信される。
【0061】
また、ハウジング71上面には、操作ボタン72bおよび操作ボタン72e〜72gの間に後述するスピーカ(図5に示すスピーカ706)からの音を外部に放出するための音抜き孔が形成されている。
【0062】
ハウジング71下面には、凹部が形成されている。ハウジング71下面の凹部は、プレイヤがコントローラ7の前面をマーカ8Lおよび8Rに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン72iが設けられる。操作ボタン72iは、例えばBボタンとして機能する操作部である。
【0063】
ハウジング71前面には、撮像情報演算部74の一部を構成する撮像素子743が設けられる。ここで、撮像情報演算部74は、コントローラ7が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大200フレーム/秒程度のサンプリング周期であるため比較的高速なコントローラ7の動きでも追跡して解析することができる。この撮像情報演算部74の詳細な構成については、後述する。また、ハウジング71の後面には、コネクタ73が設けられている。コネクタ73は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【0064】
ここで、以下の説明を具体的にするために、コントローラ7に対して設定する座標系について定義する。図3および図4に示すように、互いに直交するXYZ軸をコントローラ7に対して定義する。具体的には、コントローラ7の前後方向となるハウジング71の長手方向をZ軸とし、コントローラ7の前面(撮像情報演算部74が設けられている面)方向をZ軸正方向とする。また、コントローラ7の上下方向をY軸とし、ハウジング71の上面(操作ボタン72aが設けられた面)方向をY軸正方向とする。さらに、コントローラ7の左右方向をX軸とし、ハウジング71の右側面(図3で表されている側面)方向をX軸正方向とする。
【0065】
次に、図5および図6を参照して、コントローラ7の内部構造について説明する。なお、図5は、コントローラ7の上筐体(ハウジング71の一部)を外した状態を後面側から見た一例を示す斜視図である。図6は、コントローラ7の下筐体(ハウジング71の一部)を外した状態を前面側から見た一例を示す斜視図である。ここで、図6に示す基板700は、図5に示す基板700の裏面から見た状態となっている。
【0066】
図5において、ハウジング71の内部には基板700が固設されており、基板700の上主面上に操作ボタン72a〜72h、加速度センサ701、LED702、およびアンテナ754等が設けられる。これらは、基板700等に形成された配線(図示せず)によってマイコン751等(図6、図7参照)に接続される。そして、無線モジュール753(図7参照)およびアンテナ754によって、コントローラ7がワイヤレスコントローラとして機能する。なお、ハウジング71内部には図示しない水晶振動子が設けられており、後述するマイコン751の基本クロックを生成する。また、基板700の上主面上に、スピーカ706およびアンプ708が設けられる。また、加速度センサ701は、操作ボタン72dの左側の基板700上(つまり、基板700の中央部ではなく周辺部)に設けられる。したがって、加速度センサ701は、コントローラ7の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分が含まれる加速度を検出することができるので、所定の演算により、検出される加速度データを用いてコントローラ7の動きを良好な感度でゲーム装置本体5等が判定することができる。
【0067】
一方、図6において、基板700の下主面上の前端縁に撮像情報演算部74が設けられる。撮像情報演算部74は、コントローラ7の前方から順に赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744によって構成されており、それぞれ基板700の下主面に取り付けられる。また、基板700の下主面上の後端縁にコネクタ73が取り付けられる。さらに、基板700の下主面上にサウンドIC707およびマイコン751が設けられている。サウンドIC707は、基板700等に形成された配線によってマイコン751およびアンプ708と接続され、ゲーム装置本体5から送信されたサウンドデータに応じてアンプ708を介してスピーカ706に音声信号を出力する。
【0068】
基板700の下主面上には、バイブレータ704が取り付けられる。バイブレータ704は、例えば振動モータやソレノイドである。バイブレータ704は、基板700等に形成された配線によってマイコン751と接続され、ゲーム装置本体5から送信された振動データに応じてその作動をオン/オフする。バイブレータ704が作動することによってコントローラ7に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ704は、ハウジング71のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング71が大きく振動することになり、振動を感じやすくなる。
【0069】
次に、図7を参照して、コントローラ7の内部構成について説明する。なお、図7は、コントローラ7の構成の一例を示すブロック図である。
【0070】
図7において、コントローラ7は、上述した操作部72、撮像情報演算部74、加速度センサ701、バイブレータ704、スピーカ706、サウンドIC707、およびアンプ708の他に、その内部に通信部75を備えている。
【0071】
撮像情報演算部74は、赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744を含んでいる。赤外線フィルタ741は、コントローラ7の前方から入射する光から赤外線のみを通過させる。レンズ742は、赤外線フィルタ741を透過した赤外線を集光して撮像素子743へ出射する。撮像素子743は、例えばCMOSセンサやあるいはCCDのような固体撮像素子であり、レンズ742が集光した赤外線を撮像する。したがって、撮像素子743は、赤外線フィルタ741を通過した赤外線だけを撮像して画像データを生成する。撮像素子743で生成された画像データは、画像処理回路744で処理される。具体的には、画像処理回路744は、撮像素子743から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部75へ出力する。なお、これらの撮像情報演算部74は、コントローラ7のハウジング71に固設されており、ハウジング71自体の方向を変えることによってその撮像方向を変更することができる。
【0072】
コントローラ7は、3軸(X、Y、Z軸)の加速度センサ701を備えていることが好ましい。この3軸の加速度センサ701は、3方向、すなわち、上下方向(図3に示すY軸)、左右方向(図3に示すX軸)、および前後方向(図3に示すZ軸)で直線加速度を検知する。また、少なくとも2軸方向に沿った直線加速度をそれぞれ検知する加速度検出手段を使用してもよい。例えば、これらの加速度センサ701は、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能であるタイプのものでもよい。加速度センサ701は、シリコン微細加工されたMEMS(Micro Electro Mechanical Systems:微小電子機械システム)の技術に基づいた静電容量式(静電容量結合式)であることが好ましい。しかしながら、既存の加速度検出手段の技術(例えば、圧電方式や圧電抵抗方式)あるいは将来開発される他の適切な技術を用いて、加速度センサ701が提供されてもよい。
【0073】
加速度センサ701に用いられるような加速度検出手段は、加速度センサ701の持つ各軸に対応する直線に沿った加速度(直線加速度)のみを検知することができる。つまり、加速度センサ701からの直接の出力は、それら3軸のそれぞれに沿った直線加速度(静的または動的)を示す信号である。このため、加速度センサ701は、非直線状(例えば、円弧状)の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【0074】
しかしながら、加速度センサ701から出力される加速度の信号に基づいて、ゲーム装置のプロセッサ(例えばCPU10)またはコントローラのプロセッサ(例えばマイコン751)等のコンピュータが処理を行うことによって、コントローラ7に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。
【0075】
例えば、加速度センサ701を搭載するコントローラ7が静的な状態であることを前提としてコンピュータ側で処理する場合(すなわち、加速度センサ701によって検出される加速度が重力加速度のみであるとして処理する場合)、コントローラ7が現実に静的な状態であれば、検出された加速度に基づいてコントローラ7の姿勢が重力方向に対して傾いているか否か、またはどの程度傾いているかを知ることができる。具体的には、単軸方向の加速度を検出可能な加速度センサ701の場合には、当該加速度が検出可能な検出軸が鉛直下方向を向いている状態を基準としたとき、当該検出軸方向に1G(重力加速度)が作用しているか否かだけでコントローラ7が鉛直下方向に対して傾いているか否かを知ることができる。また、上記検出軸方向に作用している加速度の大きさによって、コントローラ7が鉛直下方向に対してどの程度傾いているかも知ることができる。また、多軸方向の加速度を検出可能な加速度センサ701の場合には、さらに各軸に対して検出された加速度の信号に対して処理を施すことによって、重力方向に対してコントローラ7がどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ701からの出力に基づいて、プロセッサがコントローラ7の傾き角度のデータを算出する処理を行ってもよいが、当該傾き角度のデータを算出する処理を行うことなく、加速度センサ701からの出力に基づいて、おおよそのコントローラ7の傾き具合を推定するような処理としてもよい。このように、加速度センサ701をプロセッサと組み合わせて用いることによって、コントローラ7の傾き、姿勢、または位置を判定することができる。
【0076】
一方、加速度センサ701が動的な状態であることを前提とする場合には、当該加速度センサ701が重力加速度成分に加えて加速度センサ701の動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、コントローラ7の動き方向等を知ることができる。具体的には、加速度センサ701を備えるコントローラ7がプレイヤの手で動的に加速されて動かされる場合に、加速度センサ701によって生成される加速度信号を処理することによって、コントローラ7の様々な動きおよび/または位置を算出することができる。また、加速度センサ701が動的な状態であることを前提とする場合であっても、加速度センサ701の動きに応じた加速度を所定の処理により除去すれば、重力方向に対するコントローラ7の傾きを知ることが可能である。なお、後述により明らかとなるが、加速度センサ701が動的な状態であることを前提とする場合であっても、加速度センサ701が検出した加速度から重力加速度成分や並進加速度成分を除去することなく、コントローラ7の動き方向(振り方向)を判別することも可能である。
【0077】
他の実施例では、加速度センサ701は、信号をマイコン751に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサ701が静的な加速度(例えば、重力加速度)を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。加速度センサ701でそれぞれ検知された加速度を示すデータは、通信部75に出力される。
【0078】
通信部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を作動させる。
【0079】
コントローラ7に設けられた操作部72からの操作信号(キーデータ)、加速度センサ701からの3軸方向の加速度信号(X、Y、およびZ軸方向加速度データ)、および撮像情報演算部74からの処理結果データは、マイコン751に出力される。マイコン751は、入力した各データ(キーデータ、X、Y、およびZ軸方向加速度データ、処理結果データ)を無線コントローラモジュール19へ送信する送信データとして一時的にメモリ752に格納する。ここで、通信部75から無線コントローラモジュール19への無線送信は、所定の周期毎に行われるが、ゲームの処理は1/60秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は16.7ms(1/60秒)であり、ブルートゥース(登録商標)で構成される通信部75の送信間隔は5msである。マイコン751は、無線コントローラモジュール19への送信タイミングが到来すると、メモリ752に格納されている送信データを一連の操作情報として出力し、無線モジュール753へ出力する。そして、無線モジュール753は、例えばブルートゥース(登録商標)の技術を用いて、操作情報を示す電波信号を所定周波数の搬送波を用いてアンテナ754から放射する。つまり、コントローラ7に設けられた操作部72からのキーデータ、加速度センサ701からのX、Y、およびZ軸方向加速度データ、および撮像情報演算部74からの処理結果データがコントローラ7から送信される。そして、ゲーム装置本体5の無線コントローラモジュール19でその電波信号を受信し、ゲーム装置本体5で当該電波信号を復調や復号することによって、一連の操作情報(キーデータ、X、Y、およびZ軸方向加速度データ、および処理結果データ)を取得する。そして、ゲーム装置本体5のCPU10は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥース(登録商標)の技術を用いて通信部75を構成する場合、通信部75は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【0080】
次に、ゲーム装置本体5が行う具体的な処理を説明する前に、図8〜図13を用いてゲーム装置本体5で行うゲームの概要について説明する。図8は、コントローラ7を用いてプレイヤがゲーム操作するときの状態の一例を概説する図解図である。図9は、モニタ2に表示されるゲーム画像の一例を示す図である。図10は、モニタ2に表示されるゲーム画像の他の例を示す図である。図11は、プレイヤがコントローラ7を振り上げた際に生じる加速度の軌跡の一例を示す図である。図12は、加速度ベクトルのXZ軸成分を射影する射影平面の一例を示す図である。図13は、プレイヤがコントローラ7を振り上げた際に算出される加速度射影ベクトルの一例を示す図である。以下の説明では、プレイヤがあたかもゴルフクラブを握るようにコントローラ7を把持し、モニタ2に表示された仮想ゲーム世界においてゴルフゲームを行う一例を用いる。
【0081】
図8に示すように、コントローラ7は、全体として大人や子供の片手で把持可能な大きさである。そして、ゲームシステム1でコントローラ7を用いてゲームをプレイするためには、コントローラ7の前面がプレイヤの前方方向に向くようにプレイヤが両手でコントローラ7を把持する。例えば、プレイヤは、右手の手のひらをコントローラ7(ハウジング71)の右側面に添え、左手の手のひらをコントローラ7(ハウジング71)の左側面に添え、コントローラ7の前面をプレイヤの前方方向に露出させて、あたかもゴルフクラブを握っているようにコントローラ7を把持する。なお、後述する処理例においては、図8に示すように、プレイヤがコントローラ7の前面を下方に向けて構えた場合(すなわち、ゴルフにおけるアドレス)、コントローラ7の上面がプレイヤの前方方向に向くようにプレイヤがコントローラ7を把持して操作する例を用いて説明する。以下、プレイヤが右利きであることを前提として説明する。
【0082】
プレイヤは、様々な方向にコントローラ7を振ることによって、コントローラ7から様々な操作情報をゲーム装置本体5に与えることができる。例えば、ゴルフゲームにおいてボールを打撃するスイングを行う前に、プレイヤがコントローラ7を振り上げたり、アドレス位置までコントローラ7を振り下ろしたりした場合、コントローラ7から当該振り上げ操作または当該振り下ろし操作に応じた操作情報(具体的には、X、Y、およびZ軸方向加速度データ)がゲーム装置本体5に与えられる。そして、コントローラ7から受信したX、Y、およびZ軸方向加速度データに応じて、モニタ2に表示されたプレイヤキャラクタがゴルフクラブを振り上げたり振り下ろしたりするようなゲーム画像が表現される。
【0083】
図9および図10に示すように、プレイヤキャラクタPCは、ゴルフクラブCを持っており、仮想ゲーム世界に配置される。そして、プレイヤがコントローラ7を振る動作に応じて、プレイヤキャラクタPCがゴルフクラブCを振るアニメーションが表現される。そして、プレイヤがコントローラ7をスイングしてゴルフボールを打撃するような動作をした場合、仮想ゲーム世界に配置されたボールオブジェクトBOがゴルフクラブCで打撃されるアニメーションが表現される。例えば、図9に示すように、プレイヤがアドレス位置からプレイヤがコントローラ7を振り上げた場合、コントローラ7から得られたX、Y、およびZ軸方向加速度データに応じて、モニタ2に表示された仮想ゲーム世界におけるプレイヤキャラクタPCは、ゴルフクラブCを振り上げる。一方、プレイヤがアドレス位置までコントローラ7を振り下ろした場合、コントローラ7から得られたX、Y、およびZ軸方向加速度データに応じて、プレイヤキャラクタPCは、ゴルフクラブCをアドレス位置まで振り下ろす。以下、コントローラ7が振り上げられているか振り下ろされているかを判定(すなわち、振り方向を判定)する処理について説明する。
【0084】
例えば、図8のようにプレイヤがアドレス位置からコントローラ7を右上に振り上げた場合(バックスイング)、図11のような加速度が生じる。図11では、コントローラ7から受信したX軸方向加速度データが示す加速度をX軸方向加速度AccX、Y軸方向加速度データが示す加速度をY軸方向加速度AccY、Z軸方向加速度データが示す加速度をZ軸方向加速度AccZとしている。そして、上記振り上げ期間中に生じる加速度を時系列順に、それぞれ直交する3軸(XYZ軸)の座標系にプロットしたグラフである。ここで、ある時点で生じたX軸方向加速度AccX、Y軸方向加速度AccY、Z軸方向加速度AccZを、加速度ベクトル(AccX,AccY,AccZ)で表した場合、上記時系列順のプロットは、上記振り上げ期間中における加速度ベクトル(AccX,AccY,AccZ)の終点の推移(すなわち、加速度ベクトルのXYZ成分の推移)を示す加速度の軌跡と考えることもできる。
【0085】
図11に示すように、上記振り上げ期間中に生じる加速度は、XYZ軸座標系の空間において円を描くような軌跡となる。また、図8のようにプレイヤが右上からコントローラ7をアドレス位置へ振り下ろした場合、上記振り下ろし期間中に生じる加速度も、XYZ軸座標系の空間において円を描くような軌跡となる。そして、上記振り下ろし期間中に生じる加速度の軌跡が円を描く方向は、上記振り上げ期間中に生じる加速度の軌跡が円を描く方向の逆となる。例えば、Z軸正方向側から加速度の軌跡を見た場合、上記振り上げ期間中は時計方向に円を描くような軌跡であり、上記振り下ろし期間中は反時計方向に円を描くような軌跡となる。
【0086】
ここで、XYZ軸座標系の空間において描かれた円形状は、当該円形状を見る方向によって円とはならない、すなわち直線形状となることがある。具体的には、上記円形状を含む平面に対して平行となる方向から当該円形状を見た場合、当該円形状の少なくとも一部が直線形状となることがある。一方、上記円形状を含む平面に対して垂直となる方向から当該円形状を見た場合、当該円形状のままで見えることになる。本実施例においては、上記加速度の軌跡の形状が円形状である場合に、当該円形状を用いて振り方向を判別するために、加速度の軌跡を所定の射影平面に射影している。
【0087】
コントローラ7がある平面上でプレイヤによって振り動かされた場合、当該振り動作における回転軸は当該平面に対して垂直となる。そして、上記振り動作によって生じる加速度は、上記平面に沿った方向に生じ、上記回転軸方向には生じない。したがって、上記振り動作によって生じる加速度は、XYZ軸座標系の空間において上記平面に沿って軌跡を描くことになる。例えば、プレイヤがコントローラ7の上面を上方に向けた状態で水平にコントローラ7を振り動かす(すなわち、コントローラ7は、X軸方向へ水平に振り動かされる)場合、当該水平振り動作によって生じる加速度がXZ軸平面に沿った方向に生じ、Y軸方向(すなわち、回転軸方向)には生じない。そして、上記水平振り動作によって生じる加速度は、XYZ軸座標系の空間において、XZ軸平面に平行な平面に沿って円形状の軌跡を描くことになる。理論上では、加速度がXYZ軸座標系の空間において所定の平面に射影された場合に実質的に円形状の軌跡を描く場合に、当該所定の平面に対して実質的に平行となるように射影平面を設定するのが好ましい。これは、コントローラ7が振られた際の回転軸に実質的に垂直となるように射影平面を設定することになるが、射影平面の配置態様はこれに限らない。上記射影平面は、加速度がXYZ軸座標系の空間において所定の平面に射影された場合に実質的に円形状の軌跡を描く場合に、当該所定の平面に対して実質的に垂直でない、すなわちコントローラ7が振られた際の回転軸に実質的に平行とならないように射影平面を設定すれば、上記軌跡が描かれている方向の区別が可能となる。したがって、上記射影平面は、上記所定の平面(例えば、円形状を含む平面)に対して実質的に垂直にならない、すなわちコントローラ7が振られた際の回転軸に実質的に平行とならない位置であれば、どのような配置でもかまわない。
【0088】
例えば、図12に示すように、本実施例は、Y軸と平行で、かつX軸との間で成す角度がθとなった射影平面を用いる。具体的には、本実施例では、コントローラ7を用いてゴルフスイングするような操作を想定する場合、θ=12°にした射影平面を設定し、X軸方向加速度AccXおよびZ軸方向加速度AccZを当該射影平面に射影した値LenXZを用いている。そして、上記振り上げ期間中に得られる値LenXZとY軸方向加速度AccYとを、加速度射影ベクトル(LenXZ,AccY,0)で表した場合、当該加速度射影ベクトル(LenXZ,AccY,0)の終点の推移(すなわち、加速度射影ベクトルのXYZ成分の推移)を示す軌跡は、図13のように時計方向に描かれた円形状となる。
【0089】
加速度射影ベクトルの終点の軌跡が円形状となり、その円が描かれる方向を判別したい場合、過去に得られた加速度射影ベクトルとの外積を用いることができる。例えば、図13に示すように、前回の処理で算出された加速度射影ベクトルをVto、今回の処理で算出された加速度射影ベクトルをVtとした場合、加速度射影ベクトルVtoと加速度射影ベクトルVtとの外積の向きを用いて、上記円が描かれている方向が判別できる。具体的には、加速度射影ベクトルVtoと加速度射影ベクトルVtとの外積の向きが、所定の方向か当該所定方向の逆方向であるかを区別することによって、上記円が描かれている方向(すなわち、コントローラ7が振られている方向)を判別することができる。ここで、上記外積の向きを判別する好適な方法の一つとして、加速度射影ベクトルVtoと加速度射影ベクトルVtとの外積の所定の方向の成分を示す外積値を用いることが考えられる。例えば、図13で示した例では、加速度射影ベクトルVtoと加速度射影ベクトルVtとの外積におけるZ軸成分(外積値)の正負を判別することによって、上記円が描かれている方向が判別できる。具体的には、上記外積値が負の値である場合、加速度射影ベクトルの終点の軌跡が時計方向に描かれた円形状となっていると判定することができ、コントローラ7がアドレス位置から右上方向に振り上げられていると判断することができる。一方、上記外積値が正の値である場合、加速度射影ベクトルの終点の軌跡が反時計方向に描かれた円形状となっていると判定することができ、コントローラ7が右上からアドレス位置へ振り下ろされていると判断することができる。
【0090】
次に、ゲームシステム1において行われるゲーム処理の詳細を説明する。まず、図14を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図14は、ゲーム装置本体5の外部メインメモリ12および/または内部メインメモリ35(以下、2つのメインメモリを総称して、単にメインメモリと記載する)に記憶される主なデータおよびプログラムの一例を示す図である。
【0091】
図14に示すように、メインメモリのデータ記憶領域には、加速度データDa、内積値データDb、加速度射影ベクトルデータDc、前回の加速度射影ベクトルデータDd、外積値データDe、角加速度データDf、角速度データDg、前回の角速度データDh、角度データDi、前回の角度データDj、静的角度データDk、および画像データDm等が記憶される。なお、メインメモリには、図14に示す情報に含まれるデータの他、ゲームに登場するプレイヤキャラクタPC以外の他のオブジェクト(例えば、ボールオブジェクトBO)等に関するデータ(位置データ等)等、ゲーム処理に必要なデータが記憶される。また、メインメモリのプログラム記憶領域には、ゲームプログラムを構成する各種プログラム群Paが記憶される。
【0092】
加速度データDaは、コントローラ7に生じた加速度を示すデータであり、コントローラ7から送信データとして送信されてくる一連の操作情報に含まれる最新の加速度データの履歴が格納される。この加速度データDaには、加速度センサ701がX軸成分に対して検出した加速度の履歴h0〜h9(すなわち、X軸方向に対する10回の加速度の履歴)を示すX軸方向加速度データDa1、Y軸成分に対して検出した加速度の履歴h0〜h9(すなわち、Y軸方向に対する10回の加速度の履歴)を示すY軸方向加速度データDa2、およびZ軸成分に対して検出した加速度の履歴h0〜h9(すなわち、Z軸方向に対する10回の加速度の履歴)を示すZ軸方向加速度データDa3が含まれる。なお、ゲーム装置本体5に備える無線コントローラモジュール19は、コントローラ7から所定周期(例えば、1/200秒毎)に送信される操作情報に含まれる加速度データを受信し、無線コントローラモジュール19に備える図示しないバッファに蓄えられる。その後、上記バッファに蓄えられた加速度データがゲーム処理周期である1フレーム毎(例えば、1/60秒毎)に読み出されて、メインメモリの加速度データDaが更新される。
【0093】
このとき、操作情報を受信する周期と処理周期とが異なるために、上記バッファには複数の時点に受信した操作情報が記述されていることになる。後述する処理の説明においては、後述する各ステップにおいて、複数の時点に受信した操作情報のうち最新の操作情報のみを常に用いて処理して、次のステップに進める態様を用いる。
【0094】
また、後述する処理フローでは、加速度データDaがゲーム処理周期である1フレーム毎に更新される例を用いて説明するが、他の処理周期で更新されてもかまわない。例えば、コントローラ7からの送信周期毎に加速度データDaを更新し、当該更新された加速度データDaをゲーム処理周期毎に利用する態様でもかまわない。この場合、加速度データDaに記憶する加速度データDa1〜Da3を更新する周期と、ゲーム処理周期とが異なることになる。
【0095】
内積値データDbは、X軸方向加速度AccXおよびZ軸方向加速度AccZを射影平面に射影する際に内積によって算出される値LenXZを示すデータが格納される。加速度射影ベクトルデータDcは、値LenXZとY軸方向加速度AccYとによって得られる加速度射影ベクトル(LenXZ,AccY,0)を示すデータが格納される。前回の加速度射影ベクトルデータDdは、前回の処理において得られた加速度射影ベクトルを示すデータが格納される。外積値データDeは、前回の処理において得られた加速度射影ベクトルと今回の処理において得られた加速度射影ベクトルとの外積におけるZ軸成分(外積値)を示すデータが格納される。
【0096】
角加速度データDfは、プレイヤキャラクタPCがスイングするゴルフクラブCの角加速度を示すデータが格納される。角速度データDgは、プレイヤキャラクタPCがスイングするゴルフクラブCの角速度を示すデータが格納される。前回の角速度データDhは、前回の処理において得られたゴルフクラブCの角速度を示すデータが格納される。角度データDiは、プレイヤキャラクタPCがスイングするゴルフクラブCの角度を示すデータが格納される。前回の角度データDjは、前回の処理において得られたゴルフクラブCの角度を示すデータが格納される。静的角度データDkは、コントローラ7が静的な状態において算出されたコントローラ7の姿勢(角度)を示すデータが格納される。
【0097】
画像データDmは、プレイヤキャラクタ画像データDm1、ボールオブジェクト画像データDm2、および背景画像データDm3等を含んでいる。プレイヤキャラクタ画像データDm1は、仮想ゲーム世界にプレイヤキャラクタPCを配置してゲーム画像を生成するためのデータであり、例えば、プレイヤキャラクタPCがゴルフスイングする際の各種状態に対応するアニメーションデータが格納される。ボールオブジェクト画像データDm2は、仮想ゲーム世界にボールオブジェクトBOを配置してゲーム画像を生成するためのデータである。背景画像データDm3は、仮想ゲーム世界に背景を配置してゲーム画像を生成するためのデータである。
【0098】
次に、図15〜図19を参照して、ゲーム装置本体5において行われるゲーム処理の詳細を説明する。なお、図15は、ゲーム装置本体5において実行されるゲーム処理の一例を示すフローチャートである。図16は、図15におけるステップ43の外積値算出処理の一例を示すサブルーチンである。図17は、図15におけるステップ46のクラブ角度算出処理の一例を示すサブルーチンである。図18は、図17におけるステップ82の動的な角加速度算出処理の一例を示すサブルーチンである。図19は、図17におけるステップ83の静的な角加速度算出処理の一例を示すサブルーチンである。ここで、図15〜図19に示すフローチャートにおいては、ゲーム処理の一例としてゴルフゲームを用いて説明する。また、図15〜図19に示すフローチャートにおいては、ゲーム処理のうち、プレイヤがコントローラ7をスイングすることに応じて、プレイヤキャラクタPCがスイングする処理について主に説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図15〜図19では、CPU10が実行する各ステップを「S」と略称する。
【0099】
ゲーム装置本体5の電源が投入されると、ゲーム装置本体5のCPU10は、ROM/RTC13に記憶されている起動用のプログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図15〜図19に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【0100】
図15において、CPU10は、ゲーム処理の初期化を行い(ステップ41)、次のステップに処理を進める。例えば、上記ステップ41におけるゲーム処理初期化では、仮想ゲーム世界の設定やプレイヤキャラクタPC等の初期設定を行う。また、上記ステップ41におけるゲーム処理初期化では、以降のゲーム処理で用いる各パラメータを初期化する。例えば、CPU10は、上述したメインメモリに格納される各データDa〜Dkが示すパラメータをそれぞれ初期値に設定する。さらに、上記ステップ41におけるゲーム処理初期化では、コントローラ7を把持してプレイするプレイヤの利き手、すなわちゴルフにおける右打ちまたは左打ちのどちらでコントローラ7をスイングするかを設定する。なお、利き手をどちらに設定するかは、予めプレイヤによって選択しておくようにして、選択されている方の打ち方に設定するようにすればよい。
【0101】
次に、CPU10は、コントローラ7から加速度を示す加速度データを取得し(ステップ42)、次のステップに処理を進める。例えば、CPU10は、コントローラ7から受信した操作情報を取得し、当該操作情報に含まれる最新の加速度データが示す加速度を用いて加速度データDaに格納する。具体的には、CPU10は、加速度データDaに格納された加速度の履歴h0〜h9をそれぞれ時系列順に順送りして更新、すなわち加速度の履歴h9を消去して、履歴h8を履歴h9に、履歴h7を履歴h8に、履歴h6を履歴h7に、履歴h5を履歴h6に、履歴h4を履歴h5に、履歴h3を履歴h4に、履歴h2を履歴h3に、履歴h1を履歴h2に、履歴h0を履歴h1にそれぞれ順送りして更新する。そして、CPU10は、コントローラ7から受信した最新の操作情報に含まれるX軸方向の加速度データが示す加速度AccXを用いて、X軸方向加速度データDa1の履歴h0を更新する。また、CPU10は、最新の操作情報に含まれるY軸方向の加速度データが示す加速度AccYを用いて、Y軸方向加速度データDa2の履歴h0を更新する。そして、CPU10は、最新の操作情報に含まれるZ軸方向の加速度データが示す加速度AccZを用いて、Z軸方向加速度データDa3の履歴h0を更新する。
【0102】
次に、CPU10は、外積値算出処理を行い、次のステップ44に処理を進める。以下、図16を参照して、上記ステップ44で行う外積値算出処理の詳細な動作について説明する。
【0103】
図16において、CPU10は、最新のX軸方向加速度AccXおよびZ軸方向加速度AccZを所定の射影平面に射影して値LenXZを算出し(ステップ61)、次のステップに処理を進める。例えば、図12を用いて説明したように、本実施例では、加速度の軌跡の形状(円形状)を判別するために、加速度の軌跡を所定の射影平面に投影している。一例として、上記ステップ61で用いられる射影平面は、Y軸と平行で、かつX軸との間で成す角度がθ(例えば、12°)となるように配置される。そして、上記射影平面に、最新のX軸方向加速度AccXおよびZ軸方向加速度AccZを射影することによって値LenXZを得る。
【0104】
例えば、上記射影平面に射影した値を得るために、内積を用いる。具体的には、上記ステップ42で得られた加速度のXZ軸成分(X軸方向加速度データDa1の履歴h0が示す加速度AccXおよびZ軸方向加速度データDa3の履歴h0が示す加速度AccZ)を示すベクトルを、AccXZ(AccX,0,AccZ)とする。また、Y軸と平行で、かつX軸との間で成す角度が12°となるように配置された射影平面の方向を表す単位ベクトル(大きさ1のベクトル)を、PD(0.98,0,−0.21)とする。この場合、値LenXZは、
LenXZ=AccXZ・PD
すなわち、ベクトルAccXZとベクトルPDとの内積によって算出される。そして、CPU10は、算出された値LenXZを用いて内積値データDbを更新する。
【0105】
次に、CPU10は、加速度射影ベクトルVtを算出し(ステップ62)、次のステップに処理を進める。例えば、CPU10は、Y軸方向加速度データDa2の履歴h0が示す加速度AccYおよび内積値データDbが示す値LenXZを用いて、加速度射影ベクトルVt(LenXZ,AccY,0)を算出し、算出された加速度射影ベクトルVtを用いて加速度射影ベクトルデータDcを更新する。
【0106】
次に、CPU10は、前回の処理で得られた加速度射影ベクトルVtoと上記ステップ62で算出された加速度射影ベクトルVtとの外積CVを算出する(ステップ63)。そして、CPU10は、上記ステップ63で得られた外積CVのZ軸成分を外積値Crとし(ステップ64)、次のステップに処理を進める。例えば、CPU10は、前回の加速度射影ベクトルデータDdが示す前回の加速度射影ベクトルVto(LenXZo,AccYo,0)および加速度射影ベクトルデータDcが示す加速度射影ベクトルVt(LenXZ,AccY,0)とを用いて、外積CVを、
CV=Vto×Vt=(0,0,LenXZo*LenXZ−AccYo*AccY)
すなわち、加速度射影ベクトルVtoと加速度射影ベクトルVtとの外積によって算出する。そして、CPU10は、算出された外積CVのZ軸成分を外積値Crとし、当該外積値Crを用いて外積値データDeを更新する。
【0107】
なお、上記ステップ63およびステップ64においては、3次元ベクトルである加速度射影ベクトルVtoと加速度射影ベクトルVtとの外積におけるZ軸成分を外積値Crとしているが、他の考え方でも同様に外積値Crを求めることができる。例えば、加速度射影ベクトルVtと前回の加速度射影ベクトルVtoとを、それぞれ上記射影平面上の2次元ベクトルとして定義する。すなわち、加速度射影ベクトルVtをVt2(LenXZ,AccY)、前回の加速度射影ベクトルVtoをVto2(LenXZo,AccYo)として、それぞれの2次元ベクトルを定義する。そして、2つの2次元ベクトルVto2(LenXZo,AccYo)と2次元ベクトルVt2(LenXZ,AccY)との外積を外積値Crとする。すなわち、外積値Crは、
Cr=Vto2×Vt2=LenXZo*LenXZ−AccYo*AccY
で算出され、結果的に上記算出方法と同様の結果となる。
【0108】
次に、CPU10は、上記ステップ62で算出された加速度射影ベクトルVtを用いて前回の加速度射影ベクトルVtoを更新して(ステップ65)、当該サブルーチンによる処理を終了する。具体的には、CPU10は、加速度射影ベクトルデータDcが示す加速度射影ベクトルVtを用いて前回の加速度射影ベクトルデータDdを更新する。
【0109】
図15に戻り、CPU10は、上記ステップ43の外積値算出処理の後、スイング状態を判別する処理を行い(ステップ44)、次のステップに処理を進める。本実施例においては、プレイヤがコントローラ7を用いてゴルフスイングする場合、3つのスイング状態に分けている。例えば、プレイヤがコントローラ7を用いてゴルフスイングする場合、アドレスからバックスイングしてボールを打撃するためのダウンスイングをするまでの状態(ダウンスイング待ち状態)、当該ダウンスイングからボールを打撃してフィニッシュ(フォロースルー)までの状態(ショット中状態)、フィニッシュから次のショットのためのアドレスを行うまでの状態(待機状態)に分類する。具体的には、プレイヤがコントローラ7を把持してアドレス状態である場合にダウンスイング待ち状態に設定され、その後、コントローラ7に生じている加速度の大きさが所定の大きさを超えた時点で、ダウンスイング待ち状態からショット中状態に移行する。また、ショット中状態に移行した後にフォロースルーのアニメーションの再生が終了してY軸方向の加速度が負になった時点でショット中状態から待機状態に移行する。ここで、フォロースルーのアニメーションの再生が終了するのは、最後のアニメーションフレームまで再生された時点である。また、待機状態に移行した後に静的な状態でコントローラ7の前面が下に向けられた時点(例えば、コントローラ7が静的状態かつZ軸正方向に重力加速度が生じた時点やY軸負方向に重力加速度が生じた後にZ軸正方向に重力加速度が生じた時点)で待機状態からダウンスイング待ち状態に移行する。
【0110】
次に、CPU10は、上記ステップ44におけるスイング状態判別処理の結果に基づいて、現在のスイング状態がダウンスイング待ち状態であるか否か(ステップ45)、ショット中状態であるか否か(ステップ50)を判断する。そして、CPU10は、スイング状態がダウンスイング待ち状態である場合、次のステップ46に処理を進める。また、CPU10は、スイング状態がショット中状態である場合、次のステップ51に処理を進める。また、CPU10は、ダウンスイング待ち状態でもショット中状態でもない場合(すなわち、待機状態である場合)、次のステップ52に処理を進める。
【0111】
ステップ46において、CPU10は、クラブ角度を算出する処理を行い、次のステップ47に処理を進める。以下、図17を参照して、上記ステップ47で行うクラブ角度算出処理の詳細な動作について説明する。
【0112】
図17において、CPU10は、コントローラ7が動的状態であるか否かを判断する(ステップ81)。そして、CPU10は、コントローラ7が動的状態にある場合、次のステップ82に処理を進める。一方、CPU10は、コントローラ7が静的状態にある場合、次のステップ83に処理を進める。例えば、上記ステップ81において、CPU10は、加速度データDaの履歴h0〜h9を参照して、過去10フレーム間における加速度の大きさの絶対値を算出し、当該絶対値が全て0.8G〜1.2Gの範囲内にあるか否かを判断する。そして、CPU10は、上記絶対値全てが上記範囲内にある場合にコントローラ7が静的状態にあると判断し、上記絶対値の少なくとも1つが上記範囲外にある場合にコントローラ7が動的状態にあると判断する。
【0113】
ステップ82において、CPU10は、動的な角加速度を算出する処理を行い、次のステップ84に処理を進める。以下、図18を参照して、上記ステップ82で行う動的な角加速度算出処理の詳細な動作について説明する。
【0114】
図18において、CPU10は、外積値データDeが示す外積値Crが予め定められた閾値aより小さいか否か(ステップ101)、および外積値Crが予め定められた閾値b(ここで、閾値b>閾値a)より大きいか否か(ステップ102)を判断する。そして、CPU10は、外積値Crが閾値aより小さい場合、次のステップ103に処理を進める。また、CPU10は、外積値Crが閾値bより大きい場合、次のステップ104に処理を進める。また、CPU10は、外積値Crが閾値a以上で閾値b以下の場合、次のステップ107に処理を進める。
【0115】
上記ステップ101およびステップ102で用いられる、閾値aおよびbについて説明する。閾値aおよびbは、コントローラ7が振り上げられているか振り下ろされているかを判別するための値である。例えば、閾値a=−0.01に設定され、外積値Crが閾値aより小さい場合にコントローラ7が振り上げられていると判断する。また、例えば、閾値b=0.05に設定され、外積値Crが閾値bより大きい場合にコントローラ7が振り下ろされていると判断する。図13を用いて説明したように、加速度射影ベクトルの終点の軌跡が円形状となっている場合、当該軌跡が描かれている方向によってコントローラ7の振り方向が判別可能である。また、加速度射影ベクトルの終点の軌跡が描かれている方向は、加速度射影ベクトルVtoと加速度射影ベクトルVtとの外積におけるZ軸成分の正負、すなわち外積値Crの正負によって判別可能である。
【0116】
このように、コントローラ7の振り方向は、外積値Crの正負によって判別可能であるが、上記ステップ101およびステップ102においては、コントローラ7の振り方向が何れの方向にも判定されない閾値a〜閾値bまでの幅が設けられている。これは、加速度センサ701が検出した加速度に対するノイズの影響を除外したり、加速度が閾値付近で推移している場合に振り上げと振り下ろしとが頻繁に切り換わることを防止したりするためである。なお、上述した閾値aおよび閾値bの値の例示では、|a|<|b|となっており、異なる絶対値となるように設定されている。そして、閾値の絶対値が小さい程、当該閾値を用いて何れかの振り方向に判定される条件を満たすことが容易となる。つまり、閾値aおよびbの絶対値の大きさによって、コントローラ7の振り方向毎に当該振り方向が判定されるレスポンスを調整することができる。例えば、上述した閾値aおよび閾値bの値の例示では、コントローラ7を振り下ろす場合の操作応答性に対して、コントローラ7を振り上げる場合の操作応答性を良くしている。このように、ゲーム毎に要求されるコントローラ7の振り操作のレスポンスに応じて閾値aおよびbの絶対値の大きさを調整することによって、コントローラ7の振り方向毎に所望の操作レスポンスを得ることができる。
【0117】
なお、上述した効果を期待しない場合、コントローラ7の振り方向が何れの方向にも判定されない閾値a〜閾値bまでの幅を設けなくてもかまわない。つまり、外積値Crが正の値の場合にコントローラ7が振り下ろされていると判断し、外積値Crが負の値の場合にコントローラ7が振り上げられていると判断してもよい。この場合、加速度が0付近で推移している場合に振り上げと振り下ろしとが頻繁に切り換わることになるが、コントローラ7の振り方向が判定されるレスポンスが極めて高くなる。
【0118】
ステップ103において、CPU10は、コントローラ7の振り方向が振り上げであると判定する。そして、CPU10は、振り上げ方向における角加速度AgAを算出し(ステップ105)、次のステップ108に処理を進める。例えば、CPU10は、角加速度AgAを
AgA=(a−Cr)*c
によって算出する。ここで、aは、上述した閾値であり、例えばa=−0.01で設定される。また、cは、予め定められた定数であり、例えばc=5.0で設定される。そして、CPU10は、算出した角加速度AgAを用いて、角加速度データDfを更新する。
【0119】
一方、ステップ104において、CPU10は、コントローラ7の振り方向が振り下ろしであると判定する。そして、CPU10は、振り下ろし方向における角加速度AgAを算出し(ステップ106)、次のステップ108に処理を進める。例えば、CPU10は、角加速度AgAを
AgA=(b−Cr)*c
によって算出する。ここで、bは、上述した閾値であり、例えばb=0.05で設定される。そして、CPU10は、算出した角加速度AgAを用いて、角加速度データDfを更新する。
【0120】
また、ステップ107において、CPU10は、角加速度AgAを0に設定して角加速度データDfを更新し、次のステップ108に処理を進める。ここで、上記ステップ107を行う場合は、外積値Crが閾値a以上、かつ、閾値b以下(例えば、−0.01以上、0.05以下)である場合、すなわち外積値Crが0付近となっている場合である。この場合、上記振り上げや上記振り下ろし以外の動作でコントローラ7が操作されていることが考えられるため、CPU10は、角加速度AgAを0に設定する。
【0121】
ステップ108において、CPU10は、角加速度AgAの値を所定の範囲内に調整して、当該サブルーチンによる処理を終了する。例えば、CPU10は、角加速度データDfが示す角速度AgAの値が−4.0〜4.0の間となるように調整、すなわち角速度AgAの値が−4.0より小さい場合に角速度AgAを−4.0に調整し、角速度AgAの値が4.0より大きい場合に角速度AgAを4.0に調整して、角加速度データDfを更新する。
【0122】
図17に戻り、上記ステップ81においてコントローラ7が静的状態にあると判断された場合、CPU10は、静的な角加速度を算出する処理を行い(ステップ83)、次のステップ84に処理を進める。以下、図19を参照して、上記ステップ83で行う静的な角加速度算出処理の詳細な動作について説明する。
【0123】
図19において、CPU10は、上記ステップ42で得られた加速度のZ軸成分(Z軸方向加速度データDa3の履歴h0が示す加速度AccZ)が加速度のY軸成分(Y軸方向加速度データDa2の履歴h0が示す加速度AccY)より大きいか否かを判断する(ステップ111)。そして、CPU10は、加速度AccZが加速度AccYより大きい場合、次のステップ112に処理を進める。一方、CPU10は、加速度AccZが加速度AccY以下の場合、次のステップ114に処理を進める。
【0124】
ステップ112において、CPU10は、上記ステップ42で得られた加速度のZ軸成分(加速度AccZ)の値を所定の範囲内に調整して、次のステップに処理を進める。例えば、CPU10は、Z軸方向加速度データDa3の履歴h0が示す加速度AccZの値が−1.0〜1.0の間となるように調整、すなわち加速度AccZの値が−1.0より小さい場合に加速度AccZを−1.0に調整し、加速度AccZの値が1.0より大きい場合に加速度AccZを1.0に調整して、Z軸方向加速度データDa3の履歴h0を更新する。
【0125】
次に、CPU10は、加速度AccZを用いて、静的角度AgSを算出し(ステップ113)、次のステップ116に処理を進める。例えば、CPU10は、上記ステップ42で得られた加速度のZ軸成分が、コントローラ7に生じている重力加速度のZ軸成分であると仮定し、当該重力加速度が生じている方向を基準としてコントローラ7の静的角度AgSを算出する。具体的には、CPU10は、静的角度AgSを
AgS=arccos(AccZ)
で算出し、算出された静的角度AgSを用いて静的角度データDkを更新する。
【0126】
一方、ステップ114において、CPU10は、上記ステップ42で得られた加速度のY軸成分(加速度AccY)の値を所定の範囲内に調整して、次のステップに処理を進める。例えば、CPU10は、Y軸方向加速度データDa2の履歴h0が示す加速度AccYの値が−1.0〜1.0の間となるように調整、すなわち加速度AccYの値が−1.0より小さい場合に加速度AccYを−1.0に調整し、加速度AccYの値が1.0より大きい場合に加速度AccYを1.0に調整して、Y軸方向加速度データDa2の履歴h0を更新する。
【0127】
次に、CPU10は、加速度AccYを用いて、静的角度AgSを算出し(ステップ115)、次のステップ116に処理を進める。例えば、CPU10は、上記ステップ42で得られた加速度のY軸成分が、コントローラ7に生じている重力加速度のY軸成分であると仮定し、当該重力加速度が生じている方向を基準としてコントローラ7の静的角度AgSを算出する。具体的には、CPU10は、静的角度AgSを
AgS=90+{180−arccos(AccY)}=270−arccos(AccY)
で算出し、算出された静的角度AgSを用いて静的角度データDkを更新する。
【0128】
ステップ116において、CPU10は、静的角度AgSを用いてクラブの角加速度AgAを算出し、当該サブルーチンによる処理を終了する。例えば、CPU10は、仮想ゲーム世界において、静的角度データDkが示す静的角度AgSと、前回の処理において算出されたプレイヤキャラクタPCがスイングするゴルフクラブCの角度Agoとの差分に比例するように、クラブの角加速度AgAを算出する。具体的には、CPU10は、角加速度AgAを
AgA=(4/190)*(AgS−Ago)
で算出し、算出された角加速度AgAを用いて角加速度データDfを更新する。
【0129】
図17に戻り、上記ステップ82または上記ステップ83において角加速度AgAを算出した後、CPU10は、角速度AgVを算出し(ステップ84)、次のステップに処理を進める。例えば、CPU10は、角速度AgVを
AgV=AgVo+AgA
で算出し、算出された角速度AgVを用いて角速度データDgを更新する。ここで、AgVoは、前回の処理において算出された角速度AgVを示す値であり、前回の角速度データDhを参照することによって得ることができる。
【0130】
次に、CPU10は、角速度AgVに仮想ゲーム世界に設定されている空気抵抗分の影響を付加し(ステップ85)、次のステップに処理を進める。例えば、CPU10は、上記ステップ84で算出された角速度AgVに1未満の係数(例えば、0.97)を乗算することによって角速度AgVに空気抵抗分の影響を付加し、空気抵抗分の影響を付加した後の角速度AgVを用いて角速度データDgを更新する。
【0131】
次に、CPU10は、上記ステップ85で得られた角速度AgVの値を所定の範囲内に調整して(ステップ86)、次のステップに処理を進める。例えば、CPU10は、角速度データDgが示す角速度AgVの値が−6.0〜6.0の間となるように調整、すなわち角速度AgVの値が−6.0より小さい場合に角速度AgVを−6.0に調整し、角速度AgVの値が6.0より大きい場合に角速度AgVを6.0に調整して、角速度データDgを更新する。
【0132】
次に、CPU10は、角速度AgVを用いて、プレイヤキャラクタPCがスイングするゴルフクラブCの角度Agを算出し(ステップ87)、次のステップに処理を進める。例えば、CPU10は、角度Agを
Ag=Ago+AgV
で算出し、算出された角度Agを用いて角度データDiを更新する。ここで、Agoは、前回の処理において算出された角度Agを示す値であり、前回の角度データDjを参照することによって得ることができる。
【0133】
次に、CPU10は、上記ステップ87で得られた角度Agの値が所定の範囲内であるか否かを判断する(ステップ88)。上記ステップ88で用いる閾値は、上記ダウンスイング待ち状態においてプレイヤキャラクタPCがスイングするゴルフクラブCが取り得る角度に設定され、例えば、角度Agの値が60.0〜250.0の範囲内にあるか否かが判定される。そして、CPU10は、角度Agの値が所定の範囲外である場合、次のステップ89に処理を進める。一方、CPU10は、角度Agの値が所定の範囲内である場合、次のステップ91に処理を進める。
【0134】
ステップ89において、CPU10は、上記ステップ87で得られた角度Agの値を上記所定の範囲内に調整して、次のステップに処理を進める。例えば、CPU10は、角度データDiが示す角度Agの値が60.0〜250.0の間となるように調整、すなわち角度Agの値が60.0より小さい場合に角度Agを60.0に調整し、角度Agの値が250.0より大きい場合に角度Agを250.0に調整して、角度データDiを更新する。
【0135】
次に、CPU10は、角速度AgVを0に設定し(ステップ90)、次のステップ91に処理を進める。ここで、上記ステップ90の処理は、上記ステップ87で算出された角度Agが、上記ダウンスイング待ち状態においてゴルフクラブCが取り得る角度の範囲を超えている場合に行われる。この場合、プレイヤキャラクタPCがスイングするゴルフクラブCの角度は、上記取り得る範囲を超えないように当該範囲の上限または下限の角度で固定されるため、結果的に、ゴルフクラブCが振られる際の角速度も0にすることが必要となる。したがって、CPU10は、上記ステップ90において、角速度AgVを0に設定して角速度データDgを更新する。
【0136】
ステップ91において、CPU10は、現在の角速度AgVを用いて前回の角速度AgVoを更新し、現在の角度Agを用いて前回の角度Agoを更新して、当該サブルーチンによる処理を終了する。例えば、CPU10は、角速度データDgが示す角速度AgVを用いて前回の角速度データDhを更新する。また、CPU10は、角度データDiが示す角度Agを用いて前回の角度データDjを更新する。
【0137】
図15に戻り、上記ステップ46のクラブ角度算出処理の後、CPU10は、角度Agに対応するアニメーションフレームを選択し(ステップ47)、次のステップ48に処理を進める。例えば、プレイヤキャラクタ画像データDm1には、プレイヤキャラクタPCがゴルフスイングする際、アドレス位置からバックスイングしてトップスイングに至るまでの各ゴルフクラブの角度に応じたアニメーションフレームが用意されている。そして、CPU10は、上記ステップ47において、角度データDiが示す角度Agに対応するアニメーションフレームをプレイヤキャラクタ画像データDm1から選択する。
【0138】
一方、上記ステップ44におけるスイング状態判別処理の結果に基づいて、スイング状態がショット中状態である場合(ステップ50でYes)、CPU10は、アニメーションフレーム速度を算出し(ステップ51)、次のステップ48に処理を進める。上述したように、CPU10は、ダウンスイング待ち状態において、コントローラ7に生じている加速度の大きさが所定の大きさを超えた時点でショット中状態に移行する。例えば、CPU10は、上記ステップ51において、コントローラ7に生じている加速度の大きさが上記所定の大きさを超えた時点における加速度の変化量(例えば、前回の処理で取得されたZ軸方向加速度データと今回の処理で取得されたZ軸方向加速度データとの差分)に基づいて、アニメーションフレーム速度を算出する。具体的には、CPU10は、上記所定の大きさを超えた時点における加速度の変化量が、コントローラ7を振り下ろす速度が相対的に速いことを示す場合、アニメーションフレーム速度が相対的に速くなるように算出する。
【0139】
また、上記ステップ44におけるスイング状態判別処理の結果に基づいて、ダウンスイング待ち状態でもショット中状態でもない場合(すなわち、待機状態である場合;ステップ45およびステップ50でNo)、CPU10は、ショット後のアニメーションを選択し(ステップ52)、次のステップ48に処理を進める。上述したように、CPU10は、ショット中状態において、フォロースルーのアニメーションの再生が終了してY軸方向の加速度が負になった時点で待機状態に移行する。例えば、CPU10は、上記ステップ52において、フォロースルーのアニメーションの再生が終了してY軸方向の加速度が負になった時点で、プレイヤキャラクタPCがスイングを終えたフィニッシュの状態のアニメーションをプレイヤキャラクタ画像データDm1から選択する。また、CPU10は、上記ステップ52において、上記待機状態でプレイヤがコントローラ7をフィニッシュ状態から正面下方向まで下ろした場合(例えば、コントローラ7が静的状態かつZ軸正方向に重力加速度が生じた時点や)、プレイヤキャラクタPCがフィニッシュの状態から正面前までゴルフクラブを持ってくるアニメーションをプレイヤキャラクタ画像データDm1から選択する。
【0140】
ステップ48において、CPU10は、上記ステップ47、ステップ51、またはステップ52におけるアニメーションの設定に基づいて、プレイヤキャラクタPCを動作させてモニタ2に表示するゲーム表示処理を行い、次のステップに処理を進める。例えば、上記ステップ47においてアニメーションフレームが選択されている場合、CPU10は、選択されたアニメーションフレームに応じてアニメーションをプレイヤキャラクタ画像データDm1から選択し、当該アニメーションフレームをモニタ2に表示する。また、上記ステップ51においてアニメーションフレーム速度が算出されている場合、CPU10は、プレイヤキャラクタ画像データDm1に用意されているプレイヤキャラクタPCがショットするアニメーションを当該アニメーションフレーム速度で再生して、モニタ2に表示する。また、上記ステップ52においてショット後のアニメーションが選択されている場合、CPU10は、選択されたアニメーションをプレイヤキャラクタ画像データDm1から選択し、当該アニメーションをモニタ2に表示する。
【0141】
次に、CPU10は、ゲームを終了するか否かを判断する(ステップ49)。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。CPU10は、ゲームを終了しない場合に上記ステップ42に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。
【0142】
このように、上述したゲーム処理によれば、加速度センサ701から時系列的に得られる加速度ベクトルに対して外積値を算出し、当該外積値を用いてコントローラ7が振られた方向を判別することによって、当該方向を精確に判別することができる。
【0143】
なお、上述した説明では、プレイヤによってコントローラ7が振り上げられたか振り下ろされたかを外積値Crを用いて判別しているが、コントローラ7における他の方向に対する振り方向の判別も可能である。本願発明では、加速度センサ701から時系列的に得られる加速度ベクトルの推移が実質的に円形状(図11、図13参照)となるようなコントローラ7の振りであれば、当該振りの方向を判別することができる。例えば、プレイヤがコントローラ7の上面を上方に向けた状態で左右に振る場合、加速度センサ701から時系列的に得られる加速度ベクトルの推移がY軸に垂直な平面上で実質的に円形状となる。この場合、上記射影平面を当該Y軸に平行に設定すれば、当該射影平面に射影されて時系列的に得られる加速度射影ベクトルの外積値によって、プレイヤが左に振ったのか右に振ったのかを精確に判別することができる。
【0144】
また、上述した説明では、3軸方向の加速度を検出する加速度センサ701を用いた処理を用いたが、少なくとも2軸方向の加速度を検出する加速度センサがコントローラ7に設けられていればよい。例えば、2軸方向の加速度を検出する加速度センサがコントローラ7に設けられている場合、当該2軸方向に対して垂直な方向を回転軸としてコントローラ7が振り動かされ、当該2軸方向における加速度ベクトルの推移が実質的に円形状となるのであれば、当該円形状が描かれた方向を外積値で区別することによって振り方向の判別が可能となる。
【0145】
また、上述したゲーム処理では、本発明をゴルフゲームの振り方向判定に用いる一例を用いたが、本発明は、他のゲームで行われる加速度データの判定処理に用いてもかまわない。本発明は、上下方向、左右方向、左上から右下への方向、右上から左下への方向等、コントローラ7がある方向に振られることが前提となっているゲームにおいて、当該方向に対するコントローラ7の振りが順方向であるか逆方向であるかを判別する際に好適である。第1の例として、コントローラ7をテニスゲームにおけるラケットのように把持してスイングをする場合、フォアハンドとバックハンドとを区別する。第2の例として、コントローラ7を野球ゲームにおけるバットのように把持してスイングをする場合、ボールを打撃するスイングを開始するまでのコントローラ7の動きを判別する。第3の例として、刀剣等を用いて対戦するゲームにおける刀剣のようにコントローラ7を把持して振る場合、プレイヤが強く振るまでのコントローラ7の動きを判別する。
【0146】
また、本発明は、ゲーム以外の情報処理で行われる加速度データの判定処理に用いてもかまわない。例えば、ゲーム装置3のユーザにコントローラ7を振り動かす運動を促すことによって、当該ユーザの運動を支援する運動支援プログラムを実行する際の加速度データ判定処理に用いてもかまわない。
【0147】
また、上述した説明では、判定された振り方向に基づいて、3次元の仮想ゲーム空間におけるプレイヤキャラクタPCがボールオブジェクトBOをショットするゴルフゲームを用いたが、本発明は、他の態様のゲームにも適用できることは言うまでもない。例えば、2次元の仮想ゲーム世界を用いて、プレイヤキャラクタPCがボールオブジェクトBOをショットするゲームであっても、本発明を適用することができる。
【0148】
また、上述した説明では、据置型のゲーム装置に本願発明を適用した例を説明したが、加速度センサを備えた入力装置によって操作される一般的なパーソナルコンピュータ等の情報処理装置にも適用することができる。例えば、入力装置の加速度センサから出力される加速度データに応じて、情報処理装置が入力装置を把持しているユーザの振り方向を算出する等、入力装置に生じる加速度に基づいて様々なゲーム処理を行うことができる。
【0149】
また、上述した説明では、コントローラ7とゲーム装置本体5とが無線通信によって接続された態様を用いたが、コントローラ7とゲーム装置本体5とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ7に接続されたケーブルをゲーム装置本体5の接続端子に接続する。
【0150】
また、上述したコントローラ7の形状や、それらに設けられている操作部72の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、上述した処理で用いられる係数、閾値、数式、処理順序等は、単なる一例に過ぎず他の値や数式や処理順序であっても、本発明を実現できることは言うまでもない。
【0151】
また、本発明のゲームプログラムは、光ディスク4等の外部記憶媒体を通じてゲーム装置本体5に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置本体5に供給されてもよい。また、ゲームプログラムは、ゲーム装置本体5内部の不揮発性記憶装置に予め記録されていてもよい。なお、ゲームプログラムを記憶する情報記憶媒体としては、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体の他に、不揮発性半導体メモリでもよい。
【0152】
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示にすぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施形態の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。
【産業上の利用可能性】
【0153】
本発明に係る情報処理プログラムおよび情報処理装置は、入力装置に生じた加速度を用いて当該入力装置が振られた方向を精確に判別することができ、入力装置を振る操作を用いてユーザの運動を支援する運動支援装置や運動支援プログラムとして有用であり、さらに入力装置を振る操作を用いてゲーム等を実行するゲーム装置やゲームプログラム等としても有用である。
【符号の説明】
【0154】
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…コントローラ
71…ハウジング
72…操作部
73…コネクタ
74…撮像情報演算部
741…赤外線フィルタ
742…レンズ
743…撮像素子
744…画像処理回路
75…通信部
751…マイコン
752…メモリ
753…無線モジュール
754…アンテナ
700…基板
701…加速度センサ
702…LED
704…バイブレータ
707…サウンドIC
708…アンプ
8…マーカ

【特許請求の範囲】
【請求項1】
入力装置に対する少なくとも2軸方向の加速度をそれぞれ検出する加速度センサから出力される加速度データを用いた処理を行う情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記コンピュータを、
前記加速度データを繰り返し取得するデータ取得手段と、
前記データ取得手段が取得した第1加速度データに基づいて第1加速度ベクトルを生成し、当該第1加速度データに対して前記データ取得手段が時系列的に取得した第2加速度データに基づいて第2加速度ベクトルを生成する加速度ベクトル生成手段と、
前記第1加速度ベクトルと前記第2加速度ベクトルとの外積の向きを算出する外積方向算出手段と、
前記外積の向きに基づいて、前記入力装置の振り方向を判別する振り方向判別手段として機能させる、情報処理プログラム。
【請求項2】
前記振り方向判別手段は、前記外積の向きが第1の方向か、当該第1の方向と逆方向の第2の方向であるかに基づいて、前記入力装置の振り方向を判別する、請求項1に記載の情報処理プログラム。
【請求項3】
前記振り方向判別手段は、前記外積の向きが前記第1の方向である場合、前記入力装置の振り方向が第3の方向であると判別し、前記外積の向きが前記第2の方向である場合には、前記入力装置の振り方向が当該第3の方向とは逆方向となる第4の方向であると判別する、請求項2に記載の情報処理プログラム。
【請求項4】
前記外積方向算出手段は、前記第1加速度ベクトルと前記第2加速度ベクトルとの外積の所定方向の成分を示す外積値を算出する外積値算出手段を含み、
前記振り方向判別手段は、前記外積値に基づいて、前記入力装置の振り方向を判別する、請求項1に記載の情報処理プログラム。
【請求項5】
前記振り方向判別手段は、前記外積値が正か負かに基づいて、前記入力装置の振り方向を判別する、請求項4に記載の情報処理プログラム。
【請求項6】
前記外積方向算出手段は、
前記第1加速度ベクトルと前記第2加速度ベクトルとの外積の所定方向の成分を示す外積値を算出する外積値算出手段と、
前記外積値が、負の値で予め設定された第1閾値未満であるか否かを判定する第1閾値判定手段と、
正の値で、かつ、前記第1閾値とは絶対値が異なる第2閾値より、前記外積値が大きいか否かを判定する第2閾値判定手段とを含み、
前記振り方向判別手段は、前記外積値が前記第1閾値未満であると前記第1閾値判定手段が判定した場合に前記入力装置の振り方向が前記第3の方向であると判別し、前記外積値が前記第2閾値より大きいと前記第2閾値判定手段が判定した場合に前記入力装置の振り方向が前記第4の方向であると判別する、請求項3に記載の情報処理プログラム。
【請求項7】
前記振り方向判別手段は、前記外積値が前記第1閾値以上であると前記第1閾値判定手段が判定し、かつ、当該外積値が前記第2閾値以下であると前記第2閾値判定手段が判定した場合、前記入力装置が振られていないと判断する、請求項6に記載の情報処理プログラム。
【請求項8】
前記加速度センサは、前記入力装置に対する少なくとも3軸方向の加速度をそれぞれ検出して、当該加速度に応じた加速度データを出力し、
前記加速度ベクトル生成手段は、前記3軸を座標軸とする空間に所定の射影平面を設定し、当該空間内に配置した前記第1加速度データが示す第1加速度および前記第2加速度データが示す第2加速度をそれぞれ当該射影平面に射影することによって前記第1加速度ベクトルおよび前記第2加速度ベクトルをそれぞれ生成する、請求項1乃至7のいずれか1つに記載の情報処理プログラム。
【請求項9】
前記加速度センサは、前記入力装置に対する少なくとも3軸方向の加速度をそれぞれ検出して、当該加速度に応じた加速度データを出力し、
前記加速度ベクトル生成手段は、前記3軸を座標軸とする空間に、前記第3の方向および前記第4の方向に振られる前記入力装置において想定される振りの回転軸に対して非平行に射影平面を設定し、当該空間内に配置した前記第1加速度データが示す第1加速度および前記第2加速度データが示す第2加速度をそれぞれ当該射影平面に射影することによって前記第1加速度ベクトルおよび前記第2加速度ベクトルをそれぞれ生成する、請求項3に記載の情報処理プログラム。
【請求項10】
前記加速度ベクトル生成手段は、前記空間において前記回転軸に対して実質的に垂直に前記射影平面を設定する、請求項9に記載の情報処理プログラム。
【請求項11】
前記加速度センサは、前記入力装置に対する少なくとも3軸方向の加速度をそれぞれ検出して、当該加速度に応じた加速度データを出力し、
前記入力装置が前記第3の方向に振られた場合に前記3軸を座標軸とする空間で描かれる前記加速度センサが検出する加速度の軌跡は、所定の平面に射影された場合に実質的に円形状で描かれ、
前記入力装置が前記第4の方向に振られた場合に前記空間で描かれる前記加速度センサが検出する加速度の軌跡は、前記所定の平面に射影された場合に実質的に円形状で前記入力装置が前記第3の方向に振られた場合に得られる軌跡の時系列的な方向とは逆方向で描かれ、
前記加速度ベクトル生成手段は、前記所定の平面に対して実質的に非垂直に射影平面を設定し、当該空間内に配置した前記第1加速度データが示す第1加速度および前記第2加速度データが示す第2加速度をそれぞれ当該射影平面に射影することによって前記第1加速度ベクトルおよび前記第2加速度ベクトルをそれぞれ生成する、請求項3に記載の情報処理プログラム。
【請求項12】
前記加速度ベクトル生成手段は、前記所定の平面に対して実質的に平行に前記射影平面を設定する、請求項11に記載の情報処理プログラム。
【請求項13】
前記加速度ベクトル生成手段は、前記第1加速度における前記3軸方向成分のうち2軸方向の成分を前記射影平面上に射影した値と他の1軸方向の成分の値とを用いて前記第1加速度ベクトルを生成し、前記第2加速度における当該2軸方向の成分を前記射影平面上に射影した値と前記第2加速度における当該他の1軸方向の成分の値とを用いて前記第2加速度ベクトルを生成する、請求項8に記載の情報処理プログラム。
【請求項14】
前記外積値算出手段によって算出された外積値に基づいて、前記振り方向判別手段が判別する振り方向に対する角度を算出する角度算出手段と、
前記角度算出手段が算出した角度に応じて、仮想世界におけるオブジェクトを当該角度に基づいて配置して表示装置に表示する表示制御手段として、さらに前記コンピュータを機能させる、請求項4乃至7の何れか1つに記載の情報処理プログラム。
【請求項15】
前記角度算出手段は、前記外積値算出手段によって算出された外積値に基づいて、前記振り方向判別手段が判別する振り方向に対する角速度を算出し、当該角速度に基づいて前記角度を算出する、請求項14に記載の情報処理プログラム。
【請求項16】
前記角度算出手段は、前記外積値算出手段によって算出された外積値に基づいて、前記振り方向判別手段が判別する振り方向に対する角加速度を算出し、当該角加速度に基づいて前記角速度を算出する、請求項15に記載の情報処理プログラム。
【請求項17】
入力装置に対する少なくとも2軸方向の加速度をそれぞれ検出する加速度センサから出力される加速度データを用いた処理を行う情報処理装置であって、
前記加速度データを繰り返し取得するデータ取得手段と、
前記データ取得手段が取得した第1加速度データに基づいて第1加速度ベクトルを生成し、当該第1加速度データに対して前記データ取得手段が時系列的に取得した第2加速度データに基づいて第2加速度ベクトルを生成する加速度ベクトル生成手段と、
前記第1加速度ベクトルと前記第2加速度ベクトルとの外積の向きを算出する外積方向算出手段と、
前記外積の向きに基づいて、前記入力装置の振り方向を判別する振り方向判別手段とを備える、情報処理装置。

【図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


【公開番号】特開2011−65251(P2011−65251A)
【公開日】平成23年3月31日(2011.3.31)
【国際特許分類】
【出願番号】特願2009−213343(P2009−213343)
【出願日】平成21年9月15日(2009.9.15)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】