以下、本実施形態の一例に係る情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法について説明する。本実施形態におけるゲームシステムの一例となる情報処理システム1は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とによって構成される。また、上記情報処理システムの他の態様は、上記構成にクレードル5(図5、図7等参照)を加えて構成されることもある。本実施形態における情報処理システム1は、本体装置2に対して左コントローラ3および右コントローラ4が着脱可能であり、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用でき、また、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる(図2参照)。また、情報処理システム1は、本体装置2に画像を表示する態様での利用と、テレビ等の他の表示装置に画像を表示させる態様での利用が可能である。前者の態様において、情報処理システム1は、携帯型装置(例えば、携帯ゲーム機)として利用することができる。また、後者の態様において、情報処理システム1は、据置型装置(例えば、据置型ゲーム機)として利用することができる。
図1は、本実施形態における情報処理システム1の一例において、本体装置2に左コントローラ3および右コントローラ4を装着した状態を示す図である。図1に示すように、情報処理システム1は、本体装置2と、左コントローラ3と、右コントローラ4とを含む。左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、情報処理システム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。図1および図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。なお、本実施形態において、1人のユーザが操作する「操作装置」は、1つのコントローラ(例えば、左コントローラ3および右コントローラ4の一方)でも複数のコントローラ(例えば、左コントローラ3および右コントローラ4の両方、またはさらに他のコントローラを含んでもよい)でもよく、当該「操作装置」は、1以上のコントローラによって構成可能となる。以下、本体装置2と左コントローラ3および右コントローラ4との具体的な構成の一例について説明する。
図3は、本体装置2の一例を示す六面図である。図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。本実施形態においては、ハウジング11は、横長の形状であるものとする。つまり、本実施形態においては、ハウジング11の主面の長手方向(すなわち、図1に示すx軸方向)を横方向(左右方向とも言う)と呼び、当該主面の短手方向(すなわち、図1に示すy軸方向)を縦方向(上下方向とも言う)と呼び、主面に垂直な方向(すなわち、図1に示すz軸方向)を奥行方向(前後方向とも言う)と呼ぶこととする。本体装置2は、本体装置2が横長となる向きで利用されることが可能である。また、本体装置2が縦長となる向きで利用されることも可能である。その場合には、ハウジング11を縦長の形状であるものと見なしてもよい。
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が取得または生成した画像(静止画であってもよいし、動画であってもよい)を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、図8に示すスピーカ88)を備えている。図3に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。そして、スピーカ88の出力音は、これらのスピーカ孔11aおよび11bからそれぞれ出力される。
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21とを備える。
図3に示すように、本体装置2は、スロット23を備える。スロット23は、ハウジング11の上側面に設けられる。スロット23は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、情報処理システム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。所定の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。また、本体装置2は、電源ボタン28と音量ボタン26aおよび26bとを備える。
本体装置2は、下側端子27を備える。下側端子27は、本体装置2が、後述するクレードル5と通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。
図4は、左コントローラ3の一例を示す六面図である。図4に示すように、左コントローラ3は、ハウジング31を備える。本実施形態において、ハウジング31は、略板状である。また、本実施形態においては、ハウジング31は、縦長の形状、すなわち、上下方向(すなわち、図1に示すy軸方向)に長い形状である。左コントローラ3は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング31は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ3は、横長となる向きで把持されることも可能である。左コントローラ3が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
左コントローラ3は、アナログスティック32を備える。図4に示すように、アナログスティック32が、ハウジング31の主面に設けられる。アナログスティック32は、方向を入力することが可能な方向入力部の一例である。ユーザは、アナログスティック32を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、左コントローラ3は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、アナログスティック32を押下する入力が可能である。
左コントローラ3は、各種操作ボタンを備える。まず、左コントローラ3は、ハウジング31の主面上に4つの操作ボタン33〜36(具体的には、右方向ボタン33、下方向ボタン34、上方向ボタン35、および、左方向ボタン36)を備える。さらに、左コントローラ3は、録画ボタン37、−(マイナス)ボタン47を備える。左コントローラ3は、ハウジング31の側面の左上に第1Lボタン38およびZLボタン39を備える。また、左コントローラ3は、ハウジング31の側面の、本体装置2に装着される際に装着される側の面に第2Lボタン43および第2Rボタン44を備える。これらの操作ボタンは、本体装置2で実行される各種プログラム(例えば、OSプログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。
図5は、右コントローラ4の一例を示す六面図である。図5に示すように、右コントローラ4は、ハウジング51を備える。本実施形態においては、ハウジング51は、縦長の形状、すなわち、上下方向に長い形状である。右コントローラ4は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング51は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、右コントローラ4は、横長となる向きで把持されることも可能である。右コントローラ4が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
右コントローラ4は、左コントローラ3と同様、方向入力部としてアナログスティック52を備える。本実施形態においては、アナログスティック52は、左コントローラ3のアナログスティック32と同じ構成である。また、右コントローラ4は、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、右コントローラ4は、左コントローラ3と同様、ハウジング51の主面上に4つの操作ボタン53〜56(具体的には、Aボタン53、Bボタン54、Xボタン55、および、Yボタン56)を備える。さらに、右コントローラ4は、+(プラス)ボタン57およびホームボタン58を備える。また、右コントローラ4は、ハウジング51の側面の右上に第1Rボタン60およびZRボタン61を備える。また、左コントローラ3と同様、第2Lボタン65および第2Rボタン66を備える。
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
図6は、本実施形態における情報処理システムの他の例の全体構成を示す図である。図6に示すように、一例として、クレードル5は、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で本体装置2のみを載置することが可能である。また、さらに他の例として、クレードル5は、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置を載置することも可能である。また、クレードル5は、ディスプレイ12とは別体の外部表示装置の一例である据置型モニタ6(例えば、据置型テレビ)と通信可能である(有線通信であってもよいし、無線通信であってもよい)。詳細は後述するが、上記一体型装置または本体装置2単体をクレードル5に載置した場合、情報処理システムは、本体装置2が取得または生成した画像を据置型モニタ6に表示することができる。また、本実施形態においては、クレードル5は、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードル5は、ハブ装置(具体的には、USBハブ)の機能を有する。
図7は、クレードル5の一例の外観構成を示す図である。クレードル5は、上記一体型装置または本体装置2のみを着脱可能に載置する(装着するとも言える)ことが可能なハウジングを有する。本実施形態においては、図7に示すように、ハウジングは、溝71aが形成される第1支持部71と、略平面状の第2支持部72とを有する。
図7に示すように、第1支持部71に形成される溝71aは、上記一体型装置の下側部分の形状に応じた形状を有する。具体的には、溝71aは、上記一体型装置の下側部分を挿入可能な形状であり、より具体的には、上記本体装置2の下側部分と略一致する形状である。したがって、上記一体型装置の下側部分を溝71aに挿入することによって、上記一体型装置をクレードル5に載置することができる。また、第2支持部72は、その下側部分が溝71aに挿入された上記一体型装置の表面(すなわち、ディスプレイ12が設けられる面)を支持する。この第2支持部72によって、クレードル5は、上記一体型装置をより安定的に支持することができる。なお、図7に示すハウジングの形状は一例であり、他の実施形態においては、クレードル5のハウジングは、上記本体装置2を載置することが可能な任意の形状であってよい。
図7に示すように、また、クレードル5は、クレードル5が上記一体型装置と通信を行うための本体端子73を備える。図7に示すように、本体端子73は、第1支持部71に形成される溝71aの底面に設けられる。より具体的には、本体端子73は、上記一体型装置がクレードル5に装着される場合に、本体装置2の下側端子27が接触する位置に設けられる。本実施形態においては、本体端子73は、USBコネクタ(より具体的には、オス側コネクタ)である。
図7では図示しないが、クレードル5は、ハウジングの背面に端子(本実施形態においては、複数の端子を有する。具体的には、クレードル5は、図10に示すモニタ用端子132、電源端子134、および拡張用端子137)を有する。これらの端子の詳細については後述する。
図8は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、図3に示す構成の他、図8に示す各構成要素81〜98を備える。これらの構成要素81〜98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
本体装置2は、CPU(Central Processing Unit)81を備える。CPU81は、本体装置2において実行される各種の情報処理を実行する情報処理部である。CPU81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、各スロット23および24に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、CPU81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、CPU81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、CPU81の指示に応じて行う。
CPU81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、CPU81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi−Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、CPU81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
CPU81は、上述の左側端子17、右側端子21、および、下側端子27に接続される。CPU81は、左コントローラ3と有線通信を行う場合、左側端子17を介して左コントローラ3へデータを送信するとともに、左側端子17を介して左コントローラ3から操作データを受信する。また、CPU81は、右コントローラ4と有線通信を行う場合、右側端子21を介して右コントローラ4へデータを送信するとともに、右側端子21を介して右コントローラ4から操作データを受信する。また、CPU81は、クレードル5と通信を行う場合、下側端子27を介してクレードル5へデータを送信する。このように、本実施形態においては、本体装置2は、左コントローラ3および右コントローラ4との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置または本体装置2単体がクレードル5に装着された場合、本体装置2は、クレードル5を介してデータ(例えば、画像データや音声データ)を据置型モニタ6に出力することができる。
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、ユーザは、複数の左コントローラ3および複数の右コントローラ4を用いて本体装置2に対する入力を行うことができる。
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とCPU81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、CPU81へ出力する。
また、ディスプレイ12は、CPU81に接続される。CPU81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、CPU81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。すなわち、コーデック回路87は、CPU81から音声データを受け取った場合、当該音声データに対してD/A変換を行って得られる音声信号をスピーカ88または音声入出力端子25へ出力する。これによって、スピーカ88あるいは音声入出力端子25に接続された音声出力部(例えば、イヤホン)から音が出力される。また、コーデック回路87は、音声入出力端子25から音声信号を受け取った場合、音声信号に対してA/D変換を行い、所定の形式の音声データをCPU81へ出力する。また、音量ボタン26は、CPU81に接続される。CPU81は、音量ボタン26に対する入力に基づいて、スピーカ88または上記音声出力部から出力される音量を制御する。
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびCPU81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、CPU81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル5)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
図9は、情報処理システム1の内部構成の一例を示すブロック図である。なお、情報処理システム1のうちの本体装置2に関する内部構成の詳細については、図8で示しているため図9では省略している。
左コントローラ3は、本体装置2との間で通信を行う通信制御部101を備える。図9に示すように、通信制御部101は、端子42を含む各構成要素に接続される。本実施形態においては、通信制御部101は、端子42を介した有線通信と、端子42を介さない無線通信との両方で本体装置2と通信を行うことが可能である。通信制御部101は、左コントローラ3が本体装置2に対して行う通信方法を制御する。すなわち、左コントローラ3が本体装置2に装着されている場合、通信制御部101は、端子42を介して本体装置2と通信を行う。また、左コントローラ3が本体装置2から外されている場合、通信制御部101は、本体装置2(具体的には、コントローラ通信部83)との間で無線通信を行う。コントローラ通信部83と通信制御部101との間の無線通信は、例えばBluetooth(登録商標)の規格に従って行われる。
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
左コントローラ3は、各ボタン103(具体的には、ボタン33〜39,43,および44)を備える。また、左コントローラ3は、アナログスティック(図9では「スティック」と記載する)32を備える。各ボタン103およびアナログスティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
左コントローラ3は、加速度センサ104を備える。本実施形態においては、加速度センサ104は、所定の3軸(例えば、図11に示すXYZ軸)方向に沿った直線加速度の大きさを検出する。なお、加速度センサ104は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。また、左コントローラ3は、角速度センサ105を備える。本実施形態においては、角速度センサ105は、所定の3軸(例えば、図11に示すXYZ軸)回りの角速度を検出する。なお、角速度センサ105は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。加速度センサ104および角速度センサ105は、それぞれ通信制御部101に接続される。そして、加速度センサ104および角速度センサ105の検出結果は、適宜のタイミングで繰り返し通信制御部101へ出力される。
通信制御部101は、各入力部(具体的には、各ボタン103、アナログスティック32、各センサ104および105)から、入力に関する情報(具体的には、操作に関する情報、または、センサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103およびアナログスティック32に対する操作を、操作データに基づいて判別することができる。また、本体装置2は、左コントローラ3の動きおよび/または姿勢に関する情報を、操作データ(具体的には、加速度センサ104および角速度センサ105の検出結果)に基づいて算出することができる。
左コントローラ3は、振動によってユーザに通知を行うための振動子107を備える。本実施形態においては、振動子107は、本体装置2からの指令によって制御される。すなわち、通信制御部101は、本体装置2からの上記指令を受け取ると、当該指令に従って振動子107を駆動させる。ここで、左コントローラ3は、コーデック106を備える。通信制御部101は、上記指令を受け取ると、指令に応じた制御信号をコーデック106へ出力する。コーデック106は、通信制御部101からの制御信号を増幅して、振動子107を駆動させるための駆動信号を生成して振動子107へ与える。これによって振動子107が動作する。
振動子107は、より具体的にはリニア振動モータである。リニア振動モータは、回転運動をする通常のモータと異なり、入力される電圧に応じて所定方向に駆動されるため、入力される電圧の波形に応じた振幅、周波数で振動をさせることができる。本実施形態において、本体装置2から左コントローラ3に送信される振動制御信号は、単位時間ごとに周波数と振幅とを表すデジタル信号であってよい。別の実施形態においては、波形そのものを示す情報を送信するようにしてもよいが、振幅と周波数とだけを送信することで通信データ量を削減することができる。また、さらにデータ量を削減するため、そのときの振幅と周波数との数値に替えて、前回の値からの差分だけを送信するようにしてもよい。この場合、コーデック部106は、通信制御部101から取得される振幅と周波数との値を示すデジタル信号をアナログの電圧の波形に変換し、当該波形に合わせて電圧を入力することで振動子107を駆動させる。したがって、本体装置2は、単位時間ごとに送信する振幅および周波数を変えることによって、そのときに振動子107を振動させる振幅と周波数とを制御することができる。なお、本体装置2から左コントローラ3に送信される振幅と周波数とは、1つに限らず、2つ以上送信するようにしてもよい。その場合、コーデック部106は、受信された複数の振幅および周波数それぞれが示す波形を合成することで、振動子107を制御する電圧の波形を生成することができる。
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
図9に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。したがって、通信制御部111は、端子64を介した有線通信と、端子64を介さない無線通信(具体的には、Bluetooth(登録商標)の規格に従った通信)との両方で本体装置2と通信を行うことが可能であり、右コントローラ4が本体装置2に対して行う通信方法を制御する。
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部(具体的には、各ボタン113、アナログスティック52、加速度センサ114、および、角速度センサ115)を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。
また、右コントローラ4は、振動子117およびコーデック116を備える。振動子117およびコーデック116は、左コントローラ3の振動子107およびコーデック106と同様に動作する。すなわち、通信制御部111は、本体装置2からの指令に従って、コーデック116を用いて振動子117を動作させる。
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。
図10は、クレードル5の内部構成の一例を示すブロック図である。なお、図10において、本体装置2に関する内部構成の詳細については、図8で示しているので省略している。
図10に示すように、クレードル5は、変換部131およびモニタ用端子132を備える。変換部131は、本体端子73およびモニタ用端子132と接続される。変換部131は、本体装置2から受信した画像(映像とも言える)および音声に関する信号の形式を、据置型モニタ6へ出力する形式へと変換する。ここで、本実施形態においては、本体装置2は、ディスプレイポート信号(すなわち、DisplayPortの規格に従った信号)として画像および音声の信号をクレードル5へ出力する。また、本実施形態においては、クレードル5と据置型モニタ6との間の通信は、HDMI(登録商標)の規格に基づく通信が用いられる。すなわち、モニタ用端子132は、HDMI端子であり、クレードル5と据置型モニタ6とがHDMIケーブルによって接続される。そして、変換部131は、本体装置2から本体端子73を介して受信されるディスプレイポート信号(具体的には、映像および音声を表す信号)を、HDMI信号へ変換する。変換されたHDMI信号は、モニタ用端子132を介して据置型モニタ6へ出力される。
クレードル5は、電力制御部133および電源端子134を備える。電源端子134は、図示しない充電装置(例えば、ACアダプタ等)を接続するための端子である。本実施形態においては、電源端子134にACアダプタが接続されており、クレードル5には商用電源が供給されているものとする。電力制御部133は、クレードル5に対して本体装置2が装着された場合、本体端子73を介して電源端子134からの電力を本体装置2へ供給する。これによって、本体装置2のバッテリ98が充電される。
また、クレードル5は、接続処理部136および拡張用端子137を備える。拡張用端子137は、他の装置を接続するための端子である。本実施形態においては、クレードル5は、拡張用端子137として、複数(より具体的には3つ)のUSB端子を備える。接続処理部136は、本体端子73および各拡張用端子137に接続される。接続処理部136は、USBハブとしての機能を有し、例えば、拡張用端子137に接続された装置と、本体端子73に接続された本体装置2との間の通信を管理する(すなわち、ある装置からの信号を他の装置へ適宜分配して送信する)。上記のように、本実施形態においては、情報処理システム1は、クレードル5を介して他の装置との通信を行うことが可能である。なお、接続処理部136は、通信速度を変換したり、拡張用端子137に接続された装置に対する電力供給を行ったりすることが可能であってもよい。
以上に説明したように、本実施形態における情報処理システム1については左コントローラ3および右コントローラ4が本体装置2から着脱可能である。また、クレードル5に左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置や本体装置2単体を装着することによって据置型モニタ6に画像(および音声)を出力可能である。以下、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で、クレードル5に本体装置2単体を装着することによって据置型モニタ6に画像(および音声)を出力する利用態様における情報処理システムを用いて説明する。
上述のように、本実施形態においては、左コントローラ3および右コントローラ4を本体装置2から外した状態(「離脱状態」と呼ぶ)で情報処理システム1を利用することも可能である。離脱状態で情報処理システム1を利用して同じアプリケーション(例えば、ゲームアプリケーション)に対する操作を行う場合の態様としては、1人のユーザが左コントローラ3および右コントローラ4の両方を用いる態様が考えられる。なお、当該利用態様によって複数のユーザが同じアプリケーションを用いて操作する場合は、左コントローラ3および右コントローラ4の組を複数組用意して、それぞれのユーザが当該複数組のうちの1組を用いる態様が考えられる。
図11〜図13は、離脱状態において、1人のユーザが左コントローラ3および右コントローラ4の組を把持して情報処理システム1を利用する様子の一例を示す図である。図11〜図13に示すように、離脱状態において、ユーザは、左コントローラ3を左手で把持し、右コントローラ4を右手で把持して操作を行いながら、据置型モニタ6に表示された画像を見ることができる。
例えば、本実施例では、ユーザは、縦長の略板状である左コントローラ3の長手方向の下方向(図1に示す下方向(y軸負方向))が鉛直方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面(スライダ40が設けられている側面)が前方に向き、かつ、左コントローラ3の主面(アナログスティック32等が設けられる面)が右に向くように左コントローラ3を左手で把持する。また、ユーザは、縦長の略板状である右コントローラ4の長手方向の下方向(図1に示す上下方向(y軸負方向))が鉛直方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面(スライダ62が設けられている側面)が前方に向き、かつ、右コントローラ4の主面(アナログスティック52等が設けられる面)が左に向くように右コントローラ4を右手で把持する。このように左手で左コントローラ3を把持し右手で右コントローラ4を把持した状態(以下、当該方向に把持された左コントローラ3および右コントローラ4の姿勢を基本姿勢と記載することがある)から、各コントローラを上下左右前後に動かしたり、各コントローラを回転させたり、各コントローラを振り動かしたりすることによって、各コントローラの動きや姿勢に応じてゲームプレイが行われる。
なお、左コントローラ3に生じる加速度や角速度の方向をわかりやすくするために、上記把持状態における前方向(丸みを帯びた側面から本体装置2と接する側面に向かう方向であり、図1に示すx軸負方向)をX軸正方向とし、上記把持状態における右方向(背面から主面に向かう方向であり、図1に示すz軸負方向)をY軸正方向とし、上記把持状態における上方向(長手方向の上に向かう方向であり、図1に示すy軸正方向)をZ軸正方向とする。そして、左コントローラ3の加速度センサ104は、上記XYZ軸方向の加速度をそれぞれ検出可能であり、角速度センサ105は、上記XYZ軸方向周りの角速度をそれぞれ検出可能であるとする。また、右コントローラ4に生じる加速度や角速度の方向をわかりやすくするために、上記把持状態における前方向(丸みを帯びた側面から本体装置2と接する側面に向かう方向であり、図1に示すx軸正方向)をX軸正方向とし、上記把持状態における右方向(主面から背面に向かう方向であり、図1に示すz軸正方向)をY軸正方向とし、上記把持状態における上方向(長手方向の上に向かう方向であり、図1に示すy軸正方向)をZ軸正方向とする。そして、右コントローラ4の加速度センサ114は、上記XYZ軸方向の加速度をそれぞれ検出可能であり、角速度センサ115は、上記XYZ軸方向周りの角速度をそれぞれ検出可能であるとする。
次に、図14〜図17は、左コントローラ3および右コントローラ4を動かすことによってプレイするゲームにおいて表示されるゲーム画像例を示す図である。図14に示すように、本ゲーム例では、プレイヤオブジェクトPOと敵オブジェクトEOとが対戦するゲーム(例えば、ボクシングゲーム)の画像が据置型モニタ6に表示される。そして、左コントローラ3および右コントローラ4を操作するユーザは、左コントローラ3本体および/または右コントローラ4本体を振り動かしたり、左コントローラ3本体および/または右コントローラ4本体の姿勢を変化させたりすることによって、プレイヤオブジェクトPOを操作することができる。例えば、左コントローラ3を振り動かすことによってプレイヤオブジェクトPOの左グラブ(左拳)を模した第1オブジェクトG1の動作を制御することができ、右コントローラ4を振り動かすことによってプレイヤオブジェクトPOの右グラブ(右拳)を模した第2オブジェクトG2の動作を制御することができる。具体的には、ユーザが左コントローラ3を把持している左手を用いて左パンチを繰り出すように振る操作を行った場合、敵オブジェクトEOが配置されている場所に向かってプレイヤオブジェクトPOの左グラブを模した第1オブジェクトG1が移動する。また、ユーザが右コントローラ4を把持している右手を用いて右パンチを繰り出すように振る操作を行った場合、敵オブジェクトEOが配置されている場所に向かってプレイヤオブジェクトPOの右グラブを模した第2オブジェクトG2が移動する。
例えば、左コントローラ3および右コントローラ4の何れも動かしていない状態(図14に示す状態)から、右コントローラ4を前方(右コントローラ4のX軸正方向)に押し出すように振り動かした場合、図15に示すように右コントローラ4の動きに応じてプレイヤオブジェクトPOの第2オブジェクトG2が敵オブジェクトEOに向かってエフェクト画像Ie1が付与された状態で移動する。これによって、敵オブジェクトEOに対してプレイヤオブジェクトPOが右パンチを繰り出したようなゲーム画像が表示される。
ここで、第1オブジェクトG1が移動開始する際の移動方向は、左コントローラ3を押し出すように振り動かした際の左コントローラ3の姿勢によって設定される。また、第2オブジェクトG2が移動開始する際の移動方向は、右コントローラ4を押し出すように動かした際の右コントローラ4の姿勢によって設定される。例えば、図15に示したように、右コントローラ4がX軸正方向に移動した場合、当該移動における右コントローラ4のロール方向の姿勢に応じて第2オブジェクトG2の移動方向D1が設定される。一例として、本実施例では、上記右コントローラ4が移動している期間において、実空間において重力加速度が作用している方向を基準とした右コントローラ4のY軸方向の傾きを算出し、当該Y軸方向の傾きに基づいて第2オブジェクトG2の移動方向D1を算出している。具体的には、右コントローラ4が上記基準姿勢に対して右方向にロール回転した姿勢であることを上記Y軸方向の傾きが示す場合、仮想空間の右方向に向かって第2オブジェクトG2が移動する。また、右コントローラ4が上記基準姿勢に対して左方向にロール回転した姿勢であることを上記Y軸方向の傾きが示す場合、仮想空間の左方向に向かって第2オブジェクトG2が移動する。そして、それぞれ右方向または左方向に移動方向がずれる角度については、上記Y軸方向の傾き角度に応じてそれぞれ算出される。
また、本ゲーム例では、仮想空間においてプレイヤオブジェクトPOと敵オブジェクトEOとの距離が相対的に遠い場合であってもパンチを繰り出すことが可能であり、プレイヤオブジェクトPOの腕が伸びることによって、第1オブジェクトG1および第2オブジェクトG2が相対的に長い距離を移動することができる。そして、第1オブジェクトG1または第2オブジェクトG2は、他のオブジェクト(例えば、敵オブジェクトEO)と衝突するか所定の距離移動した後に移動を終了し、当該第1オブジェクトG1および第2オブジェクトG2がそれぞれ移動開始した移動開始位置(例えば、図14に示すプレイヤオブジェクトPOの手元)まで戻る。第1オブジェクトG1および第2オブジェクトG2が移動開始位置まで戻ることによって、敵オブジェクトEOに向かう次の移動が可能となる。言い換えると、次のパンチを出すことができるようになる。したがって、上記移動開始位置から第1オブジェクトG1または第2オブジェクトG2が移動を開始してから再び当該移動開始位置まで戻るまでの時間が一般的なボクシングゲームより相対的に長くなる。
また、本ゲーム例では、仮想空間において第1オブジェクトG1および/または第2オブジェクトG2が移動する際、当該オブジェクトを操作するコントローラが振動する。例えば、左コントローラ3を押し出すように振り動かすことに応じて第1オブジェクトG1が移動する場合、第1オブジェクトG1が仮想空間を移動することに応じて左コントローラ3が振動する。また、右ントローラ4を押し出すように振り動かすことに応じて第2オブジェクトG2が移動する場合、第2オブジェクトG2が仮想空間を移動することに応じて右コントローラ4が振動する(図15の状態)。具体的には、本体装置2は、左コントローラ3および/または右コントローラ4が押し出すように振り動かされた場合、仮想空間を移動する第1オブジェクトG1および/または第2オブジェクトG2の種類、移動速度、移動方向等に応じて往路振動データを生成して、左コントローラ3および/または右コントローラ4に送信する。また、本体装置2は、第1オブジェクトG1および/または第2オブジェクトG2が他のオブジェクトと衝突した場合は、当該衝突に応じた振動を示す振動データを生成して、左コントローラ3および/または右コントローラ4に送信する。さらに、本体装置2は、第1オブジェクトG1および/または第2オブジェクトG2が上記移動開始位置へ戻る復路を移動する場合、復路を移動する第1オブジェクトG1および/または第2オブジェクトG2の種類、移動速度、移動方向等に応じて復路振動データを生成して、左コントローラ3および/または右コントローラ4に送信する。これによって、各種振動データを受信した左コントローラ3および/または右コントローラ4は、当該振動データに基づいて振動する。
また、本ゲーム例では、第1オブジェクトG1または第2オブジェクトG2の移動時間を利用して、第1オブジェクトG1または第2オブジェクトG2が移動中(典型的には、敵オブジェクトEOの方向へ移動している期間)であっても、左コントローラ3または右コントローラ4の姿勢や動きに応じて移動する軌道を変化させることができる。例えば、上述した第1オブジェクトG1または第2オブジェクトG2の移動開始時の左コントローラ3または右コントローラ4の姿勢から左コントローラ3または右コントローラ4がロール方向に回転した場合やヨー方向に回転した場合、当該回転に応じて第1オブジェクトG1または第2オブジェクトG2の軌道を変化させる。例えば、図16に示した一例では、右コントローラ4がX軸正方向に押し出すように振り動かされた後、第2オブジェクトG2の移動中に右コントローラ4が左ロール方向に回転移動(図示θx)することに応じて、第2オブジェクトG2の移動方向がD2に変化している。また、第2オブジェクトG2の移動方向が変化する際、第2オブジェクトG2にエフェクト画像Ie2が付与された状態となる。
一例として、本実施例では、第1オブジェクトG1または第2オブジェクトG2の移動開始後の左コントローラ3または右コントローラ4のX軸周りの回転速度(角速度)を上記ロール方向の回転として、当該X軸周りの回転速度に基づいて移動中の第1オブジェクトG1または第2オブジェクトG2の軌道を変化させる。具体的には、第1オブジェクトG1が移動中に左コントローラ3がX軸を中心として右方向にロール回転した回転速度が得られた場合、仮想空間の右方向に第1オブジェクトG1の軌道を変化させ、左コントローラ3がX軸を中心として左方向にロール回転した回転速度が得られた場合、仮想空間の左方向に第1オブジェクトG1の軌道を変化させる。また、第2オブジェクトG2が移動中に右コントローラ4がX軸を中心として右方向にロール回転した回転速度が得られた場合、仮想空間の右方向に第2オブジェクトG2の軌道を変化させ、右コントローラ4がX軸を中心として左方向にロール回転した回転速度が得られた場合、仮想空間の左方向に第2オブジェクトG2の軌道を変化させる。
他の例として、本実施例では、第1オブジェクトG1または第2オブジェクトG2の移動開始後の実空間の重力方向を基準とする左コントローラ3または右コントローラ4の回転速度(角速度)を上記ヨー方向の回転として、当該重力方向周りの回転速度に基づいて移動中の第1オブジェクトG1または第2オブジェクトG2の軌道を変化させる。具体的には、第1オブジェクトG1が移動中に左コントローラ3が重力方向を中心として右方向にヨー回転した回転速度が得られた場合、仮想空間の右方向に第1オブジェクトG1の軌道を変化させ、左コントローラ3が重力方向を中心として左方向にヨー回転した回転速度が得られた場合、仮想空間の左方向に第1オブジェクトG1の軌道を変化させる。また、第2オブジェクトG2が移動中に右コントローラ4が重力方向を中心として右方向にヨー回転した回転速度が得られた場合、仮想空間の右方向に第2オブジェクトG2の軌道を変化させ、右コントローラ4が重力方向を中心として左方向にヨー回転した回転速度が得られた場合、仮想空間の左方向に第2オブジェクトG2の軌道を変化させる。
上述したように第1オブジェクトG1および/または第2オブジェクトG2の軌道が変化した場合、左コントローラ3および/または右コントローラ4の振動も変化する。例えば、本体装置2は、第1オブジェクトG1および/または第2オブジェクトG2の往路軌道が変化した場合、左コントローラ3および/または右コントローラ4の動きや姿勢の変化(例えば、ロール方向やヨー方向の角速度)に応じて振動の振幅および/または周波数の変化パラメータを算出し、当該変化パラメータを用いて上記往路振動データを一時的に変化させた後、再度往路振動データに戻す。これによって、一時的に変化する往路振動データを受信した左コントローラ3および/または右コントローラ4は、当該往路振動データに基づいて振動の振幅および/または周波数を変化させる。
また、本ゲーム例では、左コントローラ3または右コントローラ4が振り動かされたか否かの判定を、左コントローラ3または右コントローラ4に生じた加速度の大きさを用いて行う。そして、第1オブジェクトG1が上記移動開始位置に配置されている状態(以下、第1移動開始可能状態と称する)において左コントローラ3が上記X軸正方向に振り動かされたと判定された場合、当該移動開始位置から敵オブジェクトEOに向かって第1オブジェクトG1が移動を開始する。また、第2オブジェクトG2が上記移動開始位置に配置されている状態(以下、第2移動開始可能状態と称する)において右コントローラ4が上記X軸正方向に振り動かされたと判定された場合、当該移動開始位置から敵オブジェクトEOに向かって第2オブジェクトG2が移動を開始する。しかしながら、本実施例では、上記第1移動開始可能状態でない場合であっても、左コントローラ3が上記X軸正方向に振り動かされたと判定されてから所定時間以内に上記第1移動開始可能状態になった場合は、当該左コントローラ3の振り操作に応じて上記移動開始位置から敵オブジェクトEOに向かって第1オブジェクトG1の移動を開始させることができる。また、上記第2移動開始可能状態でない場合であっても、右コントローラ4が上記X軸正方向に振り動かされたと判定されてから所定時間以内に上記第2移動開始可能状態になった場合は、当該右コントローラ4の振り操作に応じて上記移動開始位置から敵オブジェクトEOに向かって第2オブジェクトG2の移動を開始させることができる。このように、本実施例では、上記第1移動開始可能状態および/または上記第2移動開始可能状態でない場合であっても、左コントローラ3および/または右コントローラ4を振り動かすことによって第1オブジェクトG1および/または第2オブジェクトG2を移動開始させる指示を行うことができるため、操作指示可能な状態が断続的に生じるゲームであっても操作を容易にすることが可能となる。つまり、上述したように、上記ゲーム例では、移動開始位置から第1オブジェクトG1または第2オブジェクトG2が移動を開始してから再び当該移動開始位置まで戻るまでの時間が一般的なボクシングゲームより相対的に長くなるため、上記第1移動開始可能状態や上記第2移動開始可能状態になるのを待ちきれずに左コントローラ3または右コントローラ4を振り動かす操作が先行してしまうことが考えられるが、このような先行操作が行われた場合であっても当該先行操作を無効にせずに救済してゲーム操作に生かすことが可能となる。
また、本ゲーム例では、図17に示すように、第1オブジェクトG1および第2オブジェクトG2を上記移動開始位置から同時に移動開始させることによって、所定のアクションが行われる。例えば、第1オブジェクトG1および第2オブジェクトG2の一方が移動開始した時点から所定期間以内に他方が移動開始する場合、第1オブジェクトG1および第2オブジェクトG2が組となった「両手パンチアクション」が開始される。ここで、「両手パンチアクション」は、仮想空間を移動する第1オブジェクトG1および第2オブジェクトG2の間に衝突領域Aが形成された様子がゲーム画像で表現され、当該衝突領域Aが形成された状態で第1オブジェクトG1および第2オブジェクトG2が敵オブジェクトEOに向かって移動する。そして、敵オブジェクトEOには移動中の第1オブジェクトG1または第2オブジェクトG2や衝突領域Aが衝突した場合に、第1オブジェクトG1または第2オブジェクトG2が単独で衝突する場合より大きなダメージが敵オブジェクトEOに与えられる所定のアクションが行われる。一例として、「両手パンチアクション」では、敵オブジェクトEOと衝突した場合に当該敵オブジェクトEOを投げ飛ばすアクションが行われたり、当該敵オブジェクトEOを動けなくするようなアクションが行われたりしてもよい。なお、「両手パンチアクション」実行中であっても、上述した左コントローラ3および/または右コントローラ4の姿勢や動きに応じて第1オブジェクトG1および/または第2オブジェクトG2が移動する軌道を変化させることができる。したがって、第1オブジェクトG1および/または第2オブジェクトG2が移動する軌道を変化させることによって、衝突領域Aの範囲も変化させることができるため、敵オブジェクトEOに対してより戦略的な攻撃も可能となる。
このようなアクションが行われた状態で第1オブジェクトG1および第2オブジェクトG2が移動する場合であっても、当該オブジェクトの移動に応じて左コントローラ3および/または右コントローラ4が振動する。具体的には、本体装置2は、第1オブジェクトG1および第2オブジェクトG2が両手パンチアクションによって移動する場合、仮想空間を移動する第1オブジェクトG1および第2オブジェクトG2の種類、移動速度、移動方向等に応じてアクション往路振動データを生成して、左コントローラ3および右コントローラ4に送信する。また、本体装置2は、衝突領域A、第1オブジェクトG1、または第2オブジェクトG2が他のオブジェクトと衝突した場合は、当該衝突に応じた振動を示す振動データを生成して、左コントローラ3および右コントローラ4に送信する。さらに、本体装置2は、第1オブジェクトG1および第2オブジェクトG2が上記移動開始位置へ戻る復路を移動する場合、復路を移動する第1オブジェクトG1および第2オブジェクトG2の種類、移動速度、移動方向等に応じて復路振動データを生成して、左コントローラ3および右コントローラ4に送信する。これによって、両手パンチアクションが行われる場合であっても、各種振動データを受信した左コントローラ3および右コントローラ4は、当該振動データに基づいて振動する。
また、両手パンチアクション実行中に第1オブジェクトG1および第2オブジェクトG2の軌道が変化した場合、左コントローラ3および右コントローラ4の振動も変化する。例えば、本体装置2は、両手パンチアクション実行中に第1オブジェクトG1および第2オブジェクトG2の往路軌道が変化した場合、左コントローラ3および/または右コントローラ4の動きや姿勢の変化に応じて振動の振幅および/または周波数の変化パラメータを算出し、当該変化パラメータを用いて上記アクション往路振動データを一時的に変化させた後、再度アクション往路振動データに戻す。これによって、一時的に変化するアクション往路振動データを受信した左コントローラ3および右コントローラ4は、当該アクション往路振動データに基づいて振動の振幅および/または周波数を変化させる。
また、本ゲーム例では、左コントローラ3および右コントローラ4の両方の動きや姿勢に応じて、仮想空間内でプレイヤオブジェクトPOを移動させることができる。例えば、左コントローラ3および右コントローラ4の両方が実空間のピッチ方向に回転した場合やロール方向に回転した場合、当該回転した傾きに応じてプレイヤオブジェクトPOを移動させる。具体的には、実空間の重力方向を基準とする左コントローラ3のX軸方向およびY軸方向と右コントローラ4のX軸方向およびY軸方向の傾きをそれぞれ算出する。そして、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が前方に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該前方へ傾いている角度(例えば、当該角度の平均値)に応じた移動量でプレイヤオブジェクトPOを仮想空間の前方へ移動させる。また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が後方に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該後方へ傾いている角度(例えば、当該角度の平均値)に応じた移動量でプレイヤオブジェクトPOを仮想空間の後方へ移動させる。また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が左に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該左へ傾いている角度(例えば、当該角度の平均値)に応じた移動量でプレイヤオブジェクトPOを仮想空間の左へ移動させる。また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が右に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該右へ傾いている角度(例えば、当該角度の平均値)に応じた移動量でプレイヤオブジェクトPOを仮想空間の右へ移動させる。
また、本実施例では、左コントローラ3と右コントローラ4とを接合して1つの操作装置として機能させるアタッチメント(付属機器)を用いて上記ゲームをプレイすることも可能である。
図18は、左コントローラ3および右コントローラ4を装着可能な付属機器の一例を示す図である。図18に示すように、付属機器の一例である拡張グリップ210は、ユーザがそれを用いて操作を行うための付属機器である。拡張グリップ210は、左コントローラ3を装着可能であり、また、右コントローラ4を装着可能である。したがって、拡張グリップ210によって、ユーザは、本体装置2から外した2つのコントローラ3および4を一体として把持して操作を行うことができる。
拡張グリップ210は、左コントローラ3および右コントローラ4をそれぞれ装着するための機構として、本体装置2が有する機構(具体的には、左レール部材15および右レール部材19等)と同様の機構を有している。したがって、本体装置2に装着する場合と同様にして、左コントローラ3および右コントローラ4を拡張グリップ210に装着することができる。具体的には、拡張グリップ210は、所定幅の本体部を挟んで左右両側に左コントローラ3および右コントローラ4をそれぞれ装着するための機構が設けられており、左コントローラ3および右コントローラ4を装着するレール部材がそれぞれ平行に設けられている。これによって、左コントローラ3および右コントローラ4は、それぞれのxyz軸方向が平行となるように拡張グリップ210に取り付けられることになる。そして、ユーザは、拡張グリップ210に装着されて一体となった左コントローラ3および右コントローラ4を両手で把持する。これによって、ユーザは、本体装置2から外した2つの左コントローラ3および右コントローラ4を一体として把持することができる。
このような拡張グリップ210によって一体となった左コントローラ3および右コントローラ4を用いて上記ゲームをプレイする場合、左コントローラ3および右コントローラ4に設けられた各操作ボタンやスティックが用いられて操作される。例えば、右コントローラ4のBボタン54が押下操作された場合、プレイヤオブジェクトPOが左パンチを繰り出して第1オブジェクトG1が移動開始する。右コントローラ4のAボタン53が押下操作された場合、プレイヤオブジェクトPOが右パンチを繰り出して第2オブジェクトG2が移動開始する。仮想ゲーム世界において第1オブジェクトG1および/または第2オブジェクトG2が移動中に左コントローラ3のアナログスティック32が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、移動中の第1オブジェクトG1および/または第2オブジェクトG2の移動方向が変化する。第1オブジェクトG1および第2オブジェクトG2が何れも移動開始位置に配置されている場合に左コントローラ3のアナログスティック32が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、仮想ゲーム世界においてプレイヤオブジェクトPOが移動する。また、第1オブジェクトG1および第2オブジェクトG2が何れも移動開始位置に配置されている場合に左コントローラ3のアナログスティック32が押し込まれる操作が行われた場合、仮想ゲーム世界においてプレイヤオブジェクトPOが敵オブジェクトEOからの攻撃を防御する。右コントローラ4のXボタン55が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがジャンプする動作を行う。そして、右コントローラ4のYボタン56が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがダッシュ(高速移動)する。
拡張グリップ210を用いてゲームプレイする場合であっても、仮想ゲーム世界における第1オブジェクトG1および/または第2オブジェクトG2の状況に応じて、拡張グリップ210に装着された左コントローラ3および/または右コントローラ4に振動が与えられる。一例として、本体装置2は、拡張グリップ210を用いてゲームプレイする場合も、第1オブジェクトG1が仮想空間を移動することに応じて、第1オブジェクトG1の種類、移動速度、移動方向等に応じて往路振動データを生成して、左コントローラ3に送信する。また、本体装置2は、第2オブジェクトG2が仮想空間を移動することに応じて、第2オブジェクトG2の種類、移動速度、移動方向等に応じて往路振動データを生成して、右コントローラ4に送信する。また、本体装置2は、拡張グリップ210を用いてゲームプレイする場合も、第1オブジェクトG1および/または第2オブジェクトG2が他のオブジェクトと衝突した場合は、当該衝突に応じた振動を示す振動データを生成して、左コントローラ3および/または右コントローラ4に送信する。さらに、本体装置2は、拡張グリップ210を用いてゲームプレイする場合も、第1オブジェクトG1および/または第2オブジェクトG2が上記移動開始位置へ戻る復路を移動する場合、復路を移動する第1オブジェクトG1および/または第2オブジェクトG2の種類、移動速度、移動方向等に応じて復路振動データを生成して、左コントローラ3および/または右コントローラ4に送信する。これによって、拡張グリップ210を用いてゲームプレイする場合も、各種振動データを受信した左コントローラ3および/または右コントローラ4は、当該振動データに基づいて振動する。
また、拡張グリップ210を用いてゲームプレイする場合であっても、アナログスティック32が傾倒操作されることによって第1オブジェクトG1および/または第2オブジェクトG2の軌道が変化した場合、左コントローラ3および/または右コントローラ4の振動も変化する。例えば、本体装置2は、第1オブジェクトG1および/または第2オブジェクトG2の往路軌道が変化した場合、アナログスティック32に対する傾倒操作角度(アナログ入力値)に応じて振動の振幅および/または周波数の変化パラメータを算出し、当該変化パラメータを用いて上記往路振動データを一時的に変化させた後、再度往路振動データに戻す。これによって、一時的に変化する往路振動データを受信した左コントローラ3および/または右コントローラ4は、当該往路振動データに基づいて振動の振幅および/または周波数を変化させる。
なお、左コントローラ3および右コントローラ4を装着可能な付属機器を用いて操作する場合、左コントローラ3のアナログスティック32だけでなく、右コントローラ4のアナログスティック52を用いた操作を可能にしてもよい。この場合、一対のアナログスティックを用いた操作が可能となるため、アナログスティック32によって第1オブジェクトG1の軌道を変化させ、アナログスティック52によって第2オブジェクトG2の軌道を変化させるような、独立した方向指示を可能としてもよい。
なお、図14〜図18では、据置型モニタ6を用いて1人プレイ(例えば、敵オブジェクトEOがCPU81によって自動制御される)するゲーム例を用いたが、複数のユーザによってプレイしてもよい。例えば、2人のユーザによってゲームプレイされる場合、ユーザがそれぞれ左コントローラ3および右コントローラ4の組を把持して、別のプレイヤオブジェクトを操作する。そして、据置型モニタ6の表示領域を2つに分割して、それぞれの分割表示領域に各ユーザ用の画像(ユーザが操作するプレイヤオブジェクトから他のユーザが操作するプレイヤオブジェクトを見た画像)を表示する。このような操作環境において、ユーザがそれぞれ相手プレイヤオブジェクトにパンチを繰り出すような操作を行うことによって、それぞれのユーザが相手プレイヤオブジェクトと対戦するゲームが可能となる。
複数のユーザによってゲームプレイされる場合、他の装置(例えば、他の情報処理システム1)との間で通信することによって、当該ゲームプレイに必要なゲームデータを送受信してもよい。例えば、他の装置との間で通信する場合、上述したネットワーク通信部82を介して、インターネット(広域ネットワーク)に接続された他の装置との間でデータを送受信してもよいし、閉ざされたローカルネットワークエリア内に配置された他の装置との間で直接通信する、いわゆる「ローカル通信」を用いてデータを送受信してもよい。
次に、図19〜図26を参照して、本実施形態において情報処理システム1で実行される具体的な処理の一例について説明する。図19は、本実施形態において本体装置2のDRAM85に設定されるデータ領域の一例を示す図である。なお、DRAM85には、図19に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
DRAM85のプログラム記憶領域には、情報処理システム1で実行される各種プログラムPaが記憶される。本実施形態においては、各種プログラムPaは、上述した左コントローラ3および右コントローラ4との間で無線通信するための通信プログラムや、左コントローラ3および/または右コントローラ4から取得したデータに基づいた情報処理(例えば、ゲーム処理)を行うためのアプリケーションプログラム、クレードル5に対する本体装置2の着脱に応じて画像を表示する表示装置を切り替えるプログラム等が記憶される。なお、各種プログラムPaは、フラッシュメモリ84に予め記憶されていてもよいし、情報処理システム1に着脱可能な記憶媒体(例えば、第1スロット23に装着された第1の種類の記憶媒体、第2スロット24に装着された第2の種類の記憶媒体)から取得されてDRAM85に記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されてDRAM85に記憶されてもよい。CPU81は、DRAM85に記憶された各種プログラムPaを実行する。
また、DRAM85のデータ記憶領域には、情報処理システム1において実行される通信処理や情報処理等の処理において用いられる各種のデータが記憶される。本実施形態においては、DRAM85には、操作データDa、姿勢データDb、角速度データDc、加速度データDd、閾値データDe、カーブ値データDf、回転速度データDg、振りフラグデータDh、移動フラグデータDi、アクションフラグデータDj、戻りフラグデータDk、移動開始可能フラグデータDl、プレイヤオブジェクト位置データDm、衝突領域データDn、敵オブジェクト位置データDo、左コントローラ振動データDp、右コントローラ振動データDq、および画像データDr等が記憶される。
操作データDaは、左コントローラ3および右コントローラ4からそれぞれ適宜取得した操作データである。上述したように、左コントローラ3および右コントローラ4からそれぞれ送信される操作データには、各入力部(具体的には、各ボタン、アナログスティック、各センサ)からの入力に関する情報(具体的には、操作に関する情報、または、センサによる検出結果)が含まれている。本実施形態では、無線通信によって左コントローラ3および右コントローラ4からそれぞれ所定周期で操作データが送信されており、当該受信した操作データを用いて操作データDaが適宜更新される。なお、操作データDaの更新周期は、後述する情報処理システム1で実行される処理の周期である1フレーム毎に更新されてもよいし、上記無線通信によって操作データが送信される周期毎に更新されてもよい。
姿勢データDbは、実空間における重力加速度の方向を基準とした左コントローラ3および右コントローラ4それぞれの姿勢を示すデータである。例えば、姿勢データDbは、左コントローラ3および右コントローラ4それぞれに作用している重力加速度の方向を示すデータや、当該重力加速度方向に対するXYZ軸方向を示すデータ等を含んでいる。
角速度データDcは、左コントローラ3および右コントローラ4それぞれに生じている角速度を示すデータである。例えば、角速度データDcは、左コントローラ3および右コントローラ4それぞれに生じているXYZ軸周りの角速度を示すデータ等を含んでいる。
加速度データDdは、左コントローラ3および右コントローラ4それぞれに生じている加速度を示すデータである。例えば、加速度データDdは、左コントローラ3および右コントローラ4それぞれに生じている重力加速度を除いて、XYZ軸方向に生じている加速度を示すデータ等を含んでいる。
閾値データDeは、左コントローラ3および右コントローラ4に対してそれぞれ行われた振り動作を判定するための閾値を示すデータである。カーブ値データDfは、第1オブジェクトG1および第2オブジェクトG2それぞれの移動方向や軌道を算出するためのカーブ値Cを示すデータである。回転速度データDgは、第1オブジェクトG1または第2オブジェクトG2が移動中における左コントローラ3および右コントローラ4の動き(回転速度V)を示すデータである。
振りフラグデータDhは、左コントローラ3および右コントローラ4それぞれが振り動かされたと判定された際にオンに設定される振りフラグを示すデータである。移動フラグデータDiは、第1オブジェクトG1および第2オブジェクトG2それぞれが仮想空間内を移動中である場合にオンに設定される移動フラグを示すデータである。アクションフラグデータDjは、第1オブジェクトG1および第2オブジェクトG2が組となったアクションが行われている場合にオンに設定されるアクションフラグを示すデータである。戻りフラグデータDkは、第1オブジェクトG1および第2オブジェクトG2それぞれが移動開始位置に戻る仮想空間内の復路を移動している場合にオンに設定される戻りフラグを示すデータである。移動開始可能フラグデータDlは、第1オブジェクトG1が第1移動開始可能状態となった場合および第2オブジェクトG2が第2移動開始可能状態となった場合にそれぞれオンに設定される移動開始可能フラグを示すデータである。
プレイヤオブジェクト位置データDmは、第1オブジェクトG1、第2オブジェクトG2、およびプレイヤオブジェクトPOの仮想空間における位置および方向(移動方向)をそれぞれ示すデータである。衝突領域データDnは、衝突領域Aの仮想空間における位置、形状、および範囲を示すデータである。敵オブジェクト位置データDoは、敵オブジェクトEOの仮想空間における位置および方向を示すデータや当該敵オブジェクトEOから放たれるオブジェクト(例えば、左グラブ(左拳)および右グラブ(右拳)を模したオブジェクト)の仮想空間における位置および方向を示すデータである。
左コントローラ振動データDpは、左コントローラ3を振動させるための振動を示すデータである。右コントローラ振動データDqは、右コントローラ4を振動させるための振動を示すデータである。
画像データDrは、ゲームの際に本体装置2のディスプレイ12や据置型モニタ6の表示画面に画像(例えば、仮想オブジェクトの画像、フィールド画像、背景画像)を表示するためのデータである。
次に、本実施形態における情報処理(ゲーム処理)の詳細な一例を説明する。図20は、情報処理システム1で実行されるゲーム処理の一例を示すフローチャートである。図21〜図22は、図20におけるステップS144およびステップS145において行われるコントローラ振り認識処理の詳細の一例を示すサブルーチンである。図23〜図25は、図20におけるステップS146およびステップS147において行われるオブジェクト軌道変化処理の詳細の一例を示すサブルーチンである。図26は、図20におけるステップS148において行われるプレイヤオブジェクト移動処理の詳細の一例を示すサブルーチンである。本実施形態においては、図20〜図26に示す一連の処理は、CPU81が各種プログラムPaに含まれる通信プログラムや所定のアプリケーションプログラム(ゲームプログラム)を実行することによって行われる。また、図20〜図26に示すゲーム処理が開始されるタイミングは任意である。
なお、図20〜図26に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をCPU81が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、CPU81以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置2において実行される処理の一部は、本体装置2と通信可能な他の情報処理装置(例えば、本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち、図20〜図26に示す各処理は、本体装置2を含む複数の情報処理装置が協働することによって実行されてもよい。
図20において、CPU81は、ゲーム処理における初期設定を行い(ステップS141)、次のステップに処理を進める。例えば、上記初期設定では、CPU81は、以下に説明する処理を行うためのパラメータを初期化する。また、上記初期設定では、CPU81は、ゲームプレイを行うためのゲームフィールドを設定し、当該ゲームフィールド上のプレイヤオブジェクトPOや敵オブジェクトEOの初期位置を設定してプレイヤオブジェクト位置データDmおよび敵オブジェクト位置データDoを更新する。また、CPU81は、第1オブジェクトG1および第2オブジェクトG2の移動方向をデフォルト値(例えば、正面方向)に初期設定してプレイヤオブジェクト位置データDmを更新する。また、CPU81は、移動開始可能フラグデータDlが示す移動開始可能フラグをオンに初期設定する。
次に、CPU81は、左コントローラ3および右コントローラ4から操作データを取得して操作データDaを更新し(ステップS142)、次のステップに処理を進める。
次に、CPU81は、左コントローラ3および右コントローラ4それぞれの姿勢、角速度、加速度を算出し(ステップS143)、次のステップに処理を進める。例えば、CPU81は、左コントローラ3および右コントローラ4それぞれに生じている加速度を示すデータを操作データDaから取得し、左コントローラ3および右コントローラ4それぞれに作用している重力加速度の方向を算出して、当該方向を示すデータを用いて姿勢データDbを更新する。重力加速度を抽出する方法については任意の方法を用いればよく、例えば左コントローラ3および右コントローラ4それぞれに平均的に生じている加速度成分を算出して当該加速度成分を重力加速度として抽出してもよい。そして、CPU81は、左コントローラ3に対して算出された重力加速度の方向を基準とした左コントローラ3のXYZ軸方向を左コントローラ3の姿勢として算出し、当該姿勢を示すデータを用いて姿勢データDbを更新する。また、CPU81は、右コントローラ4に対して算出された重力加速度の方向を基準とした右コントローラ4のXYZ軸方向を右コントローラ4の姿勢として算出し、当該姿勢を示すデータを用いて姿勢データDbを更新する。また、CPU81は、左コントローラ3および右コントローラ4それぞれに生じている角速度を示すデータを操作データDaから取得し、左コントローラ3および右コントローラ4それぞれのXYZ軸周りの角速度を算出して、当該角速度を示すデータを用いて角速度データDcを更新する。さらに、CPU81は、左コントローラ3および右コントローラ4それぞれに生じている加速度を示すデータを操作データDaから取得し、左コントローラ3および右コントローラ4それぞれに生じているXYZ軸方向の加速度から上記重力加速度成分を除去して、当該除去後の加速度を示すデータを用いて加速度データDdを更新する。
なお、左コントローラ3や右コントローラ4の姿勢については、重力加速度を基準としたXYZ軸方向が算出された以降は、XYZ各軸周りの角速度のみに応じて更新してもよい。しかしながら、左コントローラ3や右コントローラ4の姿勢と重力加速度の方向との関係が誤差の累積によってずれていくことを防止するために、所定周期毎に重力加速度の方向に対するXYZ軸方向を算出して左コントローラ3や右コントローラ4の姿勢を修正してもよい。
次に、CPU81は、左コントローラ振り認識処理を行い(ステップS144)、次のステップに処理を進める。以下、図21〜図22を参照して、上記ステップS144において行う左コントローラ振り認識処理について説明する。
図21において、CPU81は、左コントローラ3の処理に対して設定されている振りフラグをオフに設定して振りフラグデータDhを更新し、次のステップに処理を進める。
次に、CPU81は、左コントローラ3に対する振り判定を除外するか否かを判定する(ステップS162)。例えば、CPU81は、左コントローラ3が振り戻されている状態である場合、振り判定を除外する。そして、CPU81は、左コントローラ3の振り判定を除外する場合、ステップS163に処理を進める。一方、CPU81は、左コントローラ3が振り判定を行う場合、ステップS164に処理を進める。
左コントローラ3が振り戻されている状態であると判定する方法の第1の例として、CPU81は、姿勢データDbを参照して左コントローラ3のY軸周りの角速度を取得し、左コントローラ3が手前側への回転(例えば、Z軸正方向が手前側に向く回転)をしている場合、上記ステップS162において肯定判定する。左コントローラ3が振り戻されている状態であると判定する方法の第2の例として、CPU81は、姿勢データDbを参照して左コントローラ3の姿勢を取得し、当該左コントローラ3が重力加速度の方向に対して後傾している姿勢(例えば、左コントローラ3のX軸正方向が実空間に対して水平方向より上を向いている姿勢)となっている場合、CPU81は、上記ステップS162において肯定判定する。左コントローラ3が振り戻されている状態であると判定する方法の第3の例として、CPU81は、加速度データDdを参照して左コントローラ3に生じている加速度を取得し、当該左コントローラ3がプレイヤへの方向に移動している(例えば、左コントローラ3に生じている加速度に左コントローラ3のX軸負方向成分が含まれている)場合、CPU81は、上記ステップS162において肯定判定する。
ステップS163において、CPU81は、現時点において左コントローラ3に生じている加速度の大きさが左コントローラ3の振り判定をするための閾値より大きい場合、現時点において左コントローラ3に生じている加速度の大きさを当該閾値として設定して閾値データDeを更新し、ステップS164に処理を進める。ここで、後述により明らかとなるが、本実施例では、左コントローラ3に生じている加速度のうち、Y軸方向成分を除いた加速度(以下、XZ加速度と記載する)の大きさが閾値を越えた場合に、左コントローラ3が振り動かされたと判定している。上記ステップS163では、現時点において左コントローラ3に生じている加速度の大きさ(すなわち、現時点において左コントローラ3に生じている加速度からY軸方向成分の加速度を除いた大きさ)が後述する所定値より大きい場合に、当該加速度の大きさを上記振り判定で用いる閾値として設定することによって、上記振り判定において否定判定されることになる。つまり、上記ステップS163は、左コントローラ3が振り戻されている状態となっている場合に実行される処理であり、左コントローラ3がパンチを繰り出す動作の前後で振り戻されているような場合に左コントローラ3がパンチを繰り出すように振られていると誤判定することを防止することができる。
ステップS164において、CPU81は、左コントローラ3に生じているXZ加速度の大きさが上記閾値より大きいか否かを判定する。そして、CPU81は、左コントローラ3に生じているXZ加速度の大きさが上記閾値より大きい場合、ステップS165に処理を進める。一方、CPU81は、左コントローラ3に生じているXZ加速度の大きさが上記閾値以下である場合、ステップS168に処理を進める。ここで、本実施例では、左コントローラ3がパンチを繰り出すように、すなわち左コントローラ3がX軸正方向へ移動するように振り動かされたか否かを判定するために、左コントローラ3に生じている加速度のうち、Y軸方向成分を除いたXZ加速度の大きさと所定値(上記ステップS163や後述するステップS167またはステップS168において設定される閾値)とが比較される。したがって、上記ステップS164においては、CPU81は、加速度データDdを参照して左コントローラ3のX軸方向およびZ軸方向それぞれに生じている加速度を取得し、当該加速度を用いて左コントローラ3に生じているXZ加速度の大きさを算出する。そして、左コントローラ3が振り戻されている状態ではない場合、XZ加速度の大きさが所定値または当該所定値に近づいた閾値を越えていれば、左コントローラ3がパンチを繰り出すように振られたと判定する。
ステップS165において、CPU81は、一時変数Bが0であるか否かを判定する。そして、CPU81は、一時変数Bが0である場合、ステップS166に処理を進める。一方、CPU81は、一時変数Bが0でない場合、ステップS167に処理を進める。
ステップS166において、CPU81は、左コントローラ3の処理に対して設定されている振りフラグをオンに設定して振りフラグデータDhを更新し、一時変数Bとして所定フレーム数を設定して、ステップS167に処理を進める。このように、左コントローラ3の処理に対して設定されている振りフラグは、左コントローラ3がパンチを繰り出すように振られたと判定され、かつ一時変数Bが0である場合にオンに設定される。
ここで、上記ステップS166において、一時変数Bとして設定する所定フレーム数は、左コントローラ3がパンチを繰り出すように振られたと判定された直後に次の振り判定を除外する期間(振りフラグをオンに設定できない期間)を一時的に設定するものであり、本実施例では一例として12フレームに設定する。例えば、左コントローラ3が振り動かされていると判定された後であっても、左コントローラ3に生じている加速度の上昇が継続することがあり得る。このような場合、上記ステップS164における振り判定では肯定判定が連続することになるが、このような肯定判定を全て左コントローラ3がパンチを繰り出すように振られたと見なすと意図しているパンチの判定ができなくなる。したがって、本実施例では、左コントローラ3がパンチを繰り出すように振られたと判定された後の所定期間(例えば、12フレーム)は、当該判定されることを除外している。なお、他の例として、左コントローラ3がパンチを繰り出すように振られたと判定されて振りフラグがオンに設定されてから、左コントローラ3に生じている加速度の上昇(具体的には、XZ加速度の上昇)が継続している期間を、振りフラグが再度オンに設定できない期間として設定してもよい。
ステップS167において、CPU81は、左コントローラ3の振り判定をするための閾値として、現時点において左コントローラ3に生じている加速度の大きさを設定して閾値データDeを更新し、ステップS169に処理を進める。
一方、上記ステップS164において左コントローラ3に生じているXZ加速度の大きさが上記閾値以下であると判定された場合、CPU81は、左コントローラ3の振り判定をするための閾値を予め定められた所定値に近づけて閾値データDeを更新し、ステップS169に処理を進める。一例として、CPU81は、閾値データDeが示す閾値を所定量だけ上記所定値に近づけて新たな閾値を設定し、当該閾値を用いて閾値データDeを更新する。他の例として、CPU81は、閾値データDeが示す閾値を所定割合だけ上記所定値に近づけて新たな閾値を設定し、当該閾値を用いて閾値データDeを更新する。このように左コントローラ3の振り判定をするための閾値を予め定められた所定値に近づけることによって、上記ステップS163やステップS167が実行されることによって上記閾値が上昇したとしても、所定時間経過後には意図している所定値を用いてコントローラの振り判定を行うことができる。
ステップS169において、CPU81は、一時変数Bが0より大きいか否かを判定する。そして、CPU81は、一時変数Bが0より大きい場合、ステップS170に処理を進める。一方、CPU81は、一時変数Bが0である場合、ステップS171(図22参照)に処理を進める。
ステップS170において、CPU81は、一時変数Bから1減算して新たな一時変数Bを設定し、ステップS171(図22参照)に処理を進める。
図22に進み、ステップS171において、CPU81は、振りフラグデータDhを参照して左コントローラ3の処理に対して設定されている振りフラグがオンに設定されているか否かを判定する。そして、CPU81は、左コントローラ3の処理に対して設定されている振りフラグがオンに設定されている場合、ステップS172に処理を進める。一方、CPU81は、左コントローラ3の処理に対して設定されている振りフラグがオフに設定されている場合、ステップS173に処理を進める。
ステップS172において、CPU81は、左コントローラ3がパンチを繰り出すように振られたと判定された後の処理フレーム数をカウントするための一時変数Sとして所定フレーム数を設定し、ステップS175に処理を進める。ここで、一時変数Sとして設定する所定フレーム数は、左コントローラ3がパンチを繰り出すように振られたと判定されてから所定時間以内に第1移動開始可能状態になった場合に第1オブジェクトG1の移動を開始するための処理を行うための当該所定時間に相当するパラメータであり、本実施例では一例として15フレームに設定する。したがって、上記第1移動開始可能状態でない場合であっても、左コントローラ3がパンチを繰り出すように振られたと判定されてから15フレーム以内に上記第1移動開始可能状態になった場合は、第1オブジェクトG1の移動を開始するための処理が行われることになる。
一方、上記ステップS171において、振りフラグがオフに設定されていると判定された場合、CPU81は、一時変数Sが0より大きいか否かを判定する。そして、CPU81は、一時変数Sが0より大きい場合、ステップS174に処理を進める。一方、CPU81は、一時変数Sが0である場合、ステップS175に処理を進める。
ステップS174において、CPU81は、一時変数Sから1減算して新たな一時変数Sを設定し、ステップS175に処理を進める。
ステップS175において、CPU81は、一時変数Sが0より大きいか否かを判定する。そして、CPU81は、一時変数Sが0より大きい場合、ステップS176に処理を進める。一方、CPU81は、一時変数Sが0である場合、当該サブルーチンによる処理を終了する。
ステップS176において、CPU81は、移動開始可能フラグデータDlを参照して第1オブジェクトG1の処理に対して設定されている移動開始可能フラグがオンに設定されているか否かを判定する。そして、CPU81は、第1オブジェクトG1の処理に対して設定されている移動開始可能フラグがオンに設定されている場合、ステップS177に処理を進める。一方、CPU81は、第1オブジェクトG1の処理に対して設定されている移動開始可能フラグがオフに設定されている場合、当該サブルーチンを用いた処理を終了する。
ステップS177において、CPU81は、第1オブジェクトG1の処理に対して設定されている移動フラグをオンに設定して移動フラグデータDiを更新し、次のステップに処理を進める。このように、左コントローラ3がパンチを繰り出すように振られたと判定されたときだけではなく、当該判定後であっても所定フレーム数(例えば、15フレーム)が経過する前に、移動開始可能フラグがオン(すなわち、第1移動開始可能状態)になれば、第1オブジェクトG1の処理に対して設定されている移動フラグがオンに設定される。
次に、CPU81は、第1オブジェクトG1の処理に対して設定されている移動開始可能フラグをオフに設定して移動開始可能フラグデータDlを更新して(ステップS178)、次のステップに処理を進める。このように、第1オブジェクトG1が仮想空間内を移動することを示す移動フラグがオンに設定された場合、第1移動開始可能状態ではなくなるため第1オブジェクトG1の移動開始可能フラグがオフに設定される。なお、プレイヤオブジェクトPOが敵オブジェクトEOに対して攻撃できない状態(例えば、プレイヤオブジェクトPOがダメージを受けて一時的にダウンしている状態)である場合、移動開始可能フラグを適宜オフに設定して移動開始可能フラグデータDlを設定してもよい。この場合、プレイヤオブジェクトPOが上記攻撃できない状態から回復した場合に、移動開始可能フラグがオンに設定される。
次に、CPU81は、現時点が第2オブジェクトG2を移動開始してから所定フレーム数(例えば、4フレーム数)以内か否かを判定する(ステップS179)。例えば、CPU81は、後述するステップS145において左コントローラ振り認識処理と同様の処理を右コントローラ4に対しても行っており、現時点が当該ステップS145において右コントローラ4の処理に対して設定されている移動フラグがオンされてから所定フレーム数以内であれば、上記ステップS179において肯定判定する。そして、CPU81は、現時点が第2オブジェクトG2を移動開始してから所定フレーム数以内である場合、ステップS180に処理を進める。一方、CPU81は、現時点が第2オブジェクトG2を移動開始してから所定フレーム数以内でない場合、当該サブルーチンを用いた処理を終了する。
ステップS180において、CPU81は、アクションフラグをオンに設定してアクションフラグデータDjを更新し、当該サブルーチンを用いた処理を終了する。このように、第1オブジェクトG1および第2オブジェクトG2の一方のオブジェクトが移動開始してから所定フレーム数以内に、他方のオブジェクトが移動開始した場合、アクションフラグがオンに設定される。
図20に戻り、上記ステップS144における左コントローラ振り認識処理の後、CPU81は、右コントローラ振り認識処理を行い(ステップS145)、次のステップに処理を進める。なお、図21および図22を用いて説明したコントローラ振り認識処理は、上記ステップS145の右コントローラ振り認識処理においても用いられるサブルーチンである。すなわち、上記左コントローラ振り認識処理において処理対象としていた左コントローラ3および第1オブジェクトG1を右コントローラ4および第2オブジェクトG2にすることによって、同じサブルーチンを用いて同様の処理が可能となる。したがって、上記ステップS145の右コントローラ振り認識処理の詳細な説明については省略する。
次に、CPU81は、第1オブジェクト軌道変化処理を行い(ステップS146)、次のステップに処理を進める。以下、図23〜図25を参照して、上記ステップS146において行う第1オブジェクト軌道変化処理について説明する。
図23において、CPU81は、移動フラグデータDiを参照して第1オブジェクトG1の処理に対して設定されている移動フラグがオンに設定されているか否かを判定する(ステップS191)。そして、CPU81は、第1オブジェクトG1の処理に対して設定されている移動フラグがオンに設定されている場合、ステップS192に処理を進める。一方、CPU81は、第1オブジェクトG1の処理に対して設定されている移動フラグがオフに設定されている場合、当該サブルーチンを用いた処理を終了する。
ステップS192において、CPU81は、一時変数Sが所定数以上か否かを判定する。そして、CPU81は、一時変数Sが所定数以上である場合、ステップS193に処理を進める。一方、CPU81は、一時変数Sが所定数未満である場合、ステップS211(図24参照)に処理を進める。ここで、上記ステップS192では、左コントローラ3がパンチを繰り出すように振られたと判定されてから当該パンチ操作が終わるまでの期間であるか否かを判定しており、パンチ操作中であると判定される場合とパンチ操作が終わったと判定される場合とによって異なる軌道設定を行っている。したがって、上記ステップS192で用いる所定数は、上記期間を判別可能なフレーム数に設定すればよく、例えば所定数=7に設定される。
ステップS193において、CPU81は、重力加速度の方向に対する左コントローラ3のY軸方向の傾きを算出し、次のステップに処理を進める。例えば、CPU81は、姿勢データDbを参照して左コントローラ3の姿勢を取得し、重力加速度の方向に対する当該左コントローラ3のY軸方向の傾きを算出する。
次に、CPU81は、左コントローラ3のY軸方向の傾き角度に応じて、第1オブジェクトG1のカーブ値Cを算出してカーブ値データDfを更新し(ステップS194)、次のステップに処理を進める。ここで、第1オブジェクトG1のカーブ値Cは、第1オブジェクトG1の軌道を左右に変化させるための係数であり、例えば−1≦C≦1となるように設定される。そして、上記ステップS194では、左コントローラ3のY軸方向がX軸正方向に向かって右に傾いている場合にカーブ値Cを正の値に設定し、当該Y軸方向が水平方向に対して右に40°傾いている場合にC=1に設定され、当該Y軸方向が水平方向に対して右に40°以上傾いたとしてもCが上限値である1に設定される。また、左コントローラ3のY軸方向がX軸正方向に向かって左に傾いている場合にカーブ値Cを負の値に設定し、当該Y軸方向が水平方向に対して左に40°傾いている場合にC=−1に設定され、当該Y軸方向が水平方向に対して左に40°以上傾いたとしてもCが下限値である−1に設定される。
次に、CPU81は、左コントローラ3を振動させるための往路振動データを作成して(ステップS195)、ステップS196に処理を進める。例えば、CPU81は、第1オブジェクトG1の種類に応じて第1オブジェクトG1が往路を移動する際の往路振動波形を生成し、往路振動波形に基づいて左コントローラ3を振動させるための往路振動データを生成して、左コントローラ振動データDpを更新する。なお、CPU81は、第1オブジェクトG1の移動速度や移動方向(カーブ値C)に応じて上記往路振動波形を調整してもよいし、当該移動速度や移動方向とは関わらずに上記往路移動波形を生成してもよい。また、CPU81は、第1オブジェクトG1以外の仮想空間の状況に応じた振動を、上記振動波形に加えてもかまわない。例えば、プレイヤオブジェクトPOの動作やプレイヤオブジェクトPOに与えられた衝撃に応じた振動、ゲームフィールドの状況に応じた振動、BGMや効果音に応じた振動等を、上記往路振動波形に加えてもかまわない。また、CPU81は、アクションフラグデータDjが示すアクションフラグがオンに設定されている場合、「両手パンチアクション」用の往路振動データ(アクション往路振動データ)を生成して、左コントローラ振動データDpを更新してもよい。
一方、図24に示すように、一時変数Sが所定数未満である場合、CPU81は、重力加速度方向周りの左コントローラ3の回転速度Vを算出し(ステップS211)、次のステップに処理を進める。例えば、CPU81は、姿勢データDbを参照して左コントローラ3に作用している重力加速度の方向を取得する。また、CPU81は、角速度データDcを参照して左コントローラ3に生じているXYZ軸周りの角速度を取得する。そして、CPU81は、XYZ各軸周り角速度および重力加速度の方向を用いて重力加速度方向周りの左コントローラ3の角速度を算出し、当該角速度に応じた左コントローラ3の回転速度Vを算出して回転速度データDgを更新する。
次に、CPU81は、左コントローラ3に生じている角速度から上記回転速度Vに相当する角速度を除いた成分の大きさより、回転速度Vの大きさの方が大きいか否かを判定する(ステップS212)。そして、CPU81は、回転速度Vの大きさの方が大きい場合、ステップS213に処理を進める。一方、CPU81は、回転速度Vの大きさの方が小さいまたは同じである場合、ステップS216に処理を進める。ここで、上記ステップS212の処理は、左コントローラ3に生じている角速度がどの方向周りを主体として生じているのか判定するためのものであり、実空間における左コントローラ3の動きが重力加速度周りに回転するヨー方向の動きが主体なのか、他の方向周りに回転する動きが主体なのかを判定している。
ステップS213において、CPU81は、重力加速度方向周りの左コントローラ3の角速度に基づいて、左コントローラ3が重力加速度の方向を中心に左ヨー方向に回転しているか否かを判定する。そして、CPU81は、左コントローラ3が重力加速度の方向を中心に左ヨー方向に回転している場合、左コントローラ3の回転速度Vを1.15倍して回転速度データDgを更新し(ステップS215)、ステップS217に処理を進める。一方、CPU81は、左コントローラ3が重力加速度の方向を中心に左ヨー方向に回転していない場合、そのままステップS217に処理を進める。一般的に、人間の手首が曲がる方向を考えた場合、ユーザが左手で把持する左コントローラ3を右ヨー方向に回転させる操作と比べて左ヨー方向に回転させる操作がやりにくくなる。上記ステップS213およびステップS215の処理は、このような操作の難易を考慮したものであり、やりにくい方向にコントローラを動かす操作であっても、他の操作と同様にオブジェクトを制御することができる。
なお、当該サブルーチンを第2オブジェクトG2の軌道変化処理を行うために用いる場合、上記ステップS213では右コントローラ4が重力加速度の方向を中心に右ヨー方向に回転しているか否かを判定する。そして、右コントローラ4が重力加速度の方向を中心に右ヨー方向に回転している場合、右コントローラ4の回転速度Vを1.15倍して回転速度データDgを更新することになる。
一方、回転速度Vに相当する角速度の方が小さいまたは同じである場合、CPU81は、左コントローラ3のX軸方向周りの角速度に応じて回転速度Vを算出し(ステップS216)、ステップS217に処理を進める。例えば、CPU81は、角速度データDcを参照して左コントローラ3のX軸方向周りの角速度を取得し、当該角速度に応じた左コントローラ3の回転速度Vを算出して回転速度データDgを更新する。
ステップS217において、CPU81は、第1オブジェクトG1のカーブ値Cに左コントローラ3の回転速度Vに関する値を加算して新たなカーブ値Cを算出して、次のステップに処理を進める。例えば、CPU81は、カーブ値データDfおよび回転速度データDgを参照して第1オブジェクトG1のカーブ値Cおよび左コントローラ3の回転速度Vを取得し、カーブ値Cに回転速度Vに応じた値を加算することによって得られる第1オブジェクトG1の新たなカーブ値Cを用いて、カーブ値データDfを更新する。
次に、CPU81は、第1オブジェクトG1のカーブ値Cが所定の上限値Cmax(例えば、Cmax=1)を超えているか否かを判定する(ステップS218)。そして、CPU81は、第1オブジェクトG1のカーブ値Cが上限値Cmaxを超えている場合、第1オブジェクトG1のカーブ値Cとして上限値Cmaxを設定してカーブ値データDfを更新し(ステップS219)、ステップS220に処理を進める。一方、CPU81は、第1オブジェクトG1のカーブ値Cが上限値Cmaxを超えていない場合、そのままステップS220に処理を進める。
ステップS220において、CPU81は、第1オブジェクトG1のカーブ値Cが所定の下限値Cmin(例えば、Cmin=−1)より小さいか否かを判定する。そして、CPU81は、第1オブジェクトG1のカーブ値Cが下限値Cminより小さい場合、第1オブジェクトG1のカーブ値Cとして下限値Cminを設定してカーブ値データDfを更新し(ステップS221)、ステップS222に処理を進める。一方、CPU81は、第1オブジェクトG1のカーブ値Cが下限値Cmin以上である場合、そのままステップS222に処理を進める。
ステップS222において、CPU81は、回転速度Vに基づいて左コントローラ3を振動させるための往路振動データを変更して、ステップS196(図23参照)に処理を進める。例えば、CPU81は、左コントローラ3に生じている角速度に基づいて算出された回転速度Vに応じて、振動の振幅および/または周波数を変化させる変化パラメータを算出し、当該変化パラメータを用いて往路振動データを変化させて、左コントローラ振動データDpを更新する。
例えば、図27に示すように、回転速度Vに応じて往路振動波形の振幅を変化させる場合、様々な変化パターンが考えられる。例えば、変化パターン1は、回転速度Vの0からVaへの変化に対して振幅変化率が1.0からMAX1(MAX1>1.0)まで線形変換され、回転速度Va以上では振幅変化率MAX1で一定となる振幅の変化パターンである。変化パターン2は、回転速度Vの0からVaへの変化に対して振幅変化率が1.0からMAX2(MAX1>MAX2>1.0)まで線形変換され、回転速度Va以上では振幅変化率MAX2で一定となる振幅の変化パターンである。変化パターン3は、回転速度Vの0からVaへの一定範囲ごとに振幅変化率が段階的に1.0からMAX3(MAX3>1.0)まで高くなるテーブルに基づいて変換され、回転速度Va以上では振幅変化率MAX3で一定となる振幅の変化パターンである。
上記変化パターンを用いて振幅変化率1.0が算出された場合、往路振動波形の振幅を変化させない、すなわち上記ステップS195で作成された往路振動データがそのまま左コントローラ振動データDpに設定されることになる。また、上述から明らかなように、回転速度Vは、重力加速度方向周りの左コントローラ3の角速度(ヨー方向の角速度)または左コントローラ3のX軸方向周りの角速度(ロール方向の角速度)に応じて算出されており、左コントローラ3の動きや姿勢の変化に基づくパラメータである。つまり、ヨー方向またはロール方向への左コントローラ3の動きや姿勢の変化がない場合、回転速度Vも0となるため振幅変化率も1.0となる。すなわち、左コントローラ3の動きや姿勢の変化によって回転速度Vが生じたことによって往路振動波形の振幅が変化したとしても、当該動きや姿勢の変化が止まることによって振幅変化率が1.0となって元の往路振動波形に戻ることになる。したがって、上記ステップS222における往路振動データの変更は、上記ステップS195で生成された往路振動波形を一時的に変化させるものであって、左コントローラ3の動きや姿勢の変化が止まることにより元の往路振動波形に戻るものである。
上記ステップS222においては、回転速度Vに基づいて様々な変化パターンを用いて往路振動データを変化させてもよく、第1オブジェクトG1の種類に応じて選択される変化パターンを設定してもよい。また、図27では、回転速度Vに対応して変化させる振幅変化率を例示しているが、同じ変化パターンを用いて振動の周波数を変化させてもよいし、振幅とは異なる変化パターンで振動の周波数を変化させてもよい。
また、上記ステップS222においては、回転速度Vに基づいて往路振動データを変化させているが、他のパラメータに基づいて往路振動データを変化させてもよい。例えば、カーブ値Cの変化量に基づいて往路振動データを変化させてもよいし、カーブ値Cそのものの値に基づいて往路振動データを変化させてもよい。前者の場合、上記ステップS218〜ステップS221の処理を経たカーブ値Cの変化量、すなわち下限値Cminおよび上限値Cmaxに制限されたカーブ値Cの変化量に基づいて、往路振動データを変化させることが考えられる。
図23に戻り、ステップS196において、CPU81は、第1オブジェクトG1のカーブ値Cを用いて第1オブジェクトG1の移動方向を算出し、次のステップに処理を進める。例えば、CPU81は、カーブ値データDfを参照して第1オブジェクトG1のカーブ値Cを取得し、プレイヤオブジェクト位置データDmを参照して第1オブジェクトG1の移動方向を取得する。そして、CPU81は、取得した第1オブジェクトG1のカーブ値Cが正の値の場合、取得した第1オブジェクトG1の移動方向をカーブ値の大きさに応じて右に変更し、当該変更後の第1オブジェクトG1の移動方向を用いてプレイヤオブジェクト位置データDmを更新する。また、CPU81は、取得した第1オブジェクトG1のカーブ値Cが負の値の場合、取得した第1オブジェクトG1の移動方向をカーブ値の大きさに応じて左に変更し、当該変更後の第1オブジェクトG1の移動方向を用いてプレイヤオブジェクト位置データDmを更新する。
なお、第1オブジェクトG1が移動開始位置に戻る仮想空間内の復路を移動している場合、第1オブジェクトG1のカーブ値Cによって移動方向を変更することなく、現在の第1オブジェクトG1の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。第1オブジェクトG1が復路を移動しているか否かについては、後述する戻りフラグがオンに設定されているか否かによって判別することができる。
次に、CPU81は、第1オブジェクトG1の移動方向に基づいて、第1オブジェクトG1を移動させ(ステップS197)、次のステップに処理を進める。例えば、CPU81は、プレイヤオブジェクト位置データDmを参照して第1オブジェクトG1の位置および移動方向を取得し、当該第1オブジェクトG1の位置から当該移動方向に基づいて第1オブジェクトG1を移動させ、当該移動後の第1オブジェクトG1の位置を用いてプレイヤオブジェクト位置データDmを更新する。
なお、上記ステップS197において第1オブジェクトG1を移動させる移動速度(移動量)は、一例として、第1オブジェクトG1の移動速度については、第1オブジェクトG1の種類に応じた速度に応じて設定されてもよい。他の例として、第1オブジェクトG1の移動速度については、左コントローラ3がパンチを繰り出すように振られたと判定された際の加速度の大きさに応じて設定されてもよい。この場合、振りフラグがオンされた時点のXZ加速度の大きさに基づいて第1オブジェクトG1が移動開始する初速度を設定し、その後の移動速度を仮想空間の状況、移動方向の変化、所定のアルゴリズム、第1オブジェクトG1に設定された移動特性等に基づいて適宜変化させてもよい。
次に、CPU81は、アクションフラグデータDjを参照して、アクションフラグがオンに設定されているか否かを判定する(ステップS198)。そして、CPU81は、アクションフラグがオンに設定されている場合、ステップS199に処理を進める。一方、CPU81は、アクションフラグがオフに設定されている場合、ステップS230(図25参照)に処理を進める。
ステップS199において、CPU81は、第1オブジェクトG1と第2オブジェクトG2との間に衝突領域Aを設定し、ステップS230(図25参照)に処理を進める。例えば、CPU81は、プレイヤオブジェクト位置データDmを参照して第1オブジェクトG1の位置および第2オブジェクトG2の位置を取得し、当該位置に基づいて衝突領域Aの仮想空間における位置、形状、および範囲を設定して、衝突領域データDnを更新する。このようにアクションフラグがオンに設定された状態で第1オブジェクトG1(および第2オブジェクトG2)の移動方向および移動後の位置が設定される場合は、当該第1オブジェクトG1と第2オブジェクトG2との間に衝突領域Aを設定される。
図25に進み、CPU81は、衝突判定処理を行い(ステップS230)、次のステップに処理を進める。例えば、CPU81は、プレイヤオブジェクト位置データDm、衝突領域データDn、および敵オブジェクト位置データDoを参照して、第1オブジェクトG1および衝突領域Aと、仮想空間における他のオブジェクト(例えば、敵オブジェクトEO)とにおける、仮想空間における衝突を判定する。
次に、CPU81は、第1オブジェクトG1および衝突領域Aの少なくとも1つと他のオブジェクトとが、仮想空間において衝突したか否かを判定する(ステップS231)。そして、CPU81は、第1オブジェクトG1および衝突領域Aの少なくとも1つと他のオブジェクトとが衝突した場合、ステップS232に処理を進める。一方、CPU81は、第1オブジェクトG1および衝突領域Aの何れも他のオブジェクトと衝突していない場合、ステップS235に処理を進める。
ステップS232において、CPU81は、他のオブジェクトに対する衝突アクション処理を行い、次のステップに処理を進める。例えば、CPU81は、第1オブジェクトG1と敵オブジェクトEOとが衝突した場合、当該衝突に応じたダメージを敵オブジェクトEOに与えるとともに、当該ダメージに応じた所定のアクションを設定する。また、CPU81は、衝突領域Aと敵オブジェクトEOとが衝突した場合、当該衝突に応じたダメージを敵オブジェクトEOに与えるとともに、第1オブジェクトG1および第2オブジェクトG2が組となった「両手パンチアクション」を設定する。
なお、本実施例では、第1オブジェクトG1が敵オブジェクトEOに向かって移動している期間だけでなく、第1オブジェクトG1がプレイヤオブジェクトPOに向かって戻る期間においても、当該第1オブジェクトG1が他のオブジェクトと衝突した場合に衝突アクション処理が行われる。しかしながら、第1オブジェクトG1が敵オブジェクトEOに向かって移動している期間に限って他のオブジェクトに対する衝突アクション処理を行う場合は、第1オブジェクトG1がプレイヤオブジェクトPOに向かって戻る期間(戻りフラグがオンとなった状態)においては、上記ステップS231において第1オブジェクトG1と他のオブジェクトとが衝突していないと常に判定して当該衝突アクション処理を行わなくてもかまわない。
次に、CPU81は、衝突振動を追加して(ステップS233)、次のステップに処理を進める。例えば、CPU81は、第1オブジェクトG1と他のオブジェクトとが衝突した状況に応じた衝突振動波形を生成する。そして、CPU81は、左コントローラ振動データDpが示す振動波形に上記衝突振動波形を合成して新たな振動波形を生成し、当該振動波形を用いて左コントローラ振動データDpを更新する。
次に、CPU81は、アクションフラグをオフに設定してアクションフラグデータDjを更新するとともに、衝突領域データDnを衝突領域なし(例えば、Null)に設定して(ステップS234)、ステップS235に処理を進める。このように、第1オブジェクトG1、第2オブジェクトG2、または衝突領域Aのいずれかが他のオブジェクトと衝突するアクションが設定された場合、アクションフラグがオフに設定されるとともに、衝突領域に関する設定データが消去される。
ステップS235において、CPU81は、戻りフラグデータDkを参照して第1オブジェクトG1の処理に対して設定されている戻りフラグがオンに設定されているか否かを判定する。そして、CPU81は、第1オブジェクトG1の処理に対して設定されている戻りフラグがオフに設定されている場合、ステップS236に処理を進める。一方、CPU81は、第1オブジェクトG1の処理に対して設定されている戻りフラグがオンに設定されている場合、ステップS240に処理を進める。
ステップS236において、CPU81は、第1オブジェクトG1が移動開始位置に戻る仮想空間内の復路を移動する動作を行うか否かを判定する。例えば、CPU81は、第1オブジェクトG1が移動開始位置から所定距離離れた位置に到達した場合、第1オブジェクトG1が敵オブジェクトEOの位置を通過した後に所定時間経過した場合、第1オブジェクトG1または衝突領域Aが他のオブジェクトに衝突した後に所定時間経過した場合等の条件を満たす場合、第1オブジェクトG1が復路を移動する動作を行うと判定する。そして、CPU81は、第1オブジェクトG1が復路を移動する動作を行う場合、ステップS237に処理を進める。一方、CPU81は、第1オブジェクトG1が復路を移動する動作を行なわない場合、当該サブルーチンによる処理を終了する。
ステップS237において、CPU81は、第1オブジェクトG1の処理に対して設定されている戻りフラグをオンに設定して戻りフラグデータDkを更新し、次のステップに処理を進める。このように、第1オブジェクトG1が復路を移動する動作が設定された場合、第1オブジェクトG1の処理に対して設定されている戻りフラグがオンに設定される。
次に、CPU81は、第1オブジェクトG1の移動方向として、移動開始位置に向かう方向を設定して(ステップS238)、次のステップに処理を進める。例えば、CPU81は、プレイヤオブジェクト位置データDmを参照して第1オブジェクトG1の現在位置から移動開始位置へ向かう方向を第1オブジェクトG1の移動方向として算出し、当該移動方向を用いてプレイヤオブジェクト位置データDmを更新する。なお、上記ステップS238において設定する第1オブジェクトG1の移動方向は、第1オブジェクトG1が連結されているオブジェクト(例えば、プレイヤオブジェクトPOの伸びた腕オブジェクト)に沿った方向に設定してもよいし、第1オブジェクトG1が移動開始位置から移動した際の軌道を逆に戻るように設定してもよい。
次に、CPU81は、左コントローラ3を振動させるための復路振動データを作成して(ステップS239)、当該サブルーチンによる処理を終了する。例えば、CPU81は、第1オブジェクトG1の種類に応じて第1オブジェクトG1が復路を移動する際の復路振動波形を生成し、復路振動波形に基づいて左コントローラ3を振動させるための復路振動データを生成して、左コントローラ振動データDpを更新する。なお、CPU81は、第1オブジェクトG1の移動速度や移動方向に応じて上記復路振動波形を調整してもよいし、当該移動速度や移動方向とは関わらずに上記復路移動波形を生成してもよい。また、CPU81は、第1オブジェクトG1以外の仮想空間の状況に応じた振動を、上記振動波形に加えてもかまわない。例えば、プレイヤオブジェクトPOの動作やプレイヤオブジェクトPOに与えられた衝撃に応じた振動、ゲームフィールドの状況に応じた振動、BGMや効果音に応じた振動等を、上記復路振動波形に加えてもかまわない。また、CPU81は、第1オブジェクトG1が復路を移動する際に左コントローラ3に振動を与えない場合は、振幅0を示す振動データまたは振動させないことを示す振動データを左コントローラ振動データDpに設定してもよい。
一方、戻りフラグがオンに設定されている場合、CPU81は、第1オブジェクトG1が移動開始位置まで戻ったか否かを判定する(ステップS240)。例えば、CPU81は、プレイヤオブジェクト位置データDmを参照して、第1オブジェクトG1の位置が移動開始位置に設定されている場合、上記ステップS240において肯定判定する。そして、CPU81は、第1オブジェクトG1が移動開始位置まで戻った場合、ステップS241に処理を進める。一方、CPU81は、第1オブジェクトG1が移動開始位置まで戻っていない場合、当該サブルーチンによる処理を終了する。
ステップS241において、CPU81は、第1オブジェクトG1の処理に対して設定されている移動開始可能フラグをオンに設定して移動開始可能フラグデータDlを更新し、次のステップに処理を進める。このように、第1オブジェクトG1が仮想空間内を再度移動可能な状態となった場合、第1移動開始可能状態となるため第1オブジェクトG1の移動開始可能フラグがオンに設定される。なお、上記ステップS241では、第1オブジェクトG1が移動開始位置まで戻った場合に即時に第1オブジェクトG1の移動開始可能フラグをオンに設定して第1移動開始可能状態としているが、他のタイミングで第1移動開始可能状態を開始してもよい。例えば、第1オブジェクトG1が移動開始位置まで戻ってから所定時間(例えば、8フレーム数)経過したタイミングで第1移動開始可能状態が開始されてもよい。
次に、CPU81は、第1オブジェクトG1の処理に対して設定されている移動フラグおよび戻りフラグをオフに設定し、アクションフラグをオフに設定し、衝突領域や第1オブジェクトG1の移動方向に関するデータをデフォルト値に設定して(ステップS242)、次のステップに処理を進める。例えば、CPU81は、第1オブジェクトG1の処理に対して設定されている移動フラグおよび戻りフラグをそれぞれオフに設定して、移動フラグデータDiおよび戻りフラグデータDkをそれぞれ更新する。また、CPU81は、アクションフラグをオフに設定して、アクションフラグデータDjを更新する。また、CPU81は、衝突領域に関する設定データを衝突領域なし(例えば、Null)に設定して、衝突領域データDnを更新する。また、CPU81は、第1オブジェクトG1の移動方向をデフォルト値(例えば、正面方向)に設定して、プレイヤオブジェクト位置データDmを更新する。
次に、CPU81は、左コントローラ3の振動を停止させる処理を行い(ステップS243)、当該サブルーチンによる処理を終了する。例えば、CPU81は、第1オブジェクトG1の種類に応じて第1オブジェクトG1が移動開始位置に戻った際に生じる振動および当該振動の後に振動を停止させる振動波形を生成し、当該振動波形に基づいて左コントローラ3を振動させるための振動データを生成して、左コントローラ振動データDpを更新する。なお、CPU81は、第1オブジェクトG1の移動が停止した後も、第1オブジェクトG1の移動以外の仮想空間の状況に応じた振動を与える場合は、当該振動(プレイヤオブジェクトPOの動作やプレイヤオブジェクトPOに与えられた衝撃に応じた振動、ゲームフィールドの状況に応じた振動、BGMや効果音に応じた振動等)を加えて、引き続き振動させてもかまわない。
図20に戻り、上記ステップS146における第1オブジェクト軌道変化処理の後、CPU81は、第2オブジェクト軌道変化処理を行い(ステップS147)、次のステップに処理を進める。なお、図23〜図25を用いて説明したオブジェクト軌道変化処理は、上記ステップS147の第2オブジェクト軌道変化処理においても用いられるサブルーチンである。すなわち、上記第1オブジェクト軌道変化処理において処理対象としていた左コントローラ3および第1オブジェクトG1を右コントローラ4および第2オブジェクトG2にすることによって、同じサブルーチンを用いることによって同様の処理が可能となる。したがって、上記ステップS147の第2オブジェクト軌道変化処理の詳細な説明については省略する。
次に、CPU81は、プレイヤオブジェクト移動処理を行い(ステップS148)、次のステップに処理を進める。以下、図26を参照して、上記ステップS148において行うプレイヤオブジェクト移動処理について説明する。
図26において、CPU81は、左コントローラ3および右コントローラ4の実空間におけるピッチ方向に対する傾きが同じ方向であるか否かを判定する(ステップS251)。例えば、CPU81は、姿勢データDbを参照して左コントローラ3のX軸正方向と右コントローラ4のX軸正方向とが実空間の水平方向に対してともに仰角方向にある、またはともに俯角方向にある場合、上記ステップS251において肯定判定する。そして、CPU81は、左コントローラ3および右コントローラ4の実空間におけるピッチ方向に対する傾きが同じ方向である場合、ステップS252に処理を進める。一方、CPU81は、左コントローラ3および右コントローラ4の実空間におけるピッチ方向に対する傾きが同じ方向にない場合、ステップS253に処理を進める。
ステップS252において、CPU81は、左コントローラ3および右コントローラ4の実空間におけるピッチ方向に対する傾き角度の平均値Pを算出し、ステップS254に処理を進める。例えば、CPU81は、姿勢データDbを参照して、左コントローラ3のX軸正方向と実空間の水平方向との差角と右コントローラ4のX軸正方向と実空間の水平方向との差角とを算出し、当該差角の平均値Pを算出する。例えば、上記差角は、X軸正方向が俯角方向である場合に正の値となり、X軸正方向が仰角方向である場合に負の値となるように算出する。
一方、上記ステップ251において左コントローラ3および右コントローラ4の実空間におけるピッチ方向に対する傾きが同じ方向にないと判定された場合、CPU81は、平均値Pを0に設定し(ステップS253)、ステップS254に処理を進める。
ステップS254において、CPU81は、左コントローラ3および右コントローラ4の実空間におけるロール方向に対する傾きが同じ方向であるか否かを判定する。例えば、CPU81は、姿勢データDbを参照して左コントローラ3のY軸正方向と右コントローラ4のY軸正方向とが実空間の水平方向に対してともに仰角方向にある、またはともに俯角方向にある場合、上記ステップS254において肯定判定する。そして、CPU81は、左コントローラ3および右コントローラ4の実空間におけるロール方向に対する傾きが同じ方向である場合、ステップS255に処理を進める。一方、CPU81は、左コントローラ3および右コントローラ4の実空間におけるロール方向に対する傾きが同じ方向にない場合、ステップS256に処理を進める。
ステップS255において、CPU81は、左コントローラ3および右コントローラ4の実空間におけるロール方向に対する傾き角度の平均値Rを算出し、ステップS257に処理を進める。例えば、CPU81は、姿勢データDbを参照して、左コントローラ3のY軸正方向と実空間の水平方向との差角と右コントローラ4のY軸正方向と実空間の水平方向との差角とを算出し、当該差角の平均値Rを算出する。例えば、上記差角は、Y軸正方向が俯角方向である場合に正の値となり、Y軸正方向が仰角方向である場合に負の値となるように算出する。
一方、上記ステップ254において左コントローラ3および右コントローラ4の実空間におけるロール方向に対する傾きが同じ方向にないと判定された場合、CPU81は、平均値Rを0に設定し(ステップS256)、ステップS257に処理を進める。
ステップS257において、CPU81は、平均値Pに応じた前後移動量と平均値Rに応じた左右移動量とを合成して移動量Mを算出し、次のステップに処理を進める。例えば、CPU81は、平均値Pが正の値である場合に仮想空間における前方へ移動し、平均値Pが負の値である場合に仮想空間における後方へ移動する前後移動量を、当該平均値Pの値に応じて算出する。また、CPU81は、平均値Rが正の値である場合に仮想空間における右へ移動し、平均値Rが負の値である場合に仮想空間における左へ移動する左右移動量を、当該平均値Rの値に応じて算出する。そして、上記前後移動量および上記左右移動量を合成することによって、仮想空間に対する移動量Mを算出する。
次に、CPU81は、移動フラグの設定状況に応じて移動量Mをスケーリングし(ステップS258)、次のステップに処理を進める。例えば、CPU81は、移動フラグデータDiを参照して第1オブジェクトG1および第2オブジェクトG2の処理に対してそれぞれ設定されている移動フラグが両方オフに設定されている場合、移動量Mはそのままの値とする。また、CPU81は第1オブジェクトG1および第2オブジェクトG2の処理に対してそれぞれ設定されている移動フラグの一方のみオンに設定されている場合、移動量Mを所定倍率によって縮小(例えば、0.9倍して縮小)する。また、CPU81は第1オブジェクトG1および第2オブジェクトG2の処理に対してそれぞれ設定されている移動フラグの両方がオンに設定されている場合、移動量Mを0に設定する。
次に、CPU81は、上記ステップS258においてスケーリングされた移動量Mに応じて、プレイヤオブジェクトPOを仮想空間において移動させ(ステップS259)、当該サブルーチンによる処理を終了する。例えば、CPU81は、プレイヤオブジェクト位置データDmが示す仮想空間におけるプレイヤオブジェクトPOの位置を移動量Mに応じて移動させ、移動後のプレイヤオブジェクトPOの位置を用いてプレイヤオブジェクト位置データDmを更新する。
図20に戻り、上記ステップS148におけるプレイヤオブジェクト移動処理の後、CPU81は、表示制御処理を行い(ステップS149)、次のステップに処理を進める。例えば、CPU81は、プレイヤオブジェクト位置データDm、および敵オブジェクト位置データDoを用いて、ゲームフィールド上にプレイヤオブジェクトPO、第1オブジェクトG1、第2オブジェクトG2、敵オブジェクトEOを配置する。また、CPU81は、アクションフラグデータDjが示すアクションフラグがオンに設定されており、衝突領域データDnに衝突領域Aに関する設定データが設定されている場合は、第1オブジェクトG1および第2オブジェクトG2の間に衝突領域Aに対応するオブジェクトを配置する。さらに、CPU81は、上記ステップS233において衝突アクションが設定されている場合は、当該設定内容に応じて各仮想オブジェクトを動作させる。そして、CPU81は、所定の位置(例えば、プレイヤオブジェクトPOの背後)に配置された仮想カメラからゲームフィールドを見た仮想空間画像を生成し、当該仮想空間画像を表示装置(例えば、据置型モニタ6)の表示画面に表示する処理を行う。
次に、CPU81は、振動データを送信する周期毎に当該周期に対応する振動データを、左コントローラ3および右コントローラ4へ送信する処理を行い(ステップS150)、次のステップに処理を進める。例えば、CPU81は、左コントローラ振動データDpを参照して、上記送信周期に対応する振動長さ分の振動データを左コントローラ3へ送信する。また、CPU81は、右コントローラ振動データDqを参照して、上記送信周期に対応する振動長さ分の振動データを右コントローラ4へ送信する。このように2つのコントローラを振動させるための振動データがそれぞれ左コントローラ3および右コントローラ4へ送信されることによって、当該振動データを受信した左コントローラ3および右コントローラ4は、それぞれ振動データに応じた振動波形で振動する。
次に、CPU81は、ゲームを終了するか否かを判定する(ステップS151)。上記ステップS151においてゲームを終了する条件としては、例えば、上記ゲームの結果が確定したことや、ユーザがゲームを終了する操作を行ったこと等がある。CPU81は、ゲームを終了しない場合に上記ステップS142に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。以降、ステップS142〜ステップS151の一連の処理は、ステップS151でゲームを終了すると判定されるまで繰り返し実行される。
このように、左コントローラ3および右コントローラ4を振動させるために、一時変数Sが7以上である場合にステップS195において往路振動データが生成され、一時変数Sが7未満である場合にステップS222において回転速度Vに基づいて往路振動データが変更される。ここで、一時変数Sは、左コントローラ3または右コントローラ4がパンチを繰り出すように振られたと判定された際に所定数に設定(ステップS172)された後、処理が進行されることに応じて1減算される変数である。つまり、左コントローラ3および右コントローラ4は、パンチを繰り出すように振られたと加速度に基づいて判定された直後は往路振動データに基づいて振動し、その後は回転速度Vに基づいて変化する振動データに基づいて振動することになる。したがって、本実施例においては、左コントローラ3および/または右コントローラ4を多様に振動させることが可能となり、リアリティがあるゲームプレイも可能となる。また、左コントローラ3および右コントローラ4を振動させるための振動データは、左コントローラ3および/または右コントローラ4の動作や姿勢に応じて変化させることができるとともに、アナログスティックの傾倒操作等におけるアナログ出力に応じて変化させることもできるため、操作態様に応じたフレキシブルな制御が可能となる。
なお、上述した実施例では、コントローラに生じた加速度が所定の条件を満たした場合に所定の往路振動データが生成され、当該往路振動データが出力されている期間においてコントローラに生じた角速度が所定の条件を満たした場合に、振動の振幅および/または周波数を一時的に変化させる振動データが生成されて出力する例を用いたが、他の態様によって振動データが生成されてもよい。例えば、コントローラを用いてパンチを繰り出すような操作がされたか否かを判定するパラメータは、当該コントローラに生じる加速度でなくてもよく、当該コントローラに生じる角速度や当該コントローラに生じる加速度と角速度の両方を用いて判定されてもよい。また、振動データを一時的に変化させるか否かを判定するための条件は、当該コントローラに生じる角速度に基づく条件でなくてもよく、当該コントローラに生じる加速度に基づく条件や当該コントローラに生じる加速度と角速度の両方に基づく条件でもよい。また、上記判定は、コントローラに設けられた操作ボタンや方向指示部に対する操作によって判定されてもよい。
また、回転速度Vに応じた振動データの一時的変化は、複数回生じてもよい。例えば、上述したフローチャートからも明らかであるが、第1オブジェクトG1や第2オブジェクトG2の往路移動中に回転速度Vが複数回生じた場合、回転速度Vが生じる毎に往路振動データが一時的に変化することになり、上記フローチャートによる処理を行えば、往路振動データを一時的に複数回変化させることが可能となる。
また、上述した実施例では、所定の往路振動データが出力されている期間においてコントローラの動きまたは姿勢の変化が所定の条件を満たした場合に、振動の振幅および/または周波数を一時的に変化させる振動データを出力する例を用いたが、他の態様によって一時的に変化させる振動パラメータを設定してもよい。第1の例として、コントローラが所定の周期で断続的に振動している場合に、コントローラの動きまたは姿勢の変化が所定の条件を満たしたことに応じて、当該周期や振動が途切れる期間および/または振動が加わる時間が変化する振動データを出力してもよい。第2の例として、所定の往路振動データが出力されている期間においてコントローラの動きまたは姿勢の変化が所定の条件を満たした場合に、当該往路振動データによる振動波形より振幅が大きい単発的な振動を所定回数加えることによって、一時的に変化させる振動データを出力してもよい。第3の例として、所定の往路振動データの出力対象となっているオブジェクトが特定種類のオブジェクトの場合、コントローラの動きまたは姿勢の変化が所定の条件を満たした場合であっても、振動を変化させずに当該往路振動データの出力を継続してもよい。
また、上述した実施例では、左コントローラ3や右コントローラ4の動きに応じて移動開始する第1オブジェクトG1や第2オブジェクトG2の移動に伴って往路振動データが生成される例を用いたが、他の操作に応じて第1オブジェクトG1や第2オブジェクトG2が移動開始してもよい。例えば、左コントローラ3や右コントローラ4に設けられた所定の操作部(例えば、操作ボタンや方向指示部)に対するユーザ操作に応じて、第1オブジェクトG1や第2オブジェクトG2が移動開始し、当該第1オブジェクトG1や第2オブジェクトG2の移動に伴って往路振動データが生成されてもよい。
また、上述した実施例では、第1オブジェクトG1および第2オブジェクトG2は、それぞれ移動中であっても左コントローラ3や右コントローラ4を用いた操作によって軌道が変化するため、結果的に第1移動開始可能状態が終了してから次の第1移動開始可能状態となるまでの時間や第2移動開始可能状態が終了してから次の第2移動開始可能状態となるまでの時間が長いものであることが前提となっている。このように、次の移動が開始可能となるまでの時間が長くなるゲームにおいては、先行して移動開始する操作(振り操作)を受け付けるゲーム仕様が効果的となるが、他の仕様によって次の移動が開始可能となるまでの時間が長くなるゲームであってもよいことは言うまでない。例えば、上述したゲーム例では、プレイヤオブジェクトPOの腕が伸びることによって移動中の動きを制御可能にしているが、プレイヤオブジェクトの他の五体(例えば、脚)が伸びるゲームやプレイヤオブジェクトが所持している物体(鞭オブジェクト、蛇腹オブジェクト等)が伸びるゲームに本発明を適用してもよい。また、プレイヤオブジェクトが遠隔操作可能なオブジェクト(例えば、ラジコン、ロボット、ロケットパンチ等)を移動中に操作し、再びプレイヤオブジェクトの手元に帰った場合に次の移動が可能となるゲームに本発明を適用してもよい。また、一旦放ったオブジェクト(鳥、ブーメラン、ボーリングの球等)が戻ってくるゲームに本発明を適用してもよい。
また、上述した「両手パンチアクション」は、第1オブジェクトG1および第2オブジェクトG2が組となって所定のアクションを行う例として記載したが、単に第1オブジェクトG1および第2オブジェクトG2が組となって移動するものであってもよい。この場合、ゲーム画像として表現される第1オブジェクトG1および第2オブジェクトG2の移動形態は、単に第1オブジェクトG1および第2オブジェクトG2が組となって移動するものとなるが、第1オブジェクトG1および第2オブジェクトG2の少なくとも一方が敵オブジェクトEOと衝突した場合に、単独で衝突する場合と比べて与えるダメージが大きくてもよい。
また、上述した実施例では、左コントローラ3や右コントローラ4を用いた操作に応じて、第1オブジェクトG1および第2オブジェクトG2における仮想空間の左右方向の位置が制御され、当該操作に応じて振動が一時的に変化する例を用いたが、第1オブジェクトG1および第2オブジェクトG2における仮想空間の上下方向の位置および/または前後方向の位置が制御可能に構成されてもよい。この場合、左コントローラ3および/または右コントローラ4の実空間における上下方向の動作および/またはピッチ方向の姿勢に応じて、第1オブジェクトG1および/または第2オブジェクトG2における仮想空間の上下方向の位置が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。また、左コントローラ3および/または右コントローラ4の実空間における前後方向の動作および/またはピッチ方向の姿勢に応じて、第1オブジェクトG1および/または第2オブジェクトG2における仮想空間の前後方向の位置が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。また、左コントローラ3や右コントローラ4を用いた操作に応じて、第1オブジェクトG1および第2オブジェクトG2における仮想空間における姿勢が制御可能に構成されてもよい。この場合、左コントローラ3および/または右コントローラ4の実空間におけるロール方向の姿勢に応じて、第1オブジェクトG1および/または第2オブジェクトG2における仮想空間のロール方向に対する姿勢が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。また、左コントローラ3および/または右コントローラ4の実空間におけるピッチ方向の姿勢に応じて、第1オブジェクトG1および/または第2オブジェクトG2における仮想空間のピッチ方向に対する姿勢が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。また、左コントローラ3および/または右コントローラ4の実空間におけるヨー方向の姿勢に応じて、第1オブジェクトG1および/または第2オブジェクトG2における仮想空間のヨー方向に対する姿勢が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。
また、上述した実施例において、左コントローラ3や右コントローラ4の動きや姿勢を検出する方法については、単なる一例であって、他の方法や他のデータを用いて左コントローラ3や右コントローラ4の動きや姿勢を検出してもよい。例えば、上述した実施例における加速度センサ104および114や角速度センサ105および115は、左コントローラ3や右コントローラ4の動きや姿勢を算出するための姿勢センサの一例である。例えば他の実施形態においては、左コントローラ3や右コントローラ4は、加速度センサや角速度センサに加えて(または代えて)磁気センサを備えていてもよく、磁気によって左コントローラ3や右コントローラ4の動きや姿勢を算出してもよい。また、例えば他の実施形態においては、本体装置2は、左コントローラ3や右コントローラ4を撮像装置によって撮像し、撮影された画像を用いて左コントローラ3や右コントローラ4の動きや姿勢を算出してもよい。また、上述した実施例では、左コントローラ3や右コントローラ4を用いた操作に応じたゲーム画像を据置型モニタ6に表示しているが、本体装置2のディスプレイ12に表示してもよい。また、第1オブジェクトG1および/または第2オブジェクトG2の動作を制御するためのコントローラは、左コントローラ3および右コントローラ4のセットだけでなく、他のコントローラが組み合わせられたり、他のコントローラ同士が組み合わせられたりしてもよい。
また、上述した実施例では、一対の左コントローラ3および右コントローラ4を用いて複数のオブジェクトを操作するゲームを用いたが、1つのコントローラを用いて単一のオブジェクトを操作するゲームでもよい。この場合、上記単一のオブジェクトの移動に応じて1つのコントローラを振動させるための往路振動データが出力されている期間において、当該コントローラの動きまたは姿勢の変化が所定の条件を満たした場合に、振動の振幅および/または周波数を一時的に変化させる振動データが出力される。これによって、1つのコントローラによって単一のオブジェクトを操作するゲームであっても、当該1つのコントローラの振動を一時的に変化させることが可能となる。
また、他の実施形態においては、本体装置2は、据置型モニタ6と直接通信可能であってもよい。例えば、本体装置2と据置型モニタ6とが直接有線通信または直接無線通信を行うことが可能であってもよい。この場合、本体装置2は、本体装置2と据置型モニタ6とが直接通信可能か否かに基づいて画像の表示先を決定してもよい。
また、アナログスティック32および52は、操作検出結果をアナログ値で取得し、当該アナログ値を示すアナログ操作データを出力できる操作装置の一例であるが、アナログ値を取得できる他の操作装置が左コントローラ3や右コントローラ4に設けられてもよい。例えば、ユーザがボタンを押下する押下量に応じたアナログ値を取得可能な押下ボタンやユーザがタッチする位置に応じたアナログ値を取得可能なタッチパネルやタッチパッドが左コントローラ3や右コントローラ4に設けられてもよい。
また、付加装置(例えば、クレードル)は、本体装置2を着脱可能な任意の付加装置であってよい。付加装置は、本実施形態のように、本体装置2に対する充電を行う機能を有していてもよいし、有していなくてもよい。
また、情報処理システム1は、どのような装置であってもよく、携帯型のゲーム装置、任意の携帯型電子機器(PDA(Personal Digital Assistant)、携帯電話、パーソナルコンピュータ、カメラ、タブレット等)等であってもよい。また、左コントローラ3および/または右コントローラ4も、どのような装置であってもよく、任意の携帯型電子機器(PDA(Personal Digital Assistant)、携帯電話、パーソナルコンピュータ、カメラ、タブレット、携帯ゲーム装置等)等であってもよい。
また、上述した説明では情報処理(ゲーム処理)を情報処理システム1でそれぞれ行う例を用いたが、上記処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、情報処理システム1がさらに他の装置(例えば、別のサーバ、他の画像表示装置、他のゲーム装置、他の携帯端末)と通信可能に構成されている場合、上記処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した情報処理(ゲーム処理)は、少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施例においては、情報処理システム1のCPU81が所定のプログラムを実行することによって情報処理を行うことが可能であるが、情報処理システム1が備える専用回路によって上記処理の一部または全部が行われてもよい。
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置(据置型のゲーム装置)と携帯型の情報処理装置(携帯型のゲーム装置)との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本発明を実現できることは言うまでもない。
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
また、上記プログラムは、外部メモリ等の外部記憶媒体を通じて情報処理システム1に供給されるだけでなく、有線または無線の通信回線を通じて当該装置に供給されてもよい。また、上記プログラムは、当該装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。