(57)【特許請求の範囲】
【請求項１】
入力装置に加わる少なくとも２軸方向の加速度を検出する加速度センサから出力される加速度データに基づいた処理を実行する情報処理装置のコンピュータに実行させる情報処理プログラムであって、
前記コンピュータを、
単位時間間隔で前記加速度データを前記加速度センサから取得し、所定のメモリに記憶する加速度データ取得手段と、
前記加速度データ取得手段が取得した加速度データを前記メモリから読み出し、当該読み出した加速度データに基づいて加速度の変化量を示す変化量ベクトルを算出する変化量ベクトル算出手段と、
前記変化量ベクトル算出手段が算出した変化量ベクトルの大きさが第１の閾値以上か否かを前記単位時間間隔で判定する第１判定手段と、
前記変化量ベクトルの大きさが前記第１の閾値以上と前記第１判定手段が判定したときに、所定の処理を実行する処理実行手段と、
前記変化量ベクトルの大きさが前記第１の閾値以上と前記第１判定手段が判定したときに、前記入力装置が振られた方向である振り方向を前記変化量ベクトルに基づいて算出する振り方向算出手段と、
前記振り方向算出手段が前記振り方向を算出した後、当該振り方向とは逆の方向に少なくとも一つの第２の閾値を設定する第２閾値設定手段と、
前記変化量ベクトルが前記第２の閾値と交差したか否かを判定する第２判定手段と、
前記第２判定手段が、前記変化量ベクトルが前記第２の閾値と交差したと判定した後、前記変化量ベクトルの大きさが前記第１の閾値以下の閾値である第３の閾値未満であるか否かを判定する第３判定手段として機能させ、
前記第１判定手段は、前記変化量ベクトルの大きさが前記第１の閾値以上であると判定したときは、その後、前記変化量ベクトルの大きさが前記第３の閾値未満であると前記第３判定手段が判定するのを待ってから、前記変化量ベクトルの大きさが第１の閾値以上か否かの前記単位時間間隔での判定を再開する、情報処理プログラム。
【請求項２】
前記第２閾値設定手段は、前記第２の閾値を、前記変化量ベクトルの次元数に基づく空間内において前記振り方向に対して垂直となる直線または平面として表される値で設定し、
前記第２判定手段は、前記空間内において前記変化量ベクトルで示される直線が前記振り方向に対して垂直となる直線または平面と交差したか否かを判定する、請求項１に記載の情報処理プログラム。
【請求項３】
前記第２閾値設定手段は、前記第２の閾値を、前記空間内における原点から前記振り方向とは逆の方向に所定の距離だけ離れた位置にある前記直線または平面として表される値で設定する、請求項２に記載の情報処理プログラム。
【請求項４】
前記振り方向算出手段は、前記変化量ベクトルの大きさが前記第１の閾値以上であると前記第１判定手段が判定したときの当該変化量ベクトルで示される方向を前記振り方向とする、請求項１に記載の情報処理プログラム。
【請求項５】
前記振り方向算出手段は、前記変化量ベクトルの大きさが前記第１の閾値以上であると前記第１判定手段が判定したとき、当該判定時点から所定時間が経過した後に得られる加速度データに基づく変化量ベクトルで示される方向を前記振り方向とする、請求項１に記載の情報処理プログラム。
【請求項６】
前記振り方向算出手段は、前記変化量ベクトルの大きさが前記第１の閾値以上であると前記第１判定手段が判定したとき、当該判定時点から所定時間分の変化量ベクトルを合成して合成ベクトルを算出する合成ベクトル算出手段を含み、
前記合成ベクトルで示される方向を前記振り方向とする、請求項１に記載の情報処理プログラム。
【請求項７】
前記第２閾値設定手段は、前記第２の閾値を、前記変化量ベクトルの大きさが前記第１の閾値以上と前記第１判定手段が判定したときの当該変化量ベクトルの大きさに応じた値で設定する、請求項１に記載の情報処理プログラム。
【請求項８】
前記情報処理プログラムは、前記コンピュータを、前記変化量ベクトルの大きさに応じて前記第１の閾値を所定のタイミングで増加させる閾値増加手段として更に機能させる、請求項１に記載の情報処理プログラム。
【請求項９】
前記情報処理プログラムは、前記コンピュータを、前記閾値増加手段が前記第１の閾値を増加させた後、時間経過と共に徐々に前記第１の閾値を減少する減少手段として更に機能させる、請求項８に記載の情報処理プログラム。
【請求項１０】
前記第２判定手段は、前記変化量ベクトルと前記振り方向との内積を算出し、当該内積と前記第２の閾値とを比較することで前記交差したか否かの判定を行う、請求項１に記載の情報処理プログラム。
【請求項１１】
入力装置に加わる少なくとも２軸方向の加速度を検出する加速度センサから出力される加速度データに基づいた処理を実行する情報処理装置であって、
単位時間間隔で前記加速度データを前記加速度センサから取得し、所定のメモリに記憶する加速度データ取得手段と、
前記加速度データ取得手段が取得した加速度データを前記メモリから読み出し、当該読み出した加速度データに基づいて加速度の変化量を示す変化量ベクトルを算出する変化量ベクトル算出手段と、
前記変化量ベクトル算出手段が算出した変化量ベクトルの大きさが第１の閾値以上か否かを前記単位時間間隔で判定する第１判定手段と、
前記変化量ベクトルの大きさが前記第１の閾値以上と前記第１判定手段が判定したときに、所定の処理を実行する処理実行手段と、
前記変化量ベクトルの大きさが前記第１の閾値以上と前記第１判定手段が判定したときに、前記入力装置が振られた方向である振り方向を前記変化量ベクトルに基づいて算出する振り方向算出手段と、
前記振り方向算出手段が前記振り方向を算出した後、当該振り方向とは逆の方向に少なくとも一つの第２の閾値を設定する第２閾値設定手段と、
前記変化量ベクトルが前記第２の閾値と交差したか否かを判定する第２判定手段と、
前記第２判定手段が、前記変化量ベクトルが前記第２の閾値と交差したと判定した後、前記変化量ベクトルの大きさが前記第１の閾値以下の閾値である第３の閾値未満であるか否かを判定する第３判定手段とを備え、
前記第１判定手段は、前記変化量ベクトルの大きさが前記第１の閾値以上であると判定したときは、その後、前記変化量ベクトルの大きさが前記第３の閾値未満であると前記第３判定手段が判定するのを待ってから、前記変化量ベクトルの大きさが第１の閾値以上か否かの前記単位時間間隔での判定を再開する、情報処理装置。
【請求項１２】
入力装置に加わる少なくとも２軸方向の加速度を検出する加速度センサから出力される加速度データに基づいた処理を実行する情報処理システムであって、
単位時間間隔で前記加速度データを前記加速度センサから取得し、所定のメモリに記憶する加速度データ取得手段と、
前記加速度データ取得手段が取得した加速度データを前記メモリから読み出し、当該読み出した加速度データに基づいて加速度の変化量を示す変化量ベクトルを算出する変化量ベクトル算出手段と、
前記変化量ベクトル算出手段が算出した変化量ベクトルの大きさが第１の閾値以上か否かを前記単位時間間隔で判定する第１判定手段と、
前記変化量ベクトルの大きさが前記第１の閾値以上と前記第１判定手段が判定したときに、所定の処理を実行する処理実行手段と、
前記変化量ベクトルの大きさが前記第１の閾値以上と前記第１判定手段が判定したときに、前記入力装置が振られた方向である振り方向を前記変化量ベクトルに基づいて算出する振り方向算出手段と、
前記振り方向算出手段が前記振り方向を算出した後、当該振り方向とは逆の方向に少なくとも一つの第２の閾値を設定する第２閾値設定手段と、
前記変化量ベクトルが前記第２の閾値と交差したか否かを判定する第２判定手段と、
前記第２判定手段が、前記変化量ベクトルが前記第２の閾値と交差したと判定した後、前記変化量ベクトルの大きさが前記第１の閾値以下の閾値である第３の閾値未満であるか否かを判定する第３判定手段とを備え、
前記第１判定手段は、前記変化量ベクトルの大きさが前記第１の閾値以上であると判定したときは、その後、前記変化量ベクトルの大きさが前記第３の閾値未満であると前記第３判定手段が判定するのを待ってから、前記変化量ベクトルの大きさが第１の閾値以上か否かの前記単位時間間隔での判定を再開する、情報処理システム。
【請求項１３】
入力装置に加わる少なくとも２軸方向の加速度を検出する加速度センサから出力される加速度データに基づいた処理を実行する情報処理装置を制御するための情報処理方法であって、
単位時間間隔で前記加速度データを前記加速度センサから取得し、所定のメモリに記憶する加速度データ取得ステップと、
前記加速度データ取得ステップにおいて記憶された加速度データを前記メモリから読み出し、当該読み出した加速度データに基づいて加速度の変化量を示す変化量ベクトルを算出する変化量ベクトル算出ステップと、
前記変化量ベクトル算出ステップにおいて算出されたた変化量ベクトルの大きさが第１の閾値以上か否かを前記単位時間間隔で判定する第１判定ステップと、
前記変化量ベクトルの大きさが前記第１の閾値以上と前記第１判定ステップで判定されたときに、所定の処理を実行する処理実行ステップと、
前記変化量ベクトルの大きさが前記第１の閾値以上と前記第１判定ステップで判定されたときに、前記入力装置が振られた方向である振り方向を前記変化量ベクトルに基づいて算出する振り方向算出ステップと、
前記振り方向算出ステップで前記振り方向を算出した後、当該振り方向とは逆の方向に少なくとも一つの第２の閾値を設定する第２閾値設定ステップと、
前記変化量ベクトルが前記第２の閾値と交差したか否かを判定する第２判定ステップと、
前記第２判定ステップにおいて、前記変化量ベクトルが前記第２の閾値と交差したと判定された後、前記変化量ベクトルの大きさが前記第１の閾値以下の閾値である第３の閾値未満であるか否かを判定する第３判定ステップとを備え、
前記第１判定ステップでは、前記変化量ベクトルの大きさが前記第１の閾値以上であると判定されたときは、その後、前記変化量ベクトルの大きさが前記第３の閾値未満であると前記第３判定ステップで判定されるのを待ってから、前記変化量ベクトルの大きさが第１の閾値以上か否かの前記単位時間間隔での判定を再開する、情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、加速度データに基づいて所定の処理を行う情報処理に関し、より特定的には、入力装置に加わる少なくとも２軸方向の加速度を検出する加速度センサから出力される加速度データに基づいた処理を実行する情報処理に関する。
【背景技術】
【０００２】
従来から、加速度センサを内蔵した入力装置を利用したゲーム装置が知られている。たとえば、プレイヤが当該入力装置を「振る」という動作を行ってゲームを進行させるようなゲームプログラム等が知られている。
【０００３】
ここで、プレイヤが上記のような入力装置を把持して振った場合、振り始めは加速して振り終わりは減速となる。したがって、入力装置には、振り始めで振っている方向と同じ方向の加速度が生じた後、徐々に加速度の大きさが減少して、振り終わりで振っている方向とは逆の方向に加速度が生じる。
【０００４】
そのため、「振り」動作の判定について、例えば、加速度が所定の閾値を超えたときに振り動作が発生したと判定する場合は、上記のような、振っている方向と同じ方向の加速度が所定の閾値を越えたことの判定の他、振った方向と逆の方向に生じた加速度によって所定の閾値を越えたことの判定が行われることがある。つまり、所定の閾値を越えたとする判定が２回されることがある。その結果、プレイヤからすれば一度の「振り」動作のつもりが、２回分の「振り」動作が行われたと検出されることがあった。
【０００５】
このような不都合に鑑みて、入力装置の加速度が一旦所定の閾値を越えた後、所定の時間内は、再度加速度が所定の閾値を越えても、「振り」動作として検出しないような技術が開示されている（例えば特許文献１）。
【特許文献１】特開２００７−３００９７３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述したような特許文献１に開示されたプログラムにおいては、次のような問題点があった。まず、上述のような所定の閾値を越えた後の上記「所定の時間」が長い時間に設定されている場合は、プレイヤが、短い時間内で連続して「振り」動作を行ったようなときに、正確に「振り」の発生が検出できないという問題があった。つまり、プレイヤが短い時間、例えば「所定の時間」が２秒間に設定されている場合に、２秒間に５回程度の「振り」を発生させたときでは、「所定の時間」内での「振り」が検出されずに、ゲーム処理においては１回分の振りしか検出されないということがあった。その一方で、上記の「所定の時間」を短く設定すると、結局は上述したような逆方向の加速度による誤検出が発生してしまうという問題があった。
【０００７】
それ故に、本発明の目的は、加速度センサを備えた入力装置を「振る」操作を、より正確に検出できる情報処理プログラム、および、情報処理装置を提供することである。
【課題を解決するための手段】
【０００８】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係の一例を示したものであって、本発明を何ら限定するものではない。
【０００９】
第１の発明は、入力装置に加わる少なくとも２軸方向の加速度を検出する加速度センサから出力される加速度データに基づいた処理を実行する情報処理装置のコンピュータに実行させる情報処理プログラムであって、コンピュータを、加速度データ取得手段（Ｓ３１）と、変化量ベクトル算出手段（Ｓ３２，Ｓ３４）と、第１判定手段（Ｓ２６）と、処理実行手段（Ｓ２７）と、振り方向算出手段（Ｓ３）と、第２閾値設定手段（Ｓ４）と、第２判定手段（Ｓ４）と、第３判定手段（Ｓ５）として機能させる。加速度データ取得手段は、単位時間間隔で加速度データを取得する。変化量ベクトル算出手段は、加速度データ取得手段が取得した加速度データに基づいて加速度の変化量を示す変化量ベクトルを算出する。第１判定手段は、変化量ベクトル算出手段が算出した変化量ベクトルの大きさが第１の閾値以上か否かを単位時間間隔で判定する。処理実行手段は、変化量ベクトルの大きさが第１の閾値以上と第１判定手段が判定したときに所定の処理を実行する。振り方向算出手段は、変化量ベクトルの大きさが第１の閾値以上と第１判定手段が判定したときに、入力装置が振られた方向である振り方向を変化量ベクトルに基づいて算出する。第２閾値設定手段は、振り方向算出手段が振り方向を算出した後、当該振り方向とは逆の方向に少なくとも一つの第２の閾値を設定する。第２判定手段は、変化量ベクトルが第２の閾値と交差したか否かを判定する。第３判定手段は、第２判定手段が、変化量ベクトルが第２の閾値と交差したと判定した後、変化量ベクトルの大きさが第１の閾値以下の閾値である第３の閾値未満であるか否かを判定する。そして、上記のような構成において、第１判定手段は、変化量ベクトルの大きさが第１の閾値以上であると判定したときは、その後、変化量ベクトルの大きさが第３の閾値未満であると第３判定手段が判定するのを待ってから、変化量ベクトルの大きさが第１の閾値以上か否かの単位時間間隔での判定を再開する。
【００１０】
第１の発明によれば、プレイヤの意図する１回分の振り操作が２回分の振り操作として誤検出されることを防ぐことができる。
【００１１】
第２の発明は、第１の発明において、第２閾値設定手段は、第２の閾値を、変化量ベクトルの次元数に基づく空間内において振り方向に対して垂直となる直線または平面として表される値で設定する。また、第２判定手段は、空間内において変化量ベクトルで示される直線が振り方向に対して垂直となる直線または平面と交差したか否かを判定する。
【００１２】
第３の発明は、第２の発明において、第２閾値設定手段は、第２の閾値を空間内における原点から振り方向とは逆の方向に所定の距離だけ離れた位置にある直線または平面として表される値で設定する。
【００１３】
第２乃至第３の発明によれば、第１の発明と同様の効果を得ることができる。
【００１４】
第４の発明は、第１の発明において、振り方向算出手段は、変化量ベクトルが第１の閾値以上であると第１判定手段が判定したときの当該変化量ベクトルで示される方向を振り方向とする。
【００１５】
第５の発明は、第１の発明において、振り方向算出手段は、変化量ベクトルの大きさが第１の閾値以上であると第１判定手段が判定したとき、当該判定時点から所定時間が経過した後に得られる加速度データに基づく変化量ベクトルで示される方向を振り方向とする。
【００１６】
第６の発明は、第１の発明において、振り方向算出手段は、変化量ベクトルの大きさが第１の閾値以上であると第１判定手段が判定したとき、当該判定時点から所定時間分の変化量ベクトルを合成して合成ベクトルを算出する合成ベクトル算出手段（Ｓ５５）を含む。そして、振り方向算出手段は、合成ベクトルで示される方向を振り方向とする。
【００１７】
第４乃至第６の発明によれば、より正確に振り方向を算出することが可能となる。
【００１８】
第７の発明は、第１の発明において、第２閾値設定手段は、第２の閾値を変化量ベクトルの大きさが第１の閾値以上と第１判定手段が判定したときの当該変化量ベクトルの大きさに応じた値で設定する。
【００１９】
第７の発明によれば、プレイヤの振りの強さに応じて、１回分の振り操作が２回分の振り操作として誤検出されることを防ぐことが可能となる。
【００２０】
第８の発明は、第１の発明において、情報処理プログラムは、コンピュータを、変化量ベクトルの大きさに応じて第１の閾値を所定のタイミングで増加させる閾値増加手段（Ｓ２１）として更に機能させる。
【００２１】
第８の発明によれば、変化量ベクトルの大きさが第１の閾値以上であるとの判定が、プレイヤの意図に反して連続的に行われることを防ぐことができる。
【００２２】
第９の発明は、第８の発明において、情報処理プログラムは、コンピュータを、閾値増加手段が第１の閾値を増加させた後、時間経過と共に徐々に第１の閾値を減少する減少手段（Ｓ２４）として更に機能させる。
【００２３】
第９の発明によれば、プレイヤ毎に異なる振り方の違いによる影響を軽減することができる。
【００２４】
第１０の発明は、第１の発明において、第２判定手段は、変化量ベクトルと振り方向との内積を算出し、当該内積と第２の閾値とを比較することで交差したか否かの判定を行う。
【００２５】
第１０の発明によれば、コンピュータの処理負荷を軽減することができる。
【００２６】
第１１の発明は、入力装置に加わる少なくとも２軸方向の加速度を検出する加速度センサから出力される加速度データに基づいた処理を実行する情報処理装置であって、加速度データ取得手段（１０）と、変化量ベクトル算出手段（１０）と、第１判定手段（１０）と、処理実行手段（１０）と、振り方向算出手段（１０）と、第２閾値設定手段（１０）と、第２判定手段（１０）と、第３判定手段（１０）とを備える。加速度データ取得手段は、単位時間間隔で加速度データを取得する。変化量ベクトル算出手段は、加速度データ取得手段が取得した加速度データに基づいて加速度の変化量を示す変化量ベクトルを算出する。第１判定手段は、変化量ベクトル算出手段が算出した変化量ベクトルの大きさが第１の閾値以上か否かを単位時間間隔で判定する。処理実行手段は、変化量ベクトルの大きさが第１の閾値以上と第１判定手段が判定したときに所定の処理を実行する。振り方向算出手段は、変化量ベクトルの大きさが第１の閾値以上と第１判定手段が判定したときに、入力装置が振られた方向である振り方向を変化量ベクトルに基づいて算出する。第２閾値設定手段は、振り方向算出手段が振り方向を算出した後、当該振り方向とは逆の方向に少なくとも一つの第２の閾値を設定する。第２判定手段は、振り方向算出手段が振り方向を算出した後、当該振り方向とは逆の方向に向かって推移する変化量ベクトルが第２の閾値と交差したか否かを判定する。第３判定手段は、第２判定手段が、変化量ベクトルが第２の閾値と交差したと判定した後、変化量ベクトルの大きさが第１の閾値以下の閾値である第３の閾値未満であるか否かを判定する。そして、上記のような構成において、第１判定手段は、変化量ベクトルの大きさが第１の閾値以上であると判定したときは、その後、変化量ベクトルの大きさが第３の閾値未満であると第３判定手段が判定するのを待ってから、変化量ベクトルの大きさが第１の閾値以上か否かの単位時間間隔での判定を再開する。
【００２７】
第１１の発明によれば、上記第１の発明と同様の効果を得ることができる。
【発明の効果】
【００２８】
本発明によれば、加速度センサを備えた入力装置を「振る」操作を、より正確に検出することができる。
【発明を実施するための最良の形態】
【００２９】
以下、本発明の実施の形態について、図面を参照して説明する。尚、この実施例により本発明が限定されるものではない。
【００３０】
（ゲームシステムの全体構成）
図１を参照して、本発明の実施形態に係るゲーム装置を含むゲームシステム１について説明する。図１は、ゲームシステム１の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図１において、ゲームシステム１は、テレビジョン受像器（以下、単に「テレビ」と記載する）２、ゲーム装置３、光ディスク４、コントローラ７、およびマーカ部８を含む。本システムは、コントローラ７を用いたゲーム操作に基づいてゲーム装置３でゲーム処理を実行するものである。
【００３１】
ゲーム装置３には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例である光ディスク４が脱着可能に挿入される。光ディスク４には、ゲーム装置３において実行されるためのゲームプログラムが記憶されている。ゲーム装置３の前面には光ディスク４の挿入口が設けられている。ゲーム装置３は、挿入口に挿入された光ディスク４に記憶されたゲームプログラムを読み出して実行することによってゲーム処理を実行する。
【００３２】
ゲーム装置３には、表示装置の一例であるテレビ２が接続コードを介して接続される。テレビ２には、ゲーム装置３において実行されるゲーム処理の結果得られるゲーム画像が表示される。また、テレビ２の画面の周辺（図１では画面の上側）には、マーカ部８が設置される。マーカ部８は、その両端に２つのマーカ８Ｒおよび８Ｌを備えている。マーカ８Ｒ（マーカ８Ｌも同様）は、具体的には１以上の赤外ＬＥＤであり、テレビ２の前方に向かって赤外光を出力する。マーカ部８はゲーム装置３に接続されており、ゲーム装置３はマーカ部８が備える各赤外ＬＥＤの点灯を制御することが可能である。
【００３３】
コントローラ７は、当該コントローラ７自身に対して行われた操作の内容を示す操作データをゲーム装置３に与える入力装置である。コントローラ７とゲーム装置３とは無線通信によって接続される。本実施形態では、コントローラ７とゲーム装置３との間の無線通信には例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術が用いられる。なお、他の実施形態においてはコントローラ７とゲーム装置３とは有線で接続されてもよい。
【００３４】
（ゲーム装置３の内部構成）
次に、図２を参照して、ゲーム装置３の内部構成について説明する。図２は、ゲーム装置３の構成を示すブロック図である。ゲーム装置３は、ＣＰＵ１０、システムＬＳＩ１１、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４、およびＡＶ−ＩＣ１５等を有する。
【００３５】
ＣＰＵ１０は、光ディスク４に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ１０は、システムＬＳＩ１１に接続される。システムＬＳＩ１１には、ＣＰＵ１０の他、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４およびＡＶ−ＩＣ１５が接続される。システムＬＳＩ１１は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムＬＳＩの内部構成について後述する。揮発性の外部メインメモリ１２は、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ１３は、ゲーム装置３の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ：Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）とを有する。ディスクドライブ１４は、光ディスク４からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ１１ｅまたは外部メインメモリ１２に読み出したデータを書き込む。
【００３６】
また、システムＬＳＩ１１には、入出力プロセッサ１１ａ、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）１１ｂ、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）１１ｃ、ＶＲＡＭ１１ｄ、および内部メインメモリ１１ｅが設けられる。図示は省略するが、これらの構成要素１１ａ〜１１ｅは内部バスによって互いに接続される。
【００３７】
ＧＰＵ１１ｂは、描画手段の一部を形成し、ＣＰＵ１０からのグラフィクスコマンド（作画命令）に従って画像を生成する。より具体的には、ＧＰＵ１１ｂは、当該グラフィクスコマンドに従って３Ｄグラフィックスの表示に必要な計算処理、例えば、レンダリングの前処理にあたる３Ｄ座標から２Ｄ座標への座標変換などの処理や、テクスチャの張り込みなどの最終的なレンダリング処理を行うことで、ゲーム画像データを生成する。ここで、ＣＰＵ１０は、グラフィクスコマンドに加えて、ゲーム画像データの生成に必要な画像生成プログラムをＧＰＵ１１ｂに与える。ＶＲＡＭ１１ｄは、ＧＰＵ１１ｂがグラフィクスコマンドを実行するために必要なデータ（ポリゴンデータやテクスチャデータ等のデータ）を記憶する。画像が生成される際には、ＧＰＵ１１ｂは、ＶＲＡＭ１１ｄに記憶されたデータを用いて画像データを作成する。
【００３８】
ＤＳＰ１１ｃは、オーディオプロセッサとして機能し、内部メインメモリ１１ｅや外部メインメモリ１２に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。また、内部メインメモリ１１ｅは、外部メインメモリ１２と同様に、プログラムや各種データを記憶したり、ＣＰＵ１０のワーク領域やバッファ領域としても用いられる。
【００３９】
上述のように生成された画像データおよび音声データは、ＡＶ−ＩＣ１５によって読み出される。ＡＶ−ＩＣ１５は、読み出した画像データをＡＶコネクタ１６を介してテレビ２に出力するとともに、読み出した音声データを、テレビ２に内蔵されるスピーカ２ａに出力する。これによって、画像がテレビ２に表示されるとともに音がスピーカ２ａから出力される。
【００４０】
入出力プロセッサ（Ｉ／Ｏプロセッサ）１１ａは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ１１ａは、フラッシュメモリ１７、無線通信モジュール１８、無線コントローラモジュール１９、拡張コネクタ２０、およびメモリカード用コネクタ２１に接続される。無線通信モジュール１８にはアンテナ２２が接続され、無線コントローラモジュール１９にはアンテナ２３が接続される。
【００４１】
入出力プロセッサ１１ａは、無線通信モジュール１８およびアンテナ２２を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ１１ａは、定期的にフラッシュメモリ１７にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール１８およびアンテナ２２を介してネットワークに送信する。また、入出力プロセッサ１１ａは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ２２および無線通信モジュール１８を介して受信し、受信したデータをフラッシュメモリ１７に記憶する。ＣＰＵ１０はゲームプログラムを実行することにより、フラッシュメモリ１７に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ１７には、ゲーム装置３と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置３を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００４２】
また、入出力プロセッサ１１ａは、コントローラ７から送信される操作データをアンテナ２３および無線コントローラモジュール１９を介して受信し、内部メインメモリ１１ｅまたは外部メインメモリ１２のバッファ領域に記憶（一時記憶）する。
【００４３】
さらに、入出力プロセッサ１１ａには、拡張コネクタ２０およびメモリカード用コネクタ２１が接続される。拡張コネクタ２０は、ＵＳＢやＳＣＳＩのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール１８に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ２１は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ１１ａは、拡張コネクタ２０やメモリカード用コネクタ２１を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【００４４】
ゲーム装置３には、電源ボタン２４、リセットボタン２５、およびイジェクトボタン２６が設けられる。電源ボタン２４およびリセットボタン２５は、システムＬＳＩ１１に接続される。電源ボタン２４がオンにされると、ゲーム装置３の各構成要素に対して、図示しないＡＣアダプタを経て電源が供給される。また、一旦電源がオンにされた状態で、再度電源ボタン２４を押すと、低電力スタンバイモードへの移行が行われる。この状態でも、ゲーム装置３への通電は行われているため、インターネット等のネットワークに常時接続しておくことができる。なお、一旦電源がオンにされた状態で、電源をオフにしたいときは、電源ボタン２４を所定時間以上長押しすることで、電源をオフとすることが可能である。リセットボタン２５が押されると、システムＬＳＩ１１は、ゲーム装置３の起動プログラムを再起動する。イジェクトボタン２６は、ディスクドライブ１４に接続される。イジェクトボタン２６が押されると、ディスクドライブ１４から光ディスク４が排出される。
【００４５】
次に、図３および図４を参照して、コントローラ７について説明する。なお、図３は、コントローラ７の上面後方から見た斜視図である。図４は、コントローラ７を下面前方から見た斜視図である。
【００４６】
図３および図４において、コントローラ７は、ハウジング７１と、当該ハウジング７１の表面に設けられた複数個の操作ボタンで構成される操作部７２とを備える。本実施例のハウジング７１は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさであり、例えばプラスチック成型によって形成されている。
【００４７】
ハウジング７１上面の中央前面側に、十字キー７２ａが設けられる。この十字キー７２ａは、十字型の４方向プッシュスイッチであり、４つの方向（前後左右）に対応する操作部分が十字の突出片にそれぞれ９０°間隔で配置される。プレイヤが十字キー７２ａのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー７２ａを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
【００４８】
なお、十字キー７２ａは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に４つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記４つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、４つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング７１上面から突出した傾倒可能なスティック（いわゆる、ジョイスティック）を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー７２ａの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー７２ａの代わりに設けてもかまわない。
【００４９】
ハウジング７１上面の十字キー７２ａより後面側に、複数の操作ボタン７２ｂ〜７２ｇが設けられる。操作ボタン７２ｂ〜７２ｇは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７２ｂ〜７２ｇに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７２ｂ〜７２ｄには、１番ボタン、２番ボタン、およびＡボタン等としての機能が割り当てられる。また、操作ボタン７２ｅ〜７２ｇには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン７２ａ〜７２ｇは、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図３に示した配置例では、操作ボタン７２ｂ〜７２ｄは、ハウジング７１上面の中央前後方向に沿って並設されている。また、操作ボタン７２ｅ〜７２ｇは、ハウジング７１上面の左右方向に沿って操作ボタン７２ｂおよび７２ｄの間に並設されている。そして、操作ボタン７２ｆは、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００５０】
また、ハウジング７１上面の十字キー７２ａより前面側に、操作ボタン７２ｈが設けられる。操作ボタン７２ｈは、遠隔からゲーム装置３本体の電源をオン／オフする電源スイッチである。この操作ボタン７２ｈも、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００５１】
また、ハウジング７１上面の操作ボタン７２ｃより後面側に、複数のＬＥＤ７０２が設けられる。ここで、コントローラ７は、他のコントローラ７と区別するためにコントローラ種別（番号）が設けられている。例えば、ＬＥＤ７０２は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ７からゲーム装置３へ送信データを送信する際、上記コントローラ種別に応じて複数のＬＥＤ７０２のうち、種別に対応するＬＥＤが点灯する。
【００５２】
また、ハウジング７１上面には、操作ボタン７２ｂおよび操作ボタン７２ｅ〜７２ｇの間に後述するスピーカ（図５のスピーカ７０６）からの音を外部に放出するための音抜き孔が形成されている。
【００５３】
一方、ハウジング７１下面には、凹部が形成されている。後述で明らかとなるが、ハウジング７１下面の凹部は、プレイヤがコントローラ７の前面をマーカ８Ｌおよび８Ｒに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン７２ｉが設けられる。操作ボタン７２ｉは、例えばＢボタンとして機能する操作部である。
【００５４】
また、ハウジング７１前面には、撮像情報演算部７４の一部を構成する撮像素子７４３が設けられる。ここで、撮像情報演算部７４は、コントローラ７が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大２００フレーム／秒程度のサンプリング周期であるため比較的高速なコントローラ７の動きでも追跡して解析することができる。この撮像情報演算部７４の詳細な構成については、後述する。また、ハウジング７１の後面には、コネクタ７３が設けられている。コネクタ７３は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【００５５】
ここで、以下の説明を具体的にするために、コントローラ７に対して設定する座標系について定義する。図３および図４に示すように、互いに直交するｘｙｚ軸をコントローラ７に対して定義する。具体的には、コントローラ７の前後方向となるハウジング７１の長手方向をｚ軸とし、コントローラ７の前面（撮像情報演算部７４が設けられている面）方向をｚ軸正方向とする。また、コントローラ７の上下方向をｙ軸とし、ハウジング７１の上面（操作ボタン７２ａ等が設けられた面）方向をｙ軸正方向とする。さらに、コントローラ７の左右方向をｘ軸とし、ハウジング７１の左側面（図３では表されずに図４で表されている側面）方向をｘ軸正方向とする。
【００５６】
次に、図５および図６を参照して、コントローラ７の内部構造について説明する。なお、図５は、コントローラ７の上ハウジング（ハウジング７１の一部）を外した状態を後面側から見た斜視図である。図６は、コントローラ７の下ハウジング（ハウジング７１の一部）を外した状態を前面側から見た斜視図である。ここで、図６に示す基板７００は、図５に示す基板７００の裏面から見た斜視図となっている。
【００５７】
図５において、ハウジング７１の内部には基板７００が固設されており、当該基板７００の上主面上に操作ボタン７２ａ〜７２ｈ、加速度センサ７０１、ＬＥＤ７０２、およびアンテナ７５４等が設けられる。そして、これらは、基板７００等に形成された配線（図示せず）によってマイコン７５１等（図６、図７参照）に接続される。マイコン７５１は本願発明のボタンデータ発生手段の一例として、操作ボタン７２ａ等の種類に応じた操作ボタンデータを発生させるように機能する。この仕組みは公知技術であるが、例えばキートップ下側に配置されたタクトスイッチなどのスイッチ機構による配線の接触／切断をマイコン７５１が検出することによって実現されている。より具体的には、操作ボタンが例えば押されると配線が接触して通電するので、この通電がどの操作ボタンにつながっている配線で発生したかをマイコン７５１が検出し、操作ボタンの種類に応じた信号を発生させている。
【００５８】
また、コントローラ７は、図示しない無線モジュール７５３（図７参照）およびアンテナ７５４によって、ワイヤレスコントローラとして機能する。なお、ハウジング７１内部には図示しない水晶振動子が設けられており、後述するマイコン７５１の基本クロックを生成する。また、基板７００の上主面上に、スピーカ７０６およびアンプ７０８が設けられる。また、加速度センサ７０１は、操作ボタン７２ｄの左側の基板７００上（つまり、基板７００の中央部ではなく周辺部）に設けられる。したがって、加速度センサ７０１は、コントローラ７の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分の含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ７の回転を良好な感度でゲーム装置３等が判定することができる。
【００５９】
一方、図６において、基板７００の下主面上の前端縁に撮像情報演算部７４が設けられる。撮像情報演算部７４は、コントローラ７の前方から順に赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４によって構成されており、それぞれ基板７００の下主面に取り付けられる。また、基板７００の下主面上の後端縁にコネクタ７３が取り付けられる。さらに、基板７００の下主面上にサウンドＩＣ７０７およびマイコン７５１が設けられている。サウンドＩＣ７０７は、基板７００等に形成された配線によってマイコン７５１およびアンプ７０８と接続され、ゲーム装置３から送信されたサウンドデータに応じてアンプ７０８を介してスピーカ７０６に音声信号を出力する。
【００６０】
そして、基板７００の下主面上には、バイブレータ７０４が取り付けられる。バイブレータ７０４は、例えば振動モータやソレノイドである。バイブレータ７０４は、基板７００等に形成された配線によってマイコン７５１と接続され、ゲーム装置３から送信された振動データに応じてその作動をオン／オフする。バイブレータ７０４が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ７０４は、ハウジング７１のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング７１が大きく振動することになり、振動を感じやすくなる。
【００６１】
次に、図７を参照して、コントローラ７の内部構成について説明する。なお、図７は、コントローラ７の構成を示すブロック図である。
【００６２】
図７において、コントローラ７は、上述した操作部７２、撮像情報演算部７４、加速度センサ７０１、バイブレータ７０４、スピーカ７０６、サウンドＩＣ７０７、およびアンプ７０８の他に、その内部に通信部７５を備えている。
【００６３】
撮像情報演算部７４は、赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４を含んでいる。赤外線フィルタ７４１は、コントローラ７の前方から入射する光から赤外線のみを通過させる。レンズ７４２は、赤外線フィルタ７４１を透過した赤外線を集光して撮像素子７４３へ出射する。撮像素子７４３は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ７４２が集光した赤外線を撮像する。したがって、撮像素子７４３は、赤外線フィルタ７４１を通過した赤外線だけを撮像して画像データを生成する。撮像素子７４３で生成された画像データは、画像処理回路７４４で処理される。具体的には、画像処理回路７４４は、撮像素子７４３から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部７５へ出力する。なお、これらの撮像情報演算部７４は、コントローラ７のハウジング７１に固設されており、ハウジング７１自体の方向を変えることによってその撮像方向を変更することができる。後述により明らかとなるが、この撮像情報演算部７４から出力される処理結果データに基づいて、コントローラ７の位置や動きに応じた信号を得ることができる。
【００６４】
コントローラ７は、３軸（ｘ、ｙ、ｚ軸）の加速度センサ７０１を備えていることが好ましい。この３軸の加速度センサ７０１は、３方向、すなわち、上下方向、左右方向、および前後方向で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、上下および左右方向（または他の対になった方向）のそれぞれに沿った直線加速度のみを検知する２軸の加速度検出手段を使用してもよい。例えば、この３軸または２軸の加速度センサ７０１は、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能であるタイプのものでもよい。加速度センサ７０１は、シリコン微細加工されたＭＥＭＳ（Ｍｉｃｒｏ  Ｅｌｅｃｔｒｏ  Ｍｅｃｈａｎｉｃａｌ  Ｓｙｓｔｅｍｓ：微小電子機械システム）の技術に基づいた静電容量式（静電容量結合式）であってもよい。しかしながら、既存の加速度検出手段の技術（例えば、圧電方式や圧電抵抗方式）あるいは将来開発される他の適切な技術を用いて３軸または２軸の加速度センサ７０１が提供されてもよい。
【００６５】
当業者には公知であるように、加速度センサ７０１に用いられるような加速度検出手段は、加速度センサの持つ各軸に対応する直線に沿った加速度（直線加速度）のみを検知することができる。つまり、加速度センサ７０１からの直接の出力は、その２軸または３軸のそれぞれに沿った直線加速度（静的または動的）を示す信号である。このため、加速度センサ７０１は、非直線状（例えば、円弧状）の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【００６６】
しかしながら、加速度センサ７０１から出力される加速度の信号に基づいて、ゲーム装置のプロセッサ（例えばＣＰＵ１０）またはコントローラのプロセッサ（例えばマイコン７５１）などのコンピュータが処理を行うことによって、コントローラ７に関するさらなる情報を推測または算出（判定）することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサを搭載するコントローラが静的な状態であることを前提としてコンピュータ側で処理する場合（すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理する場合）、コントローラが現実に静的な状態であれば、検出された加速度に基づいてコントローラの姿勢が重力方向に対して傾いているか否か又はどの程度傾いているかを知ることができる。具体的には、加速度センサの検出軸が鉛直下方向を向いている状態を基準としたとき、１Ｇ（重力加速度）がかかっているか否かだけで傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかも知ることができる。また、多軸の加速度センサの場合には、さらに各軸の加速度の信号に対して処理を施すことによって、各軸が重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ７０１からの出力に基づいて、プロセッサがコントローラ７の傾き角度のデータを算出する処理をおこなってもよいが、当該傾き角度のデータを算出する処理をおこなうことなく、加速度センサ７０１からの出力に基づいて、おおよその傾き具合を推定するような処理としてもよい。このように、加速度センサ７０１をプロセッサと組み合わせて用いることによって、コントローラ７の傾き、姿勢または位置を判定することができる。一方、加速度センサが動的な状態であることを前提とする場合には、重力加速度成分に加えて加速度センサの動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、動き方向などを知ることができる。具体的には、加速度センサ７０１を備えるコントローラ７がユーザの手で動的に加速されて動かされる場合に、加速度センサ７０１によって生成される加速度信号を処理することによって、コントローラ７のさまざまな動きおよび／または位置を算出することができる。なお、加速度センサが動的な状態であることを前提とする場合であっても、加速度センサの動きに応じた加速度を所定の処理により除去すれば、重力方向対する傾きを知ることが可能である。他の実施例では、加速度センサ７０１は、信号をマイコン７５１に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサが静的な加速度（例えば、重力加速度）を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角（あるいは、他の好ましいパラメータ）に変換するものであってもよい。
【００６７】
他の実施形態の例では、コントローラ７の動きを検出する動きセンサとして、回転素子または振動素子などを内蔵したジャイロセンサを用いてもよい。この実施形態で使用されるＭＥＭＳジャイロセンサの一例として、アナログ・デバイセズ株式会社から入手可能なものがある。加速度センサ７０１と異なり、ジャイロセンサは、それが内蔵する少なくとも一つのジャイロ素子の軸を中心とした回転（または角速度）を直接検知することができる。このように、ジャイロセンサと加速度センサとは基本的に異なるので、個々の用途のためにいずれの装置が選択されるかによって、これらの装置からの出力信号に対して行う処理を適宜変更する必要がある。
【００６８】
具体的には、加速度センサの代わりにジャイロセンサを用いて傾きや姿勢を算出する場合には、大幅な変更を行う。すなわち、ジャイロセンサを用いる場合、検出開始の状態において傾きの値を初期化する。そして、当該ジャイロセンサから出力される角速度データを積分する。次に、初期化された傾きの値からの傾きの変化量を算出する。この場合、算出される傾きは、角度に対応する値が算出されることになる。一方、加速度センサによって傾きを算出する場合には、重力加速度のそれぞれの軸に関する成分の値を、所定の基準と比較することによって傾きを算出するので、算出される傾きはベクトルで表すことが可能であり、初期化を行わずとも、加速度検出手段を用いて検出される絶対的な方向を検出することが可能である。また、傾きとして算出される値の性質は、ジャイロセンサが用いられる場合には角度であるのに対して、加速度センサが用いられる場合にはベクトルであるという違いがある。したがって、加速度センサに代えてジャイロセンサが用いられる場合、当該傾きのデータに対して、２つのデバイスの違いを考慮した所定の変換を行う必要がある。加速度検出手段とジャイロセンサとの基本的な差異と同様にジャイロセンサの特性は当業者に公知であるので、本明細書ではさらなる詳細を省略する。ジャイロセンサは、回転を直接検知できることによる利点を有する一方、一般的には、加速度センサは、本実施形態で用いるようなコントローラに適用される場合、ジャイロセンサに比べて費用効率が良いという利点を有する。
【００６９】
通信部７５は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）７５１、メモリ７５２、無線モジュール７５３、およびアンテナ７５４を含んでいる。マイコン７５１は、処理の際にメモリ７５２を記憶領域として用いながら、送信データを無線送信する無線モジュール７５３を制御する。また、マイコン７５１は、アンテナ７５４を介して無線モジュール７５３が受信したゲーム装置３からのデータに応じて、サウンドＩＣ７０７およびバイブレータ７０４の動作を制御する。サウンドＩＣ７０７は、通信部７５を介してゲーム装置３から送信されたサウンドデータ等を処理する。また、マイコン７５１は、通信部７５を介してゲーム装置３から送信された振動データ（例えば、バイブレータ７０４をＯＮまたはＯＦＦする信号）等に応じて、バイブレータ７０４を作動させる。
【００７０】
コントローラ７に設けられた操作部７２からの操作信号（キーデータ）、加速度センサ７０１からの加速度信号（ｘ、ｙ、およびｚ軸方向加速度データ；以下、単に加速度データと記載する）、および撮像情報演算部７４からの処理結果データは、マイコン７５１に出力される。マイコン７５１は、入力した各データ（キーデータ、加速度データ、処理結果データ）を無線コントローラモジュール１９へ送信する送信データとして一時的にメモリ７５２に格納する。ここで、通信部７５から無線コントローラモジュール１９への無線送信は、所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は１６．７ｍｓ（１／６０秒）であり、ブルートゥース（Ｂｌｕｅｔｏｏｔｈ；登録商標）で構成される通信部７５の送信間隔は例えば５ｍｓである。マイコン７５１は、無線コントローラモジュール１９への送信タイミングが到来すると、メモリ７５２に格納されている送信データを一連の操作情報として出力し、無線モジュール７５３へ出力する。そして、無線モジュール７５３は、例えばブルートゥース（登録商標）の技術に基づいて、所定周波数の搬送波を用いて操作情報で変調し、その電波信号をアンテナ７５４から放射する。つまり、コントローラ７に設けられた操作部７２からのキーデータ、加速度センサ７０１からの加速度データ、および撮像情報演算部７４からの処理結果データが無線モジュール７５３で電波信号に変調されてコントローラ７から送信される。そして、ゲーム装置３の無線コントローラモジュール１９でその電波信号を受信し、ゲーム装置３で当該電波信号を復調や復号することによって、一連の操作情報（キーデータ、加速度データ、および処理結果データ）を取得する。そして、ゲーム装置３のＣＰＵ１０は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥース（登録商標）の技術を用いて通信部７５を構成する場合、通信部７５は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【００７１】
次に、本実施形態で想定するゲームの概要について説明する。本実施形態で想定するゲームは、プレイヤがオーケストラの指揮者となってオーケストラの演奏を行う演奏ゲームである。図示は省略するが、ゲーム画面としては、指揮台に載った指揮者の視点からの画像が表示される。すなわち、各々楽器を手にした演奏者オブジェクトが多数表示されている画面がテレビ２に表示される。
【００７２】
次に、本ゲームの操作について説明する。本ゲームにおいては、プレイヤは、コントローラ７をオーケストラの指揮棒（タクト）に見立てて操作を行う。例えば、プレイヤは、図８に示すようにコントローラ７を把持し、指揮棒を振るように当該コントローラ７を振る操作を行う。例えば、三拍子の曲を演奏する場合であれば、指揮棒で空間に三角形（つまり、三拍子の図形）を描くようにコントローラ７を振る操作を行う。このように、コントローラ７が振られるのに応じて、所定の楽曲が再生される。また、楽曲の再生に併せて、画面内の演奏者オブジェクトが楽器を演奏する様子（アニメーション）がゲーム画面として表示される。つまり、プレイヤのコントローラ７を振る操作に応じて、画面内の演奏者オブジェクトが演奏を行い、楽曲が再生される。
【００７３】
また、本ゲームでは、コントローラ７の一振り操作分に対応して再生される曲の長さ（再生時間）が予め定められている。例えば、本ゲームでは、一振り（一拍子分の動きに相当する）で一小節分の長さだけ楽曲が再生される。そのため、四拍子で指揮棒を振るような操作を行う場合を例に取ると、プレイヤは、四拍子の図形を空間に描くようにコントローラ７を振る操作を行うことになる。そして、楽曲の最初の部分から再生（振り操作）を開始したとして、四拍子のうち二拍子目でコントローラ７を振る動きを停めたとする。この場合は、楽曲の再生も、楽曲の最初から二小節目まで再生され、そこで再生が停止する。また、三拍子目でコントローラ７を振る操作を停めた場合は、楽曲は三小節目まで再生され、そこで再生が停止する（なおこのとき、ゲーム画面には、演奏の手を止めた各演奏者がプレイヤを見つめている画面が表示される）。つまり、コントローラ７を振り続けていれば、途中で途切れることなく楽曲の再生が続けられていく。しかし、コントローラ７の振り操作を途中で停めると、楽曲の再生が停止する。また、振り操作を再開すれば、停止した楽曲の続きが再生される。例えば、二拍子目でコントローラ７の振り操作を停め、その後再開した場合は、楽曲が二小節目まで再生された後、一旦再生が停止する。その後、コントローラ７の振り操作の再開に併せて三小節目から再生が行われる。本発明は、この「一振り」分の操作を正確に検出するためのものである。
【００７４】
次に、本発明における「一振り」操作検出の原理（概念）について、図９〜図１６を用いて説明する。図９は、「一振り」分の操作にかかるＸ軸およびＹ軸方向加速度データがそれぞれ示す加速度の正負および大きさをＸ軸およびＹ軸としたグラフの一例である。図９では、所定時間毎（例えば、１フレーム（１／６０秒）毎）に同時に得られたＸおよびＹ軸方向加速度データが示す加速度を順にＸ−Ｙ座標系にプロットしている。図９では、同時に得られたＸおよびＹ軸方向加速度データが示す加速度を合成したものを点Ｐｎ（ｎは整数）として示しており、データが得られた順に矢印で結んで示している。また、図９は、重力加速度を含む一切の加速度が加速度センサ７０１に付加されていない状態の加速度データの値を原点（Ｘ、Ｙ）＝（０，０）で示している。
【００７５】
コントローラ７を把持して振った場合、上記のように、振り始めは加速して振り終わりは減速となる。したがって、コントローラ７には、振り始めで振っている方向（図９では左上方向）と同じ方向の加速度が生じた後、徐々に加速度の大きさが減少して、振り終わりで振っている方向とは逆の方向（図９では右下方向）に加速度（以下、逆加速度と呼ぶ）が生じる。図９では、振り始めの位置を原点として、点Ｐが左上方向に推移した後（点Ｐ１〜Ｐ３）、点Ｐ３を境に、反時計回りの軌跡を描くように右下方向へ推移し（図９では、加速度がＸ軸の“０“のラインを跨いでからの右下方向への推移が逆加速度に相当；点Ｐ７以降）、更に一旦、下方向に少し推移した後（点Ｐ１１〜Ｐ１３）、最後に原点近くまで戻るような推移（点Ｐ１３〜Ｐ１６）が現れている。
【００７６】
本実施形態では、上記のようなグラフにおいて以下のような３つの閾値を設定して一振り分の操作を認識する処理を実行する。まず、第１の閾値として、図１０に示すような円１０１に相当する閾値を設定する。これは、楽曲の再生処理の契機（トリガ）として利用するための閾値である。以下、当該閾値を、トリガ閾値と呼ぶ。トリガ閾値は、一振り分の検出処理が実行される度に、その都度設定される（後述のステップＳ２１の処理）。そして、本実施形態では、加速度がトリガ閾値（円１０１）を越えたことが検出された段階で、振り動作が行われたものとして、楽曲を一小節分再生するための処理を実行する。図１０では、原点を基点（０フレーム目）とし、２フレーム目（点Ｐ２）でトリガ閾値を越えたことが検出される。そのため、２フレーム目にかかる処理ループにおいて楽曲を一小節分再生する処理が実行される。
【００７７】
次に、第２の閾値について説明する。第２の閾値は、図１１の直線１０２に相当するものである。この直線は、次のような特性を有する。まず、上記トリガ閾値を越えた後から３フレームについて、検出された加速度に基づいてフレーム毎のベクトルを算出し（図１２）、これらを合成することで振り方向を算出する（図１３の矢印１０３）。そして、図１４に示すような、当該振り方向とは反対方向で、原点から所定距離だけ離れた位置にあり、かつ、振り方向とは垂直となる直線が当該直線１０２となる。そして、当該直線１０２に相当するものが第２の閾値に相当する。以下、当該閾値を待機閾値と呼ぶ。そして、本実施形態では、上記トリガ閾値を越えたことが検出された後、図１５に示すような、待機閾値を跨ぐような加速度の推移（すなわち、加速度の推移を示す線が直線１０２と交差したこと）が検出されるまでは、振り方向検出の判定（上記トリガ閾値を越えたか否かの判定）が行われないように処理が実行される。
【００７８】
次に、第３の閾値に関して説明する。図１５に示したような待機閾値を跨ぐような加速度の推移が検出された段階で、１回分の振り動作は終了と判定しても良いが、本実施形態では、より正確な検出を行うために、更に第３の閾値を利用する。第３の閾値は、図１６に示すような、円１０４に相当する。当該円１０４は、上記トリガ閾値１０１の円よりも少し小さい円となっている。当該第３の閾値は、上記待機閾値を跨いだ後、原点近傍にまで加速度が推移したかどうかを判定するために用いる。原点近傍にまで加速度が推移すれば、加速度の変化が安定してきたものと考えられ、１回分の振り動作の区切りとして有用であるからである。以下、当該第３の閾値を安定閾値と呼ぶ。そして、安定閾値よりも小さい（原点側に近い）加速度が検出されれば、１回分の振り動作が終わったものとして扱う。より具体的には、１回分の振り動作が終わったと判定されると、次の振り動作の検出のために、上述したようなトリガ閾値を設定する処理が再度実行され、上述のような処理が繰り返されることになる。なお、トリガ閾値の設定に関して、本実施形態では、直前の振り検出において検出された振りの強さに応じてトリガ閾値（円１０１の大きさ）を変更させる処理を行っている。これにより、プレイヤが意図しない、連続的なトリガの発生を防ぐことができる。
【００７９】
このように、本実施形態では、上記トリガ閾値を利用して振り操作の発生を検出する。その後、待機閾値を跨ぐように加速度が推移し、更に、原点付近にまで加速度が推移したこと（安定閾値より小さくなったこと）が検出されるまでは、振り操作の検出は行わないようにしている。これにより、プレイヤの行った１度の振り操作で２回分の振り操作が検出されることを防ぐことができる。つまり、逆加速度にかかる分の加速度の推移については、振り操作の発生として検出されることを防ぐことができる。その結果、連続的に振り操作を行った場合でも、１回分の振り操作を正確に検出し、ゲーム処理に反映させることが可能となる。
【００８０】
次に、ゲーム装置３によって実行されるゲーム処理の詳細を説明する。まず、ゲーム処理の際に外部メインメモリ１２に記憶されるデータについて説明する。図１７は、ゲーム装置３の外部メインメモリ１２のメモリマップを示す図である。図１７において、外部メインメモリ１２は、ゲームプログラム領域１２１およびデータ記憶領域１２７を含む。ゲームプログラム領域１２１およびデータ記憶領域１２７のデータは、光ディスク４に記憶され、ゲームプログラム実行時には外部メインメモリ１２に転送されて記憶される。
【００８１】
ゲームプログラム領域１２１は、ＣＰＵ１０によって実行されるゲームプログラムを記憶し、このゲームプログラムは、ゲームメイン処理プログラム１２２、トリガ判定処理プログラム１２３と、振り方向算出処理プログラム１２４と、逆加速度認識処理プログラム１２５と、安定判定処理プログラム１２６などによって構成される。
【００８２】
ゲームメイン処理プログラム１２２は、後述する図１８のフローチャートの処理に対応するプログラムである。トリガ判定処理プログラム１２３は、上記図１０等で示した、トリガ閾値を越えたか否かを判定するための処理をＣＰＵ１０に実行させるためのプログラムである。また、振り方向算出処理プログラム１２４は、上記図１３の矢印１０３を算出するための処理をＣＰＵ１０に実行させるためのプログラムであり、逆加速度認識処理プログラム１２５は、上記図１４の待機閾値（直線１０２）を跨ぐような加速度の推移を検出するための処理をＣＰＵ１０に実行させるためのプログラムであり、安定判定処理プログラム１２６は、上記待機閾値を跨いだ後、加速度が原点近傍に戻ってきたか否かを検出するための処理をＣＰＵ１０に実行させるためのプログラムである。
【００８３】
データ記憶領域１２７には、加速度データ１２８、トリガ閾値データ１２９、トリガ最小値データ１３０、待機閾値データ１３１、安定閾値データ１３２、パワー値データ１３３、振り方向ベクトル１３４、タイマー１３５、カウンタ１３６、楽曲データ１３７、および画像データ１３８等が記憶される。なお、メインメモリ３３には、図１７に示す情報に含まれるデータの他、ゲームに登場する各種オブジェクト等に関するデータ（位置データ等）や仮想ゲーム空間に関するデータ（地形データ等）等、ゲーム処理に必要なデータが記憶される。
【００８４】
加速度データ１２８は、コントローラ７から送信データとして送信されてくる一連の操作情報に含まれる加速度データであり、得られた加速度データを所定フレーム分（本実施形態では、ゲーム処理間隔である１フレーム（１／６０秒）に対して３０フレーム分）格納する。加速度データ１２８には、加速度センサ７０１がＸ、Ｙ、およびＺ軸の３軸成分に分けてそれぞれ検出したＸ軸方向加速度１２８ａ、Ｙ軸方向加速度１２８ｂ、およびＺ軸方向加速度１２８ｃが含まれる。なお、本実施形態では、加速度の値としては、−２Ｇ〜＋２Ｇの範囲の値をとるものとする。
【００８５】
トリガ閾値データ１２９は、振り操作が発生したか否かを判定する基準となるデータである（図１０の円１０１に相当）。トリガ最小値データ１３０は、上記トリガ閾値として用いられる値の最小値を示すデータである。つまり、本実施形態では、トリガ閾値データ１２９の値は、当該トリガ最小値データ１３０より小さくはならない。本実施形態では、トリガ最小値データ１３０には、予め所定の値が設定されているものとする。
【００８６】
待機閾値データ１３１は、図１１や図１４を用いて上述した直線１０２に相当するデータである。なお、本実施形態では、予め”−１”という値が設定されている。これは、本実施形態における待機閾値を越えたか否かの判定処理の関係上、このような値が設定されている。当該処理の詳細は後述する。
【００８７】
安定閾値データ１３２は、図１６を用いて上述した円１０４に相当するデータである。すなわち、原点付近まで加速度が推移したか否かを判定するために用いられるデータである。本実施形態では、安定閾値データ１３２には、上記トリガ最小値データ１３０の値より小さな所定の値が予め設定されているものとする。なお、当該安定閾値は原点付近であることを判定するためのものであることから、トリガ最小値データ１３０の値次第では、トリガ最小値データ１３０を安定閾値データ１３２の代わりに流用するようにしてもよい。つまり、トリガ最小値データ１３０の値が原点付近といえるような値であれば、これをそのまま安定閾値データ１３２として用いても良い。
【００８８】
パワー値データ１３３は、前回行われた振り動作における最大の加速度の大きさを示すデータであり、トリガ閾値データ１２９の値を設定するために用いられる。つまり、図１０の円１０１の大きさを、前回行われた振り操作での振りの強さに応じて変更させるために用いられる。
【００８９】
振り方向ベクトル１３４は、図１１や図１４を用いて上述したような待機閾値を設定する際等に用いられる振り方向（図１３の矢印１０３）を示すベクトルデータである。
【００９０】
タイマー１３５およびカウンタ１３６は、後述する本実施形態でのゲーム処理において用いられる変数である。
【００９１】
楽曲データ１３７は、プレイヤの振り操作に応じて再生される楽曲のデータである。１小節ごとに区切って再生可能なデータ構造を有している。
【００９２】
画像データ１３８は、ゲーム処理において表示される各種画像（演奏者オブジェクト等）のデータである。
【００９３】
次に、図１８〜図２６を参照して、ゲーム装置３によって実行される演奏ゲーム処理について説明する。ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ１０は、ＲＯＭ／ＲＴＣ１３に記憶されている起動プログラムを実行し、これによってメインメモリ３３等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムが外部メインメモリ１２に読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１８に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。また、図１８に示すステップＳ２〜ステップＳ６の処理ループは、１フレーム毎に繰り返し実行される（後述する、ステップＳ３、Ｓ４、およびＳ５が実行される場合を除く）。
【００９４】
図１８において、まず、ＣＰＵ１０は、初期化処理を実行する（ステップＳ１）。図１９は、上記ステップＳ１で示した初期化処理の詳細を示すフローチャートである。図１９において、まず、ＣＰＵ１０は、パワー値データ１３３をクリア（０を設定）する（ステップＳ１１）。次に、ＣＰＵ１０は、加速度データ１２８をクリアする（ステップＳ１２）。以上で、初期化処理は終了する。
【００９５】
図１８に戻り、次に、ＣＰＵ１０は、トリガ判定処理を実行する（ステップＳ２）。図２０は、上記ステップＳ２で示したトリガ判定処理の詳細を示すフローチャートである。図２０において、まず、ＣＰＵ１０は、以下の式を用いてトリガ閾値データ１２９の値を算出する（ステップＳ２１）。
トリガ閾値データ１２９  ＝  トリガ最小値データ１３０  ＋  α  ×  パワー値データ１３３
ここで、係数αは、予め所定の値が固定値として設定されているものとする。また、上述したように、トリガ最小値データ１３０にも予め所定の値が設定されている。
【００９６】
次に、ＣＰＵ１０は、トリガ閾値データ１２９の値とトリガ最小値データ１３０の値との差分を算出する（ステップＳ２２）。ここで算出された差分は、後述するステップＳ２５のトリガ閾値更新処理において用いられる。
【００９７】
次に、ＣＰＵ１０は、差分加速度算出処理を実行する（ステップＳ２３）。この処理では、コントローラ７から得られた加速度から重力加速度の成分を除去するための処理等が行われる。図２１は、上記ステップＳ２３で示した差分加速度算出処理の詳細を示すフローチャートである。図２１において、まず、加速度センサから、Ｘ軸、およびＹ軸についての最新の加速度を取得する（ステップＳ３１）。
【００９８】
次に、ＣＰＵ１０は、加速度データ１２８から４フレーム前におけるＸ軸およびＹ軸の加速度を取得する。そして、最新加速度と、４フレーム前の加速度との差分をＸ軸、Ｙ軸それぞれについて算出する（ステップＳ３２）。これにより、重力加速度成分が除去された加速度（より正確には、加速度の変化量）が算出されることになる。以下、当該算出された加速度を、Ｘ軸差分加速度、Ｙ軸差分加速度と呼ぶ。
【００９９】
なお、ステップＳ３２において、４フレーム前の加速度との差分を算出するのは、ノイズ（例えば、手の震え等により突発的に発生する微弱な加速度）の影響を低減するためである。すなわち、重力加速度成分を除去するだけであれば、１フレーム前の加速度との差分を算出すれば十分である。しかし、直近のフレームとの差分をとった場合、上記のようなノイズの影響を受けやすく、微妙な手の震え等まで反映された差分加速度が算出されることがある。そこで、本実施形態では、このようなノイズの影響を減らし、より正確な差分加速度を算出するために、１フレーム前ではなく４フレーム前の加速度との差分を算出するようにしている。更に言えば、当該４フレームという値も絶対的なものではない。この値は、適宜実機を使ったシミュレーション等を行うことで最適な値として導出されたものである。そのため、例えば、３フレーム前や５フレーム前等のように、加速度センサの特性等に応じて最適な値を適宜調整しても構わない。
【０１００】
次に、最新加速度を加速度データ１２８に記憶する（ステップＳ３３）。ここで、上記のように、加速度データ１２８には加速度データが所定フレーム（本実施形態では３０フレーム）分格納できるが、当該所定フレーム分のデータが既に格納済み、つまり、加速度データ１２８の記憶領域に空きがないときは、一番古いデータを加速度データ１２８から削除してから当該最新加速度のデータを格納する。
【０１０１】
次に、ＣＰＵ１０は、差分加速度の大きさを算出する（ステップＳ３４）。つまり、差分加速度に相当するベクトルの大きさ（長さ）が算出される。具体的には、ＣＰＵ１０は、以下の式を用いて差分加速度の大きさを算出する。
【数１】
0005429918.tif 000002
【０１０２】
次に、ＣＰＵ１０は、差分加速度の大きさがパワー値データ１３３より大きいか否かを判定する（ステップＳ３５）。差分加速度の大きさがパワー値データ１３３より大きいときは（ステップＳ３５でＹＥＳ）、パワー値データ１３３を差分加速度の大きさで更新し（ステップＳ３６）、処理を終了する。一方、差分加速度の大きさがパワー値データ１３３より大きくないときは（ステップＳ３５でＮＯ）、ステップＳ３６の処理は行わずに、処理を終了する。以上で、差分加速度算出処理は終了する。
【０１０３】
図２０に戻り、差分加速度算出処理が終われば、ＣＰＵ１０は、トリガ閾値データ１２９がトリガ最小値データ１３０より大きいか否かを判定する（ステップＳ２４）。当該判定の結果、大きいときは（ステップＳ２４でＹＥＳ）、ＣＰＵ１０は、トリガ閾値更新処理を実行する（ステップＳ２５）。この処理では、トリガ閾値データ１２９をトリガ最小値データ１３０で示される値にまで、所定の時間をかけて戻すための処理が実行される。つまり、一定の時間をかけてトリガ最小値データ１３０で示される円の大きさになるように、図１０で示したような円１０１の大きさを１フレーム毎に徐々に小さくしていくための処理が行われる。一方、トリガ閾値データ１２９がトリガ最小値データ１３０より大きくないときは（ステップＳ２４でＮＯ）、処理を後述のステップＳ２６に進める。つまり、円１０１は、トリガ最小値データ１３０で示される大きさまで小さくなれば、それ以上は小さくならないことになる。
【０１０４】
図２２は、上記ステップＳ２５で示したトリガ閾値更新処理の詳細を示すフローチャートである。図２２において、まず、ＣＰＵ１０は、上記ステップＳ２２で算出した、トリガ閾値データ１２９の値とトリガ最小値データ１３０の値との差分に基づき、以下の式を用いて減少幅を算出する（ステップＳ４１）。
減少幅＝差分  ／  減少時間
ここで、減少時間は、予め所定の値が固定値として設定されている。
【０１０５】
次に、ＣＰＵは、以下の式を用いて、トリガ閾値データ１２９の値を算出する（ステップＳ４２）。すなわち、図１１等の円１０１の大きさを小さくしていく処理を行うことになる。
トリガ閾値＝トリガ閾値  −  減少幅
このように、徐々にトリガ閾値を減少していくことで、プレイヤの振り方の違いによる影響を軽減することができる。以上で、トリガ閾値更新処理は終了する。
【０１０６】
図２０に戻り、ステップＳ２５の処理の次に、ＣＰＵ１０は、ゲーム処理の終了条件が満たされたか否かを判定する（ステップＳ２６）。当該判定の結果、終了条件が満たされていれば（ステップＳ２６でＹＥＳ）、本実施形態にかかるゲーム処理を終了する。一方、まだゲーム終了条件が満たされてなければ（ステップＳ２６でＮＯ）、ＣＰＵ１０は、差分加速度の大きさがトリガ閾値データ１２９の値を越えたか否か、つまり、振り操作が発生したか否かを判定する（ステップＳ２７）。その結果、トリガ閾値データ１２９の値を越えていれば（ステップＳ２７でＹＥＳ）、ＣＰＵ１０は、楽曲を１小節分（つまり、一振りに対応した分）だけ再生する処理を実行する（ステップＳ２８）。トリガ閾値データ１２９の値を越えていなければ（ステップＳ２７でＮＯ）、ステップＳ２３に戻って、処理を繰り返す。以上で、トリガ判定処理は終了する。
【０１０７】
図１８に戻り、次に、ＣＰＵ１０は、振り方向算出処理を実行する（ステップＳ３）。すなわち、図１３で示した矢印１０３を求めるための処理を実行する。本処理では、上記トリガ閾値を越えたことが検出された後の３フレーム分の処理ループにおいて、それぞれ検出された差分加速度の原点からのベクトルを合成したものを、振り方向ベクトルとする処理が実行される。
【０１０８】
図２３は、上記ステップＳ３で示した振り方向算出処理の詳細を示すフローチャートである。図２３において、まず、ＣＰＵ１０は、振り方向ベクトル１３４をクリアする（ステップＳ５１）。次に、ＣＰＵ１０は、カウンタ１３６に”０”を設定する（ステップＳ５２）。
【０１０９】
次に、ＣＰＵ１０は、カウンタ１３６が”３”より小さいか否かを判定する（ステップＳ５３）。当該判定の結果、”３”より小さいときは（ステップＳ５３でＹＥＳ）、上述したような差分加速度検出処理を実行する（ステップＳ５４）。当該処理は、上述したステップＳ２３の処理と同じであるため、説明は省略する。
【０１１０】
次に、ＣＰＵ１０は、ステップＳ５４で算出された差分加速度を振り方向ベクトル１３４に加算する（ステップＳ５５）。続いて、ＣＰＵ１０は、カウンタ１３６に”１”を加算する（ステップＳ５６）。そして、上記ステップＳ５３の処理に戻る。
【０１１１】
一方、ステップＳ５３の判定の結果、カウンタ１３６が”３”より小さくないと判定されたときは（ステップＳ５３でＮＯ）、ＣＰＵ１０は、振り方向ベクトル１３４を正規化する（ステップＳ５７）。すなわち、ＣＰＵ１０は、ステップＳ５５の処理の結果合成された振り方向ベクトル１３４で示されるベクトルの長さを”１”にする。なお、振り方向を知るためだけであれば、このような正規化の必要はないが、後述する処理やその他ゲーム処理の便宜のために、本実施形態では正規化を行っているものである。以上で、振り方向算出処理は終了する。
【０１１２】
図１８に戻り、ステップＳ３の処理の次に、ＣＰＵ１０は、逆加速度認識処理を実行する（ステップＳ４）。本処理は、上記図１１や図１５で示した直線１０２（待機閾値）を跨ぐような加速度の推移があったか否かを判定するための処理である。まず、本処理の概要について、図２４〜図２７を用いて説明する。本実施形態では、内積を利用して判定を行う。例えば、図２４に示すようなＸ−Ｙ座標系において、３つの点Ｐ２１〜Ｐ２３（差分加速度に相当）があるとする。そして、上述したような振り方向ベクトルの向きを右上４５度の方向とした場合（長さは”１”とする）、振り方向と各点Ｐ２１〜Ｐ２３との内積は、図２５に示すように、それぞれ以下のようになる。
振り方向と点Ｐ２１との内積＝“０”
振り方向と点Ｐ２２との内積＝“−２“
振り方向と点Ｐ２３との内積＝“−２”
ここで、これらの内積の値は、振り方向に沿った距離を示す値という側面も有する（図２５の点線Ｌ１１〜Ｌ１５）。そのため、待機閾値を”−１”とした場合、図２６に示すように、原点から振り方向の反対側へ１．０の距離にある点線Ｌ１４（内積が”−１”になるような直線；図１４等の直線１０２に相当し、振り方向とは垂直の関係になっている）に相当することになる。そのため、上記内積の値と、当該待機閾値”−１”とを比べることで、差分加速度を示す点が当該点線Ｌ１４の内側（原点に近い側；図２６では点Ｐ２１）にあるか外側（原点から離れた側；図２６では点Ｐ２２と点Ｐ２３）にあるかを判定することができる。そこで、本実施形態では、上記内積が待機閾値”−１”の内側から外側に推移したか否かを判定することで、点線Ｌ１４（すなわち、待機閾値に相当）を跨いだか否かを判定する処理を行う。なお、振り方向が異なれば、上記待機閾値に相当する点線の位置や傾きも異なることになる。一例として、振り方向が右下４５度方向の場合の内積や待機閾値の例を図２７に示す。
【０１１３】
図２８は、上記ステップＳ４で示した逆加速度認識処理の詳細を示すフローチャートである。図２８において、まず、ＣＰＵ１０は、タイマー１３５に”０”を設定する（ステップＳ６１）。次に、ＣＰＵ１０は、タイマー１３５に”１”を加算する（ステップＳ６２）。
【０１１４】
次に、ＣＰＵ１０は、上記差分加速度検出処理を実行する（ステップＳ６３）。本処理は、上述したステップＳ２３の処理と同じであるため、説明は省略する。
【０１１５】
次に、ＣＰＵ１０は、ステップＳ６３で算出された差分加速度と振り方向ベクトル１３４で示されるベクトルとの内積を算出する（ステップＳ６４）。
【０１１６】
次に、ＣＰＵ１０は、算出された内積の値が待機閾値データ１３１の値より大きいか否かを判定する（ステップＳ６５）。本実施形態では、待機閾値データ１３１の値として予め”−１”という値が設定されているため、図２６を例とすると、内積が”−１”より大きな値であれば、点線Ｌ１４を跨いでいない状態であると判定できる。また、内積が”−１”より小さい値となれば、図２６の点線Ｌ１４を跨いだと判定できる。
【０１１７】
ステップＳ６５の判定の結果、内積が待機閾値データ１３１の値より大きくない（つまり、下回った）と判定されたときは（ステップＳ６５でＮＯ）、逆加速度認識処理が終了する。一方、内積が待機閾値データ１３１の値より大きいと判定されたときは（ステップＳ６５でＹＥＳ）、まだ上記点線１４を跨いでいない状態であると考えられるため、次に、ＣＰＵ１０は、タイマー１３５が制限時間よりも大きいか否かを判定する（ステップＳ６６）。ここで、制限時間とは、予め定められている定数である。これは、加速度が上記点線Ｌ１４を跨いでいなくても、所定時間が経過すれば当該点線Ｌ１４を跨いだものとみなすためである。つまり、点線Ｌ１４を跨ぐような加速度の推移がいつまで経っても検出されないときであっても、その後の処理を実行するために、点線Ｌ１４の跨ぎ判定に制限時間を設けたものである。当該判定の結果、タイマー１３５の値が制限時間内であれば（ステップＳ６６でＮＯ）、上記ステップＳ６２の処理に戻る。一方、タイマー１３５の値が制限時間を超えたときは（ステップＳ６６でＹＥＳ）、逆加速度認識処理が終了する。以上で、逆加速度認識処理の説明を終了する。
【０１１８】
図１８に戻り、ステップＳ４の逆加速度認識処理が終われば、次に、ＣＰＵ１０は、安定判定処理を実行する（ステップＳ５）。この処理では、図１６を用いて説明したように、上記待機閾値を跨いだ加速度が原点付近まで戻ってくるよう推移したか否かの判定処理が実行される。
【０１１９】
図２９は、上記ステップＳ５で示した安定判定処理の詳細を示すフローチャートである。図２９において、まず、ＣＰＵ１０は、タイマー１３５に”０”を設定する（ステップＳ７１）。次に、ＣＰＵ１０は、タイマー１３５に”１”を加算する（ステップＳ７２）。
【０１２０】
次に、ＣＰＵ１０は、上述したような差分加速度検出処理を実行する（ステップＳ７３）。本処理は上記ステップＳ２３の処理と同様であるため、説明は省略する。
【０１２１】
次に、ＣＰＵ１０は、上記ステップＳ７３で算出された差分加速度の大きさが、安定閾値データ１３２の値より小さいか否かを判定する（ステップＳ７４）。つまり、図１６で示したような円１０４の内側（原点側）に加速度が推移したか否かを判定する。当該判定の結果、差分加速度の大きさが安定閾値データ１３２の値より小さいときは（ステップＳ７４でＹＥＳ）、安定判定処理は終了する。
【０１２２】
一方、差分加速度の大きさが安定閾値データ１３２の値より小さくないときは（ステップＳ７４でＮＯ）、ＣＰＵ１０は、タイマー１３５が制限時間より大きいか否かを判定する（ステップＳ７５）。つまり、上記ステップＳ６６と同様の趣旨で、加速度が安定閾値に推移しないまま制限時間を経過したか否かを判定している。当該判定の結果、タイマー１３５が制限時間より大きいとき（ステップＳ７５でＹＥＳ）、つまり、加速度が安定閾値に推移しないまま制限時間を経過したときは、安定判定処理を終了する。一方、タイマー１３５が制限時間より大きくない、すなわち、まだ制限時間を経過していないときは（ステップＳ７５でＮＯ）、上記ステップＳ７２の処理に戻る。以上で、安定判定処理の説明を終了する。
【０１２３】
図１８に戻り、ステップＳ５の安定判定処理が終われば、次に、ＣＰＵ１０は、ゲーム処理の終了条件が満たされたか否かを判定する（ステップＳ６）。ＹＥＳの場合、ゲーム処理を終了し、ＮＯの場合、ステップＳ２に戻って、ゲーム処理を繰り返す。以上で、本実施形態にかかるゲーム処理は終了する。
【０１２４】
このように、本実施形態では、トリガ閾値を越えることで「振り」操作の発生が検出された後、待機閾値を跨ぐような加速度の推移が検出されるまでは、「振り」操作の検出を行わないような処理を行っている。これにより、振った方向とは逆方向に生じる加速度によって「振り」操作が検出されることを防ぐことができる。その結果、例えば、オーケストラの指揮棒を振るような、連続した「振り」操作を行わせるゲーム等の処理において、より正確に一回分の「振り」操作を検出することが可能となる。また、振り方向に応じて待機閾値を設定するため、様々な方向にかかる「振り」操作を正確に検出することが可能となる。
【０１２５】
なお、上述した実施形態では、待機閾値を跨ぐような加速度の推移の検出に際して、Ｘ軸およびＹ軸の２軸加速度を用いて判定を行っていた。これに限らず、Ｚ軸も加えた３軸加速度で判定するようにしてもよい。図３０は、３軸加速度で上記のような待機閾値を跨ぐ判定を行う場合の処理概念図である。３軸加速度を用いて処理する場合は、上述した待機閾値に相当する要素が図３０の平面３０１となる。平面３０１は、振り方向と垂直であって、原点から振り方向の反対方向に所定距離だけ離れたところに位置する平面である。そして、差分加速度の算出について、Ｚ軸成分を加えた３軸加速度を算出するようにし、当該差分加速度（図３０の球３０２〜３０５）を結ぶ直線を算出する。そして、上述のようなトリガ閾値を越えたことが検出された後、当該差分加速度を結ぶ直線が上記待機閾値に相当する平面３０１と交差したか否かを判定すれば、上述した実施形態と同様に、待機閾値を跨ぐような加速度の推移を検出することができる。
【０１２６】
また、上述の実施形態では、待機閾値データ１３１や安定閾値データ１３２の値として、予め定めた所定の値（例えば、待機閾値データ１３１であれば”−１”）を固定値として判定処理を行っていたが、これに限らず、これらの値を可変値にして、例えば上記パワー値データ１３３の値に応じて適宜変化させるようにしてもよい。これにより、振りの強さに合わせて上記のような逆方向に生じる加速度による「振り」操作の誤検出を防ぐことができる。
【０１２７】
また、上記振り方向の算出に関して、上述の実施形態では、上記トリガ閾値を越えたことが検出されてから３フレーム分の差分加速度に基づいて、振り方向ベクトルを算出していた。しかし、振り方向ベクトルの算出の基とする差分加速度は、このような３フレーム分に限るものではなく、例えば、トリガ閾値を越えたことが検出されたときの差分加速度と、その直前のフレームの差分加速度のみに基づいて振り方向を算出しても良いし、トリガ閾値を越えたことが検出されたフレームと、その前後１フレーム分の差分加速度に基づいて算出するようにしてもよい。また、トリガ閾値を越えたことが検出されてから数フレーム後の差分加速度のみに基づいて振り方向を算出するようにしても良い。つまり、トリガ閾値を越えたことが検出されたときのフレーム、または当該フレームに近傍するフレームにおける差分加速度を用いて振り方向ベクトルを算出するようにしてもよい。
【０１２８】
また、上述した実施形態では、オーケストラの演奏ゲームを例として説明していたが、このようなゲーム処理に限らず、加速度センサを内蔵した入力装置を連続的に「振る」操作に基づいて所定の処理を行うような情報処理全般についても、本発明は適用可能である。
【産業上の利用可能性】
【０１２９】
本発明にかかる情報処理プログラムおよび情報処理装置は、加速度センサを用いた入力装置を「振る」操作をより正確に検出することができ、ゲーム処理や音楽演奏シミュレーション処理を実行するプログラムや情報処理装置等に有用である。
【図面の簡単な説明】
【０１３０】
【図１】本発明の実施形態に係るゲームシステム１を説明するための外観図
【図２】図１のゲーム装置本体５の機能ブロック図
【図３】図１のコントローラ７の上面後方から見た斜視図
【図４】図３のコントローラ７を下面前方から見た斜視図
【図５】図３のコントローラ７の上ハウジングを外した状態を示す斜視図
【図６】図３のコントローラ７の下ハウジングを外した状態を示す斜視図
【図７】図３のコントローラ７の構成を示すブロック図
【図８】コントローラ７の持ち方の一例を示す図
【図９】本発明における振り操作検出処理の原理を説明するための図
【図１０】本発明における振り操作検出処理の原理を説明するための図
【図１１】本発明における振り操作検出処理の原理を説明するための図
【図１２】本発明における振り操作検出処理の原理を説明するための図
【図１３】本発明における振り操作検出処理の原理を説明するための図
【図１４】本発明における振り操作検出処理の原理を説明するための図
【図１５】本発明における振り操作検出処理の原理を説明するための図
【図１６】本発明における振り操作検出処理の原理を説明するための図
【図１７】ゲーム装置３の外部メインメモリ１２のメモリマップを示す図
【図１８】本発明の実施形態に係るゲーム処理を示すフローチャート
【図１９】図１８のステップＳ１で示した初期化処理の詳細を示したフローチャート
【図２０】図１８のステップＳ２で示したトリガ判定処理の詳細を示したフローチャート
【図２１】図２０のステップＳ２３で示した差分加速度算出処理の詳細を示したフローチャート
【図２２】図２０のステップＳ２５で示したトリガ閾値更新処理の詳細を示したフローチャート
【図２３】図１８のステップＳ３で示した振り方向算出処理の詳細を示したフローチャート
【図２４】図１８のステップＳ４で示した逆加速度認識処理の概要を説明するための図
【図２５】図１８のステップＳ４で示した逆加速度認識処理の概要を説明するための図
【図２６】図１８のステップＳ４で示した逆加速度認識処理の概要を説明するための図
【図２７】図１８のステップＳ４で示した逆加速度認識処理の概要を説明するための図
【図２８】図１８のステップＳ４で示した逆加速度認識処理の詳細を示したフローチャート
【図２９】図１８のステップＳ５で示した安定判定処理の詳細を示したフローチャート
【図３０】３軸加速度の場合における本発明の処理概念図
【符号の説明】
【０１３１】
１…ゲームシステム
２…モニタ
２ａ…スピーカ
３…ゲーム装置
４…光ディスク
７…コントローラ
１０…ＣＰＵ
１１…システムＬＳＩ
１１ａ…入出力プロセッサ
１１ｂ…ＧＰＵ
１１ｃ…ＤＳＰ
１１ｄ…ＶＲＡＭ
１１ｅ…内部メインメモリ
１２…外部メインメモリ
１３…ＲＯＭ／ＲＴＣ
１４…ディスクドライブ
１５…ＡＶ−ＩＣ
１６…ＡＶコネクタ
１７…フラッシュメモリ
１８…無線通信モジュール
１９…無線コントローラモジュール
２０…拡張コネクタ
２１…外部メモリカード用コネクタ
２２…アンテナ
２３…アンテナ
２４…電源ボタン
２５…リセットボタン
２６…イジェクトボタン
７１…ハウジング
７２…操作部
７３…コネクタ
７４…撮像情報演算部
７４１…赤外線フィルタ
７４２…レンズ
７４３…撮像素子
７４４…画像処理回路
７５…通信部
７５１…マイコン
７５２…メモリ
７５３…無線モジュール
７５４…アンテナ
７００…基板
７０１…加速度センサ
７０２…ＬＥＤ
７０３…水晶振動子
７０４…バイブレータ
７０７…サウンドＩＣ
７０８…アンプ
【図１】
0005429918.tif 000003
【図２】
0005429918.tif 000004
【図３】
0005429918.tif 000005
【図４】
0005429918.tif 000006
【図５】
0005429918.tif 000007
【図６】
0005429918.tif 000008
【図７】
0005429918.tif 000009
【図８】
0005429918.tif 000010
【図９】
0005429918.tif 000011
【図１０】
0005429918.tif 000012
【図１１】
0005429918.tif 000013
【図１２】
0005429918.tif 000014
【図１３】
0005429918.tif 000015
【図１４】
0005429918.tif 000016
【図１５】
0005429918.tif 000017
【図１６】
0005429918.tif 000018
【図１７】
0005429918.tif 000019
【図１８】
0005429918.tif 000020
【図１９】
0005429918.tif 000021
【図２０】
0005429918.tif 000022
【図２１】
0005429918.tif 000023
【図２２】
0005429918.tif 000024
【図２３】
0005429918.tif 000025
【図２４】
0005429918.tif 000026
【図２５】
0005429918.tif 000027
【図２６】
0005429918.tif 000028
【図２７】
0005429918.tif 000029
【図２８】
0005429918.tif 000030
【図２９】
0005429918.tif 000031
【図３０】
0005429918.tif 000032