以下、本実施形態の一例に係る情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法について説明する。本実施形態におけるゲームシステムの一例となる情報処理システム1は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とによって構成される。また、上記情報処理システムの他の態様は、上記構成にクレードル5(図6、図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は、ユーザが入力を行うための操作部を備える装置である。なお、本実施形態においては、情報処理システム1は、横長の形状であるものとする。つまり、本実施形態においては、情報処理システム1の主面の長手方向を横方向(左右方向とも言う)と呼び、当該主面の短手方向を縦方向(上下方向とも言う)と呼び、主面に垂直な方向を奥行方向(前後方向とも言う)と呼ぶこととする。また、情報処理システム1における方向をわかりやすくするために、情報処理システム1に対する3軸(xyz軸)方向を定義する。具体的には、図1に示すように、情報処理システム1においてディスプレイ12が設けられている前面から背面に向かうディスプレイ12の奥行方向をz軸正方向とし、当該奥行方向に対して垂直な横方向において右から左に向かう方向(右コントローラ4の装着位置から左コントローラ3の装着位置に向かう方向)をx軸正方向とし、当該奥行方向および当該横方向に対して垂直な上下方向において下から上に向かうディスプレイ12に沿った方向をy軸正方向とする。
図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は、横長の形状であるものとする。本体装置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の一例を示す六面図であり、図示されているxyz方向は、左コントローラ3の正面図における3軸方向を示している。図4に示すように、左コントローラ3は、ハウジング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の一例を示す六面図であり、図示されているxyz方向は、右コントローラ4の正面図における3軸方向を示している。図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軸(例えば、図4に示すxyz軸)方向に沿った直線加速度の大きさを検出する。なお、加速度センサ104は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。また、左コントローラ3は、角速度センサ105を備える。本実施形態においては、角速度センサ105は、所定の3軸(例えば、図4に示す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の両方を用いる態様が考えられる。なお、1人のユーザが左コントローラ3および右コントローラ4の両方を用いる場合、左コントローラ3と右コントローラ4とを接合して1つの操作装置として機能させる付属機器(例えば、後述する拡張グリップ210)を用いることも可能である。また、離脱状態で情報処理システム1を利用してアプリケーション(例えば、ゲームアプリケーション)に対する操作を行う場合の他の態様としては、1人のユーザが左コントローラ3および右コントローラ4の一方を用いる態様が考えられる。なお、当該利用態様によって複数のユーザが同じアプリケーションを用いて操作する場合は、複数のユーザが左コントローラ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を左手で把持する。つまり、ユーザの左手によって把持されている左コントローラ3は、x軸負方向がユーザの前方を向き、z軸正方向が左を向いた状態となる。また、ユーザは、縦長の略板状である右コントローラ4の長手方向の下方向(図1に示す上下方向(y軸負方向))が鉛直方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面(スライダ62が設けられている側面)が前方に向き、かつ、右コントローラ4の主面(アナログスティック52等が設けられる面)が左に向くように右コントローラ4を右手で把持する。つまり、ユーザの右手によって把持されている右コントローラ4は、x軸正方向がユーザの前方を向き、z軸正方向が右を向いた状態となる。
このように、左手で左コントローラ3を把持し右手で右コントローラ4を把持した状態(以下、このような操作方式を縦持ち操作方式として、当該方向に把持された左コントローラ3および右コントローラ4の姿勢を基本姿勢と記載することがある)から、各コントローラを上下左右前後に動かしたり、各コントローラを回転させたり、各コントローラを振り動かしたりすることによって、各コントローラの動きや姿勢に応じてゲームプレイが行われる。そして、上記ゲームプレイにおいて、左コントローラ3の加速度センサ104は、上記xyz軸方向の加速度をそれぞれ操作入力として検出可能であり、角速度センサ105は、上記xyz軸方向周りの角速度をそれぞれ操作入力として検出可能である。また、右コントローラ4の加速度センサ114は、上記xyz軸方向の加速度をそれぞれ操作入力として検出可能であり、角速度センサ115は、上記xyz軸方向周りの角速度をそれぞれ操作入力として検出可能である。さらに、上記縦持ち操作では、ユーザの左手の親指によって第1Lボタン38を押下する操作が可能となり、ユーザの右手の親指によって第1Rボタン60を押下する操作が可能となり、当該ボタン操作によるゲームプレイも行われる。
また、本実施例では、左コントローラ3および右コントローラ4を把持してゲームプレイする場合、当該ゲーム状況に応じて、左コントローラ3および/または右コントローラ4に振動が与えられる。上述したように、左コントローラ3は、振動子107を有しており、右コントローラ4は、振動子117を有している。本体装置2のCPU81は、実行しているゲーム状況に応じて振動データを左コントローラ3および/または右コントローラ4に送信することによって、当該振動データに応じた振幅および周波数で振動子107および/または振動子117を振動させることができる。
次に、図14〜図16は、左コントローラ3および右コントローラ4を動かすことによってプレイするゲームにおいて表示されるゲーム画像例を示す図である。図14に示すように、本ゲーム例では、プレイヤオブジェクトPOと敵オブジェクトEOとが対戦するゲーム(例えば、ボクシングゲーム)の画像が据置型モニタ6に表示される。そして、左コントローラ3および右コントローラ4を操作するユーザは、左コントローラ3本体および/または右コントローラ4本体を振り動かしたり、左コントローラ3本体および/または右コントローラ4本体の姿勢を変化させたり、操作ボタン(例えば、第1Lボタン38や第1Rボタン60)を押下したりすることによって、プレイヤオブジェクト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に向かって移動する。これによって、敵オブジェクトEOに対してプレイヤオブジェクトPOが右パンチを繰り出したようなゲーム画像が表示される。また、左コントローラ3および右コントローラ4の何れも動かしていない状態から、左コントローラ3を前方(左コントローラ3のx軸負方向)に押し出すように振り動かした場合、左コントローラ3の動きに応じてプレイヤオブジェクトPOの第1オブジェクトG1が敵オブジェクトEOに向かって移動する。これによって、敵オブジェクトEOに対してプレイヤオブジェクトPOが左パンチを繰り出したようなゲーム画像が表示される。
ここで、第1オブジェクトG1が移動開始する際の移動方向は、左コントローラ3を押し出すように振り動かした際の左コントローラ3の姿勢によって設定される。また、第2オブジェクトG2が移動開始する際の移動方向は、右コントローラ4を押し出すように動かした際の右コントローラ4の姿勢によって設定される。例えば、図15に示したように、右コントローラ4がx軸正方向に移動した場合、当該移動における右コントローラ4のロール方向の姿勢に応じて第2オブジェクトG2の移動方向が設定される。一例として、本実施例では、右コントローラ4が移動している期間において、実空間において重力加速度が作用している方向を基準とした右コントローラ4のy軸方向の傾きを算出し、当該y軸方向の傾きに基づいて第2オブジェクトG2の移動方向を算出している。具体的には、右コントローラ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が移動中(典型的には、敵オブジェクトEOの方向へ移動している期間)であっても、左コントローラ3または右コントローラ4の姿勢や動きに応じて移動する軌道を変化させることができる。例えば、上述した第1オブジェクトG1または第2オブジェクトG2の移動開始時の左コントローラ3または右コントローラ4の姿勢から左コントローラ3または右コントローラ4がロール方向に回転した場合やヨー方向に回転した場合、当該回転に応じて第1オブジェクトG1または第2オブジェクトG2の軌道を変化させる。
一例として、本実施例では、第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の軌道を変化させる。
また、本ゲーム例では、左コントローラ3または右コントローラ4が振り動かされたか否かの判定を、左コントローラ3または右コントローラ4に生じた加速度の大きさを用いて行う。そして、第1オブジェクトG1が上記移動開始位置に配置されている状態において左コントローラ3が上記x軸負方向に振り動かされたと判定された場合、当該移動開始位置から敵オブジェクトEOに向かって第1オブジェクトG1が移動を開始する。また、第2オブジェクトG2が上記移動開始位置に配置されている状態において右コントローラ4が上記x軸正方向に振り動かされたと判定された場合、当該移動開始位置から敵オブジェクトEOに向かって第2オブジェクトG2が移動を開始する。
また、本ゲーム例では、第1オブジェクトG1および第2オブジェクトG2の一方が上記移動開始位置から移動開始して移動中であっても、第1オブジェクトG1および第2オブジェクトG2の他方も上記移動開始位置から移動開始させることができる。例えば、図16に示すように、ユーザが右コントローラ4を前方(右コントローラ4のx軸正方向)に押し出すように振り動かすことによって、第2オブジェクトG2が敵オブジェクトEOに向かって移動開始する。その後、第2オブジェクトG2の移動中に、ユーザが左コントローラ3を前方(左コントローラ3のx軸負方向)に押し出すように振り動かすことによって、第1オブジェクトG1も敵オブジェクトEOに向かって移動開始する。したがって、図16に例示した据置型モニタ6には、第1オブジェクトG1および第2オブジェクトG2の両方が敵オブジェクトEOに向かって移動するゲーム画像が表示されている。また、図16には、先行して移動開始した第2オブジェクトG2が敵オブジェクトEOに衝突(ヒット)しているゲーム画像が例示されている。
ここで、本ゲーム例では、仮想ゲーム世界における第1オブジェクトG1および/または第2オブジェクトG2の状況に応じて、左コントローラ3および/または右コントローラ4に振動が与えられる。一例として、本ゲーム例では、第1オブジェクトG1が仮想ゲーム世界を移動する場合、第1オブジェクトG1の種類、移動速度、移動方向、衝突状況等に応じた振動が左コントローラ3に与えられる。また、第2オブジェクトG2が仮想ゲーム世界を移動する場合、第2オブジェクトG2の種類、移動速度、移動方向、衝突状況等に応じた振動が右コントローラ4に与えられる。
例えば、図15に示した例では、ユーザが右コントローラ4を前方(右コントローラ4のx軸正方向)に押し出すように振り動かすことによって、第2オブジェクトG2が敵オブジェクトEOに向かって仮想ゲーム世界を移動しており、当該移動に応じた振動が右コントローラ4のみに与えられている。また、図16に示した例では、第2オブジェクトG2の移動中に、ユーザが左コントローラ3を前方(左コントローラ3のx軸負方向)に押し出すように振り動かすことによって、第1オブジェクトG1も敵オブジェクトEOに向かって仮想ゲーム世界を移動しており、当該移動に応じた振動が左コントローラ3のみに与えられている。その一方で、第2オブジェクトG2が仮想ゲーム世界において敵オブジェクトEOに衝突(ヒット)したため、当該衝突に応じた振動が右コントローラ4のみに与えられている。このように、左コントローラ3および右コントローラ4には、それぞれの第1オブジェクトG1および第2オブジェクトG2の移動状況に応じて独立した別の振動が与えられるため、ユーザは、リアリティのある振動をそれぞれのコントローラから与えられることになる。
また、本ゲーム例では、左コントローラ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の両方が内側へ傾く姿勢になっていると判定された場合、仮想ゲーム世界においてプレイヤオブジェクトPOが敵オブジェクトEOからの攻撃を防御する動作を行う。
また、本ゲーム例では、左コントローラ3および右コントローラ4の操作ボタンに対する操作に応じて、仮想空間内でプレイヤオブジェクトPOを移動させたり、動作させたりすることができる。例えば、左コントローラ3の第1Lボタン38が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがダッシュして移動(高速移動)する。また、右コントローラ4の第1Rボタン60が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがジャンプする。
また、本実施例では、左コントローラ3と右コントローラ4とを接合して1つの操作装置として機能させるアタッチメント(付属機器)を用いて上記ゲームをプレイすることも可能である。
図17は、左コントローラ3および右コントローラ4を装着可能な付属機器の一例を示す図である。図17に示すように、付属機器の一例である拡張グリップ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に振動が与えられる。一例として、拡張グリップ210を用いてゲームプレイする場合も、第1オブジェクトG1が仮想ゲーム世界を移動する場合、第1オブジェクトG1の種類、移動速度、移動方向、衝突状況等に応じた振動が拡張グリップ210に装着された左コントローラ3に与えられる。また、第2オブジェクトG2が仮想ゲーム世界を移動する場合、第2オブジェクトG2の種類、移動速度、移動方向、衝突状況等に応じた振動が拡張グリップ210に装着された右コントローラ4に与えられる。
例えば、図17に示した例では、ユーザが右コントローラ4のAボタン53を押下することによって、第2オブジェクトG2が敵オブジェクトEOに向かって仮想ゲーム世界を移動しており、当該移動に応じた振動が拡張グリップ210に装着された右コントローラ4に与えられている。さらに、第2オブジェクトG2の移動中に、ユーザが右コントローラ4のBボタン54を押下することによって、第1オブジェクトG1も敵オブジェクトEOに向かって仮想ゲーム世界を移動しており、当該移動に応じた振動が拡張グリップ210に装着された左コントローラ3にも与えられている。その一方で、第2オブジェクトG2が仮想ゲーム世界において敵オブジェクトEOに衝突(ヒット)したため、当該衝突に応じた振動が拡張グリップ210に装着された右コントローラ4に与えられている。このように、拡張グリップ210に装着された左コントローラ3および右コントローラ4であっても、それぞれの第1オブジェクトG1および第2オブジェクトG2の移動状況に応じて独立した別の振動が与えられるため、ユーザは、リアリティのある振動をそれぞれのコントローラから与えられることになる。
図18は、離脱状態において、1人のユーザが左コントローラ3および右コントローラ4の一方を把持して情報処理システム1を利用する様子の一例を示す図である。図18に示すように、離脱状態において、ユーザは、例えば左コントローラ3を両手で把持して操作を行いながら、据置型モニタ6に表示された画像を見ることができる。
例えば、本実施例では、ユーザは、縦長の略板状である左コントローラ3の長手方向(図1に示すy軸方向)が横方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面(スライダ40が設けられている側面)が前方に向き、かつ、左コントローラ3の主面(アナログスティック32等が設けられる面)が上方を向くように左コントローラ3を両手で把持する。つまり、ユーザの両手によって把持されている左コントローラ3は、y軸正方向がユーザの左方向となり、x軸負方向がユーザの前方を向き、z軸正方向が下方を向いた状態となる。なお、ユーザは、縦長の略板状である右コントローラ4を両手で把持する場合、縦長の略板状である右コントローラ4の長手方向(図1に示すy軸方向)が横方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面(スライダ62が設けられている側面)が前方に向き、かつ、右コントローラ4の主面(アナログスティック52等が設けられる面)が上方を向くように把持する。
このように、両手で左コントローラ3および右コントローラ4の一方を把持した状態(以下、このような操作方式を横持ち操作方式と記載することがある)で、当該一方のコントローラの操作ボタンやスティックを操作することによって、ゲームプレイが行われる。例えば、上記横持ち操作では、ユーザの左手を上記一方のコントローラの上面(図1に示すy軸正方向側の側面)に添え、ユーザの右手を上記一方のコントローラの下面(図1に示すy軸負方向側の側面)に添えた状態となる。したがって、上記横持ち操作では、把持するコントローラの主面に設けられた各操作ボタンやスティックを用いた操作が可能となる。また、上記横持ち操作では、把持するコントローラが本体装置2に装着された際に当該本体装置2と接する側面に設けられた操作ボタン(例えば、第2Lボタン43、第2Rボタン44、第2Lボタン65、第2Rボタン66等)を用いた操作が可能となる。
一例として、ユーザが左コントローラ3を両手で把持して横持ち操作する場合、左コントローラ3に設けられた各操作ボタンやスティックが用いられて操作される。例えば、左コントローラ3の左方向ボタン36が押下操作された場合、プレイヤオブジェクトPOが左パンチを繰り出して第1オブジェクトG1が移動開始する。左コントローラ3の下方向ボタン34が押下操作された場合、プレイヤオブジェクト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からの攻撃を防御する。左コントローラ3の右方向ボタン33が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがジャンプする動作を行う。そして、左コントローラ3の上方向ボタン35が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがダッシュ(高速移動)する。
他の例として、ユーザが右コントローラ4を両手で把持して横持ち操作する場合、右コントローラ4に設けられた各操作ボタンやスティックが用いられて操作される。例えば、右コントローラ4のAボタン53が押下操作された場合、プレイヤオブジェクトPOが左パンチを繰り出して第1オブジェクトG1が移動開始する。右コントローラ4のXボタン55が押下操作された場合、プレイヤオブジェクトPOが右パンチを繰り出して第2オブジェクトG2が移動開始する。仮想ゲーム世界において第1オブジェクトG1および/または第2オブジェクトG2が移動中に右コントローラ4のアナログスティック52が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、移動中の第1オブジェクトG1および/または第2オブジェクトG2の移動方向が変化する。第1オブジェクトG1および第2オブジェクトG2が何れも移動開始位置に配置されている場合に右コントローラ4のアナログスティック52が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、仮想ゲーム世界においてプレイヤオブジェクトPOが移動する。また、第1オブジェクトG1および第2オブジェクトG2が何れも移動開始位置に配置されている場合に右コントローラ4のアナログスティック52が押し込まれる操作が行われた場合、仮想ゲーム世界においてプレイヤオブジェクトPOが敵オブジェクトEOからの攻撃を防御する。右コントローラ4のYボタン56が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがジャンプする動作を行う。そして、右コントローラ4のBボタン54が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがダッシュ(高速移動)する。
図19は、上述した操作方式(縦持ち操作方式、拡張グリップ操作方式、横持ち操作方式)毎の操作内容に対するプレイヤオブジェクトPOの動作を示す操作対応テーブルの一例である。
図19から明らかなように、プレイヤオブジェクトPOに同じ動作を行わせたい場合であっても、操作方式が異なることによって異なる操作が必要とされる場合がある。例えば、プレイヤオブジェクトPOを前後左右に移動させたい場合、縦持ち操作方式では左コントローラ3および右コントローラ4を移動させたい方向に傾ける操作が必要となるが、拡張グリップ操作方式および横持ち操作方式ではスティックの傾倒操作が必要となる。また、プレイヤオブジェクトPOを前後左右に移動させたい場合、拡張グリップ操作方式と右コントローラ4を用いる横持ち操作方式との間では、操作に用いるスティックが異なる。さらに、プレイヤオブジェクトPOを前後左右に移動させたい場合、拡張グリップ操作方式と左コントローラ3を用いる横持ち操作方式との間では、アナログスティック32を傾倒させる方向が異なる。具体的には、プレイヤオブジェクトPOを左または右に移動させたい場合、拡張グリップ操作方式ではアナログスティック32をx軸正方向またはx軸負方向へそれぞれ傾倒させる必要があるが、左コントローラ3を用いる横持ち操作方式ではアナログスティック32をy軸正方向またはy軸負方向へそれぞれ傾倒させる必要がある。また、プレイヤオブジェクトPOを前方または後方に移動させたい場合、拡張グリップ操作方式ではアナログスティック32をy軸正方向またはy軸負方向へそれぞれ傾倒させる必要があるが、左コントローラ3を用いる横持ち操作方式ではアナログスティック32をx軸負方向またはx軸正方向へそれぞれ傾倒させる必要がある。また、これらの操作内容は、第1オブジェクトG1および/または第2オブジェクトG2の移動方向を変化させる場合も類似した相違がある。
また、プレイヤオブジェクトPOに左パンチまたは右パンチを繰り出す動作をさせる場合、縦持ち操作方式では左コントローラ3または右コントローラ4を振る操作が必要となるが、拡張グリップ操作方式および横持ち操作方式では上述したように割り当てられた操作ボタンを押下する操作が必要となる。そして、拡張グリップ操作方式および横持ち操作方式の間でも、左パンチまたは右パンチを繰り出す動作をさせる場合に割り当てられた操作ボタンがそれぞれ異なっている。さらに、プレイヤオブジェクトPOにジャンプまたはダッシュする動作をさせる場合、各操作方式において割り当てられた操作ボタンがそれぞれ異なっている。
また、図19から明らかなように、左コントローラ3および/または右コントローラ4を用いて同じ操作を行ったとしても、操作方式が異なることによって対応するプレイヤオブジェクトPOの動作が異なることがある。例えば、拡張グリップ操作方式においてアナログスティック32を傾倒操作する場合と左コントローラ3を用いる横持ち操作方式においてアナログスティック32を傾倒操作する場合とでは、スティックが傾倒する方向が同じ操作が行われてもプレイヤオブジェクトPOが移動する方向が異なることになる。また、拡張グリップ操作方式においてBボタン54が押下操作された場合、プレイヤオブジェクトPOが左パンチを繰り出す動作を行うが、右コントローラ4を用いる横持ち操作方式においてBボタン54が押下操作された場合、プレイヤオブジェクトPOがダッシュする動作を行う。拡張グリップ操作方式においてAボタン53が押下操作された場合、プレイヤオブジェクトPOが右パンチを繰り出す動作を行うが、右コントローラ4を用いる横持ち操作方式においてAボタン53が押下操作された場合、プレイヤオブジェクトPOが左パンチを繰り出す動作を行う。拡張グリップ操作方式においてXボタン55が押下操作された場合、プレイヤオブジェクトPOがジャンプする動作を行うが、右コントローラ4を用いる横持ち操作方式においてXボタン55が押下操作された場合、プレイヤオブジェクトPOが右パンチを繰り出す動作を行う。そして、拡張グリップ操作方式においてYボタン56が押下操作された場合、プレイヤオブジェクトPOがダッシュする動作を行うが、右コントローラ4を用いる横持ち操作方式においてYボタン56が押下操作された場合、プレイヤオブジェクトPOがジャンプする動作を行う。
また、本実施例では、横持ち操作方式によって左コントローラ3および右コントローラ4の一方を把持してゲームプレイする場合も、当該ゲーム状況に応じて、把持している左コントローラ3および右コントローラ4の一方に振動が与えられる。上述したように、左コントローラ3は、振動子107を有しており、右コントローラ4は、振動子117を有している。本体装置2のCPU81は、実行しているゲーム状況に応じて振動データを左コントローラ3および右コントローラ4の一方に送信することによって、当該振動データに応じた振幅および周波数で振動子107または振動子117を振動させることができる。
ここで、横持ち操作方式によって把持している左コントローラ3および右コントローラ4の一方を振動させるための振動データは、縦持ち操作方式や拡張グリップ操作方式において左コントローラ3を振動させるための振動データと右コントローラ4を振動させるための振動データとに基づいて生成される。つまり、1つのコントローラを用いてゲームプレイする場合は、2つのコントローラを用いてゲームプレイする場合にそれぞれのコントローラに与えられていた振動を1つに合成して、当該1つのコントローラに与えられる。例えば、1つのコントローラを振動させるための振動データを生成する方式としては、選択方式および加算方式がある。以下、図20〜図22を参照して、振動データを生成する方式について説明する。なお、図20は、選択方式によって振動データを生成する方法の一例を説明するための図である。図21は、高周波側および低周波側をまとめて判定する場合に用いられる合成モジュールの一例を示す図である。図22は、加算方式によって振動データを生成する方法の一例を説明するための図である。
選択方式によって振動データを生成する場合、左コントローラ3を振動させるための振動データおよび右コントローラ4を振動させるための振動データについて、所定時間毎に何れか1つを選択する。具体的には、左コントローラ3を振動させるための振動データおよび右コントローラ4を振動させるための振動データが入力された場合、左コントローラ3を振動させるための振動データが示す左コントローラ用振動波形の振幅と右コントローラ4を振動させるための振動データが示す右コントローラ用振動波形の振幅とに基づいて、所定時間毎に振幅の大きい方の振動波形を示す振動データを選択する。このように選択方式によって振動データを選択することによって、ユーザが顕著に知覚可能な振動を優先して生じさせることが可能となる。
図20には、左コントローラ用振動波形と右コントローラ用振動波形とが入力された場合を示している。左コントローラ用振動波形は、相対的に弱く継続的な振動を示し、右コントローラ用振動波形は、相対的に強く短い振動を示している。例えば、選択方式によって振動データを生成する場合、所定期間毎(例えば、5msec〜数10msec)にいずれの振動波形の振幅が大きいのかを判定し、より振幅の大きな振動波形を示す振動データを選択して出力する。したがって、選択方式では、所定期間毎に選択された振動波形によって合成振動波形が生成され、当該合成振動波形を示す振動データが出力される。
なお、上記選択方式において振動データを選択する際、当該振動データが示す振動波形の周波数も考慮して選択する振動データを判定してもよい。例えば、入力した振動データが高周波帯の振動波形と低周波帯の振動波形との組み合わせによって示される場合、高周波側および低周波側をそれぞれ独立して判定する方法と高周波側および低周波側の一方に重み付けをして判断する方法とが考えられる。前者の場合、左コントローラ用振動波形と右コントローラ用振動波形とが入力された場合、高周波側の左コントローラ用振動波形の振幅と高周波側の右コントローラ用振動波形の振幅とに基づいて、所定時間毎に振幅の大きい方の振動波形を示す振動データを、高周波側の振動データとして選択する。また、左コントローラ用振動波形と右コントローラ用振動波形とが入力された場合、低周波側の左コントローラ用振動波形の振幅と低周波側の右コントローラ用振動波形の振幅とに基づいて、所定時間毎に振幅の大きい方の振動波形を示す振動データを、低周波側の振動データとして選択する。後者の場合、各周波数帯の振幅に重み付けをした上で所定期間毎に最も大きな振幅を示す振動波形を選出し、入力した左コントローラ用振動波形および右コントローラ用振動波形のうち、当該選出された振動波形を含む方の振動波形を示す振動データを選択する。
また、入力した振動データが高周波帯の振動波形と低周波帯の振動波形との組み合わせによって示される場合、高周波側および低周波側をまとめて判定することが考えられる。図21において、上記合成モジュールは、左コントローラ用振動波形の低周波側の振幅α1Lおよび高周波側の振幅α1Hを合成した振幅と、右コントローラ用振動波形の低周波側の振幅α2Lおよび高周波側の振幅α2Hを合成した振幅との比較(すなわち、関数max(α1L+α1H,α2L+α2H))が行なわれ、当該比較においてより大きな振幅を示す振動波形が合成振動波形として出力する。すなわち、上記合成モジュールは、左コントローラ用振動波形に含まれる第1の振幅(α1L)および第2の振幅(α1H)から算出される値(α1L+α1H)と、右コントローラ用振動波形に含まれる第1の振幅(α2L)および第2の振幅(α2H)から算出される値(α2L+α2H)とに基づいて、いずれかの振動波形を選択的に出力する。
このように、左コントローラ3を振動させるための複数の振動データおよび右コントローラ4を振動させるための複数の振動データが入力された場合に、左コントローラ3を振動させるための複数の振動データが示す振幅の合計と右コントローラ4を振動させるための複数の振動データが示す振幅の合計とに基づいて、所定期間毎に、振幅の合計が大きい方の複数の振動データが選択される。したがって、左コントローラ用振動波形および右コントローラ用振動波形のうち、全体として振幅がより大きなものが選択されるので、入力される振動波形全体の特徴を維持したまま、ユーザに対して振動刺激を与えることができる。
また、図21に示す選択方式においては、入力された振動パターンの振幅に対して周波数による重み付けをして評価するようにしてもよい。一般的に、人間は低周波側の振動に敏感であるので、例えば、高周波側の振幅より大きな重み係数(例えば、b>1)を低周波側の振幅に乗じるようにしてもよい。この場合。関数max(bXα1L+α1H,bXα2L+α2H)を利用して、いずれの振幅が大きいのかが判断されてもよい。
また、左コントローラ用振動波形の低周波側の周波数f1Lおよび右コントローラ用振動波形の低周波側の周波数f2Lの異同、および、左コントローラ用振動波形の高周波側の周波数f1Hおよび右コントローラ用振動波形の高周波側の周波数f2Hの異同については考慮せず、各振動波形の振幅のみを比較対象とするように構成してもよい。
また、左コントローラ用振動波形および右コントローラ用振動波形に含まれる周波数成分から、各振幅の大きさに基づいて、所定数の周波数成分を選択するようにしてもよい。すなわち、左コントローラ用振動波形の低周波側の振幅α1L、左コントローラ用振動波形の高周波側の振幅α1H、右コントローラ用振動波形の低周波側の振幅α2L、および右コントローラ用振動波形の高周波側の振幅α2Hのうち大きなものから上位2つの周波数成分を抽出して、合成振動波形として出力するようにしてもよい。
また、上記選択方式において振動データを選択する際、当該振動データが示す振動波形の振幅とは異なるパラメータに基づいて選択する振動データを判定してもよい。例えば、振動データが示す振動波形の周波数に基づいて、所定時間毎に周波数の小さい方の振動波形を示す振動データを選択してもよい。
図22に示すように、加算方式によって振動データを生成する場合、左コントローラ3を振動させるための振動データおよび右コントローラ4を振動させるための振動データについて、所定時間毎に振動波形を重ね合わせる。具体的には、左コントローラ3を振動させるための振動データおよび右コントローラ4を振動させるための振動データが入力された場合、左コントローラ3を振動させるための振動データが示す左コントローラ用振動波形と右コントローラ4を振動させるための振動データが示す右コントローラ用振動波形とを所定時間毎に重ね合わせて合成振動波形を生成して、当該合成振動波形を示す振動データを生成する。具体的には、所定周期毎に入力された振動波形の振幅を加算して合成振動波形を生成することが考えられ、この場合、左コントローラ用振動波形と右コントローラ用振動波形とが時間軸上で結合したものとなる。このように加算方式によって振動データを生成することによって、例えば図21に示すような同じような種類の振動が複数重なり合うことが頻繁に生じ得る状況において、当該振動を欠落させることなく互いに重なり合った振動をユーザに対して知覚させることができる。
ここで、上記加算方式によって振動データを合成する場合、合成振動波形の周波数は、左コントローラ用振動波形の周波数と右コントローラ用振動波形の周波数とに基づいて算出される。第1の例として、入力した左コントローラ用振動波形および右コントローラ用振動波形のうち、振幅が最も大きい振動波形の周波数を採用する。第2の例として、入力した左コントローラ用振動波形の周波数と右コントローラ用振動波形の周波数との平均値を採用する。第3の例として、入力した左コントローラ用振動波形の周波数と右コントローラ用振動波形の周波数とにそれぞれの振幅による重み付け(例えば、振幅に応じた重み付け加重平均)をした上で、上記第1の例または上記第2の例による周波数の算出を行う。
なお、上記加算方式によって振動データを合成する場合、所定周期毎に入力された振動波形の振幅を加算して合成振動波形を生成することが考えられるが、当該振動波形の振幅を平均して合成振動波形を生成してもよい。また、振動波形の振幅を平均して合成振動波形を生成する場合、各振動波形の周波数によって重み付けをした振幅を平均してもよい。
このように、横持ち操作方式によって左コントローラ3および右コントローラ4の一方を用いて操作する場合であっても、左コントローラ3および右コントローラ4の両方を用いて操作している場合に与えられる振動に基づいた振動が生成される。したがって、横持ち操作方式によって操作するユーザは、他の操作方式による振動と同じ振動データに基づいた振動を知覚することができ、操作方式による興趣性が損なわれることを防止することができる。
また、上述した説明では、1つのコントローラを振動させるための振動データを選択方式および加算方式によって生成する例を用いたが、他の方式を用いて当該振動データを生成してもかまわない。例えば、縦持ち操作方式や拡張グリップ操作方式において音と同期した振動が左コントローラ3および右コントローラ4にそれぞれ与えられる場合、横持ち操作方式では、当該音を合成した合成音に基づいた振動を左コントローラ3および右コントローラ4の一方に与えてもよい。具体的には、縦持ち操作方式や拡張グリップ操作方式の場合、仮想ゲーム世界における第1オブジェクトG1の移動に伴う音声(例えば、移動音、衝突音、破壊音等)を示す音声データに基づいて左コントローラ3を振動させるための振動データが生成され、仮想ゲーム世界における第2オブジェクトG2の移動に伴う音声(例えば、移動音、衝突音、破壊音等)を示す音声データに基づいて右コントローラ4を振動させるための振動データが生成される。この場合、横持ち操作方式では、第1オブジェクトG1の移動に伴う音声と第2オブジェクトG2の移動に伴う音声とを合成した合成音声データを生成し、当該合成音声データに基づいて左コントローラ3および右コントローラ4の一方を振動させるための振動データが生成される。
次に、図23〜図27を参照して、本実施形態において情報処理システム1で実行される具体的な処理の一例について説明する。図23は、本実施形態において本体装置2のDRAM85に設定されるデータ領域の一例を示す図である。なお、DRAM85には、図23に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
DRAM85のプログラム記憶領域には、情報処理システム1で実行される各種プログラムPaが記憶される。本実施形態においては、各種プログラムPaは、上述した左コントローラ3および右コントローラ4との間で無線通信するための通信プログラムや、左コントローラ3および/または右コントローラ4から取得したデータに基づいた情報処理(例えば、ゲーム処理)を行うためのアプリケーションプログラム、左コントローラ3および/または右コントローラ4を振動させるための振動制御プログラム等が記憶される。なお、各種プログラム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、および画像データDm等が記憶される。
操作データ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は、ユーザによって選択されて設定された操作方式(例えば、縦持ち操作方式、拡張グリップ操作方式、横持ち操作方式)を示すデータである。
左コントローラ振動データDfは、左コントローラ3を振動させるための振動を示すデータである。右コントローラ振動データDgは、右コントローラ4を振動させるための振動を示すデータである。合成振動データDhは、横持ち操作方式が設定されている場合に左コントローラ3および右コントローラ4の一方を振動させるための振動を示すデータである。
操作対応テーブルデータDiは、操作に対応して行われる指示内容が操作方式毎に記述された操作対応テーブル(図19参照)を示すデータである。
プレイヤオブジェクト位置データDjは、第1オブジェクトG1、第2オブジェクトG2、およびプレイヤオブジェクトPOの仮想空間における位置および方向(移動方向)をそれぞれ示すデータである。敵オブジェクト位置データDkは、敵オブジェクトEOの仮想空間における位置および方向を示すデータや当該敵オブジェクトEOから放たれるオブジェクト(例えば、左グラブ(左拳)および右グラブ(右拳)を模したオブジェクト)の仮想空間における位置および方向を示すデータである。
画像データDmは、ゲームの際に本体装置2のディスプレイ12や据置型モニタ6の表示画面に画像(例えば、仮想オブジェクトの画像、フィールド画像、背景画像)を表示するためのデータである。
次に、図24〜図27を参照して、本実施形態における情報処理(ゲーム処理)の詳細な一例を説明する。図24は、情報処理システム1で実行されるゲーム処理の一例を示すフローチャートである。図25は、図24におけるステップS146において行われる縦持ちゲーム処理の詳細の一例を示すサブルーチンである。図26は、図24におけるステップS148において行われる拡張グリップゲーム処理の詳細の一例を示すサブルーチンである。図27は、図24におけるステップS149において行われる横持ちゲーム処理の詳細の一例を示すサブルーチンである。本実施形態においては、図24〜図27に示す一連の処理は、CPU81が各種プログラムPaに含まれる通信プログラムや所定のアプリケーションプログラム(ゲームプログラム)を実行することによって行われる。また、図24〜図27に示すゲーム処理が開始されるタイミングは任意である。
なお、図24〜図27に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をCPU81が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、CPU81以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置2において実行される処理の一部は、本体装置2と通信可能な他の情報処理装置(例えば、本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち、図24〜図27に示す各処理は、本体装置2を含む複数の情報処理装置が協働することによって実行されてもよい。
図24において、CPU81は、ゲーム処理における初期設定を行い(ステップS141)、次のステップに処理を進める。例えば、上記初期設定では、CPU81は、以下に説明する処理を行うためのパラメータを初期化する。また、上記初期設定では、CPU81は、ゲームプレイを行うためのゲームフィールドを設定し、当該ゲームフィールド上のプレイヤオブジェクトPOや敵オブジェクトEOの初期位置を設定してプレイヤオブジェクト位置データDjおよび敵オブジェクト位置データDkを更新する。また、CPU81は、第1オブジェクトG1および第2オブジェクトG2の移動方向をデフォルト値(例えば、正面方向)に初期設定してプレイヤオブジェクト位置データDjを更新する。
次に、CPU81は、左コントローラ3および/または右コントローラ4から操作データを取得して操作データDaを更新し(ステップS142)、次のステップに処理を進める。
次に、CPU81は、ユーザによって操作方式が選択されたか否かを判定する(ステップS143)。そして、CPU81は、操作方式が選択された場合、ステップS144に処理を進める。一方、CPU81は、操作方式が選択されていない場合、上記ステップS142の処理を繰り返してユーザによって操作方式が選択されるのを待つ。
上記ステップS143の処理において、CPU81は、一例として、上記ステップS142において取得した操作データが、複数の操作方式それぞれに設定されている固有の操作のいずれかに該当する場合、操作方式が選択されたと判定する。例えば、CPU81は、左コントローラ3の第1Lボタン38と右コントローラ4の第1Rボタン60とが同時に押下される操作が行われた場合、縦持ち操作方式が選択されたと判定する。また、CPU81は、左コントローラ3のZLボタン39と右コントローラ4のZRボタン61とが同時に押下される操作が行われた場合、拡張グリップ操作方式が選択されたと判定する。また、CPU81は、左コントローラ3の第2Lボタン43と第2Rボタン44とが同時に押下される操作が行われた場合、左コントローラ3を用いた横持ち操作方式が選択されたと判定し、右コントローラ4の第2Lボタン65と第2Rボタン66とが同時に押下される操作が行われた場合、右コントローラ4を用いた横持ち操作方式が選択されたと判定する。
他の例として、CPU81は、本体装置2のディスプレイ12や据置型モニタ6の表示画面に操作方式の選択を促す選択肢を表示し、上記ステップS142において取得した操作データがいずれかの選択肢を選択する操作を示す場合、操作方式が選択されたと判定する。例えば、CPU81は、本体装置2のディスプレイ12や据置型モニタ6の表示画面に、縦持ち操作方式、拡張グリップ操作方式、および横持ち操作方式をそれぞれ選択する選択肢を表示して、何れかの選択肢の選択をユーザに促す。
ステップS144において、CPU81は、操作方式を設定し、次のステップに処理を進める。例えば、CPU81は、上記ステップS143において選択された操作方式を示すデータを用いて、操作方式データDeを更新する。
次に、CPU81は、縦持ち操作方式が選択されているか否かを判定する(ステップS145)。そして、CPU81は、縦持ち操作方式が選択されている場合、ステップS146に処理を進める。一方、CPU81は、縦持ち操作方式が選択されていない場合、ステップS147に処理を進める。
ステップS146において、CPU81は、縦持ち操作方式によるゲーム処理を行い、ステップS150に処理を進める。以下、図25を参照して、縦持ち操作方式によるゲーム処理について説明する。
図25において、CPU81は、左コントローラ3および右コントローラ4から操作データを取得して操作データDaを更新し(ステップS161)、次のステップに処理を進める。
次に、CPU81は、左コントローラ3および右コントローラ4それぞれの姿勢、角速度、加速度を算出し(ステップS162)、次のステップに処理を進める。例えば、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は、左コントローラ振り認識処理を行い(ステップS163)、次のステップに処理を進める。例えば、CPU81は、加速度データDdを参照して、現時点において左コントローラ3に生じているxy加速度の大きさが左コントローラ3の振り判定をするための閾値より大きい場合、左コントローラ3が振り動かされたと判定する。ここで、xy加速度は、左コントローラ3に生じている加速度のうち、z軸方向成分(つまり、図11〜図16を用いて説明した縦持ち操作方式による操作において、左コントローラ3の横方向成分)を除いた加速度である。
次に、CPU81は、右コントローラ振り認識処理を行い(ステップS164)、次のステップに処理を進める。例えば、CPU81は、加速度データDdを参照して、現時点において右コントローラ4に生じているxy加速度の大きさが右コントローラ4の振り判定をするための閾値より大きい場合、右コントローラ4が振り動かされたと判定する。ここで、xy加速度は、右コントローラ4に生じている加速度のうち、z軸方向成分(つまり、図11〜図16を用いて説明した縦持ち操作方式による操作において、右コントローラ4の横方向成分)を除いた加速度である。
次に、CPU81は、第1オブジェクト動作処理を行い(ステップS165)、次のステップに処理を進める。例えば、CPU81は、上記ステップS163において左コントローラ3が振り動かされたと判定されたことに応じて、移動開始位置からの第1オブジェクトG1の移動を開始し、重力加速度の方向に対する左コントローラ3のz軸方向の傾きに応じて、第1オブジェクトG1の移動方向を変化させる。具体的には、CPU81は、姿勢データDbを参照して左コントローラ3の姿勢を取得し、重力加速度の方向に対する当該左コントローラ3のz軸方向の傾きを算出する。さらに、CPU81は、重力加速度の方向周りの左コントローラ3の角速度に応じて、第1オブジェクトG1の移動方向を変化させる。具体的には、CPU81は、角速度データDcを参照して左コントローラ3に生じているxyz軸周りの角速度を取得し、当該角速度に基づいて重力加速度方向周りの左コントローラ3の角速度を算出する。そして、CPU81は、第1オブジェクトG1の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第1オブジェクトG1の移動を継続する。例えば、CPU81は、プレイヤオブジェクト位置データDjを参照して第1オブジェクトG1の位置および移動方向を取得し、当該第1オブジェクトG1の位置から当該移動方向および移動アルゴリズムに基づいて第1オブジェクトG1を移動させ、当該移動後の第1オブジェクトG1の位置を用いてプレイヤオブジェクト位置データDjを更新する。なお、第1オブジェクトG1が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第1オブジェクトG1の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第1オブジェクトG1が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第1オブジェクトG1の位置が設定される。また、プレイヤオブジェクトPOが左パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第1オブジェクトG1の位置が設定される。
次に、CPU81は、第2オブジェクト動作処理を行い(ステップS166)、次のステップに処理を進める。例えば、CPU81は、上記ステップS164において右コントローラ4が振り動かされたと判定されたことに応じて、移動開始位置からの第2オブジェクトG2の移動を開始し、重力加速度の方向に対する右コントローラ4のz軸方向の傾きに応じて、第2オブジェクトG2の移動方向を変化させる。具体的には、CPU81は、姿勢データDbを参照して右コントローラ4の姿勢を取得し、重力加速度の方向に対する当該右コントローラ4のz軸方向の傾きを算出する。さらに、CPU81は、重力加速度の方向周りの右コントローラ4の角速度に応じて、第2オブジェクトG2の移動方向を変化させる。具体的には、CPU81は、角速度データDcを参照して右コントローラ4に生じているxyz軸周りの角速度を取得し、当該角速度に基づいて重力加速度方向周りの右コントローラ4の角速度を算出する。そして、CPU81は、第2オブジェクトG2の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第2オブジェクトG2の移動を継続する。例えば、CPU81は、プレイヤオブジェクト位置データDjを参照して第2オブジェクトG2の位置および移動方向を取得し、当該第2オブジェクトG2の位置から当該移動方向および移動アルゴリズムに基づいて第2オブジェクトG2を移動させ、当該移動後の第2オブジェクトG2の位置を用いてプレイヤオブジェクト位置データDjを更新する。なお、第2オブジェクトG2が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第2オブジェクトG2の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第2オブジェクトG2が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第2オブジェクトG2の位置が設定される。また、プレイヤオブジェクトPOが右パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第2オブジェクトG2の位置が設定される。
次に、CPU81は、プレイヤオブジェクト動作処理を行い(ステップS167)、次のステップに処理を進める。例えば、CPU81は、操作対応テーブルデータDiが示す操作対応テーブルの記述に基づいて、上記ステップS161において取得した操作データが示す指示内容を設定し、当該指示内容に応じてプレイヤオブジェクトPOを動作させて、プレイヤオブジェクト位置データDjを更新する。すなわち、CPU81は、姿勢データDbを参照して、左コントローラ3および右コントローラ4の両方が左に傾けられている場合、当該傾斜角度に応じた移動速度でプレイヤオブジェクトPOを左に移動させて、プレイヤオブジェクト位置データDjを更新する。CPU81は、姿勢データDbを参照して、左コントローラ3および右コントローラ4の両方が右に傾けられている場合、当該傾斜角度に応じた移動速度でプレイヤオブジェクトPOを右に移動させて、プレイヤオブジェクト位置データDjを更新する。CPU81は、姿勢データDbを参照して、左コントローラ3および右コントローラ4の両方が前方に傾けられている場合、当該傾斜角度に応じた移動速度でプレイヤオブジェクトPOを前方に移動させて、プレイヤオブジェクト位置データDjを更新する。CPU81は、姿勢データDbを参照して、左コントローラ3および右コントローラ4の両方が後方に傾けられている場合、当該傾斜角度に応じた移動速度でプレイヤオブジェクトPOを後方に移動させて、プレイヤオブジェクト位置データDjを更新する。そして、CPU81は、姿勢データDbを参照して、左コントローラ3および右コントローラ4の両方が内側に傾けられている場合、第1オブジェクトG1および第2オブジェクトG2が移動開始位置に配置されていれば、プレイヤオブジェクトPOに防御動作させる。また、操作データDaを参照して、第1Lボタン38が押下されている場合、プレイヤオブジェクトPOをダッシュで移動させて、プレイヤオブジェクト位置データDjを更新する。また、操作データDaを参照して、第1Rボタン60が押下されている場合、プレイヤオブジェクトPOをジャンプさせて、プレイヤオブジェクト位置データDjを更新する。
次に、CPU81は、左コントローラ3を振動させるための振動データを生成する処理を行い(ステップS168)、次のステップに処理を進める。例えば、CPU81は、第1オブジェクトG1の種類、移動速度、移動方向、衝突状況等に応じた振動波形を生成し、振動波形に基づいて左コントローラ3を振動させるための振動データを生成して、左コントローラ振動データDfを更新する。なお、CPU81は、第1オブジェクトG1の移動速度や移動方向が変化した場合や他のオブジェクトとの衝突が生じた時点において、当該変化や衝撃度に応じて左コントローラ3を振動させるため振幅や周波数を変化させてもかまわない。また、CPU81は、第1オブジェクトG1以外の仮想ゲーム世界の状況に応じた振動を、上記振動波形に加えてもかまわない。例えば、プレイヤオブジェクトPOの動作やプレイヤオブジェクトPOに与えられた衝撃に応じた振動、ゲームフィールドの状況に応じた振動、BGMや効果音に応じた振動等を、上記振動波形に加えてもかまわない。
次に、CPU81は、右コントローラ4を振動させるための振動データを生成する処理を行い(ステップS169)、次のステップに処理を進める。例えば、CPU81は、第2オブジェクトG2の種類、移動速度、移動方向、衝突状況等に応じた振動波形を生成し、振動波形に基づいて右コントローラ4を振動させるための振動データを生成して、右コントローラ振動データDgを更新する。なお、CPU81は、第2オブジェクトG2の移動速度や移動方向が変化した場合や他のオブジェクトとの衝突が生じた時点において、当該変化や衝撃度に応じて右コントローラ4を振動させるため振幅や周波数を変化させてもかまわない。また、CPU81は、第2オブジェクトG2以外の仮想ゲーム世界の状況に応じた振動を、上記振動波形に加えてもかまわない。例えば、プレイヤオブジェクトPOの動作やプレイヤオブジェクトPOに与えられた衝撃に応じた振動、ゲームフィールドの状況に応じた振動、BGMや効果音に応じた振動等を、上記振動波形に加えてもかまわない。
次に、CPU81は、振動データを送信する周期毎に当該周期に対応する振動データを左コントローラ3および右コントローラ4へ送信する処理を行い(ステップS170)、当該サブルーチンによる処理を終了する。例えば、CPU81は、左コントローラ振動データDfを参照して、上記送信周期に対応する振動長さ分の振動データを左コントローラ3へ送信する。また、CPU81は、右コントローラ振動データDgを参照して、上記送信周期に対応する振動長さ分の振動データを右コントローラ4へ送信する。このように各コントローラ用の振動データが送信されることによって、当該振動データを受信した左コントローラ3および右コントローラ4は、それぞれの振動データに応じた振動波形で振動する。
図24に戻り、上記ステップS145において縦持ち操作方式が選択されていないと判定した場合、CPU81は、拡張グリップ操作方式が選択されているか否かを判定する(ステップS147)。そして、CPU81は、拡張グリップ操作方式が選択されている場合、ステップS148に処理を進める。一方、CPU81は、拡張グリップ操作方式が選択されていない場合、ステップS149に処理を進める。
ステップS148において、CPU81は、拡張グリップ操作方式によるゲーム処理を行い、ステップS150に処理を進める。以下、図26を参照して、拡張グリップ操作方式によるゲーム処理について説明する。
図26において、CPU81は、左コントローラ3および右コントローラ4から操作データを取得して操作データDaを更新し(ステップS181)、次のステップに処理を進める。
次に、CPU81は、第1オブジェクト動作処理を行い(ステップS182)、次のステップに処理を進める。例えば、CPU81は、操作対応テーブルデータDiが示す操作対応テーブルの記述に基づいて、上記ステップS181において取得した操作データが示す指示内容を設定し、当該指示内容に応じて第1オブジェクトG1を動作させて、プレイヤオブジェクト位置データDjを更新する。
例えば、CPU81は、上記ステップS181において取得した操作データがBボタン54の押下操作を示している場合、移動開始位置から所定方向への第1オブジェクトG1の移動を開始して、プレイヤオブジェクト位置データDjを更新する。また、CPU81は、上記ステップS181において取得した操作データがアナログスティック32の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第1オブジェクトG1が移動中であればアナログスティック32が傾倒操作されている方向および傾倒角度に応じて、第1オブジェクトG1の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDjを更新する。そして、CPU81は、第1オブジェクトG1の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第1オブジェクトG1の移動を継続する。例えば、CPU81は、プレイヤオブジェクト位置データDjを参照して第1オブジェクトG1の位置および移動方向を取得し、当該第1オブジェクトG1の位置から当該移動方向および移動アルゴリズムに基づいて第1オブジェクトG1を移動させ、当該移動後の第1オブジェクトG1の位置を用いてプレイヤオブジェクト位置データDjを更新する。なお、第1オブジェクトG1が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第1オブジェクトG1の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第1オブジェクトG1が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第1オブジェクトG1の位置が設定される。また、プレイヤオブジェクトPOが左パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第1オブジェクトG1の位置が設定される。
次に、CPU81は、第2オブジェクト動作処理を行い(ステップS183)、次のステップに処理を進める。例えば、CPU81は、操作対応テーブルデータDiが示す操作対応テーブルの記述に基づいて、上記ステップS181において取得した操作データが示す指示内容を設定し、当該指示内容に応じて第2オブジェクトG2を動作させて、プレイヤオブジェクト位置データDjを更新する。
例えば、CPU81は、上記ステップS181において取得した操作データがAボタン53の押下操作を示している場合、移動開始位置から所定方向への第2オブジェクトG2の移動を開始して、プレイヤオブジェクト位置データDjを更新する。また、CPU81は、上記ステップS181において取得した操作データがアナログスティック32の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第2オブジェクトG2が移動中であればアナログスティック32が傾倒操作されている方向および傾倒角度に応じて、第2オブジェクトG2の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDjを更新する。そして、CPU81は、第2オブジェクトG2の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第2オブジェクトG2の移動を継続する。例えば、CPU81は、プレイヤオブジェクト位置データDjを参照して第2オブジェクトG2の位置および移動方向を取得し、当該第2オブジェクトG2の位置から当該移動方向および移動アルゴリズムに基づいて第2オブジェクトG2を移動させ、当該移動後の第2オブジェクトG2の位置を用いてプレイヤオブジェクト位置データDjを更新する。なお、第2オブジェクトG2が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第2オブジェクトG2の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第2オブジェクトG2が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第2オブジェクトG2の位置が設定される。また、プレイヤオブジェクトPOが右パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第2オブジェクトG2の位置が設定される。
次に、CPU81は、プレイヤオブジェクト動作処理を行い(ステップS184)、次のステップに処理を進める。例えば、CPU81は、操作対応テーブルデータDiが示す操作対応テーブルの記述に基づいて、上記ステップS181において取得した操作データが示す指示内容を設定し、当該指示内容に応じてプレイヤオブジェクトPOを動作させて、プレイヤオブジェクト位置データDjを更新する。すなわち、CPU81は、操作データDaを参照して、アナログスティック32がx軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを左に移動させて、プレイヤオブジェクト位置データDjを更新する。CPU81は、操作データDaを参照して、アナログスティック32がx軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを右に移動させて、プレイヤオブジェクト位置データDjを更新する。CPU81は、操作データDaを参照して、アナログスティック32がy軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを前方に移動させて、プレイヤオブジェクト位置データDjを更新する。CPU81は、操作データDaを参照して、アナログスティック32がy軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを後方に移動させて、プレイヤオブジェクト位置データDjを更新する。そして、CPU81は、操作データDaを参照して、アナログスティック32を押し込む操作が行われている場合、第1オブジェクトG1および第2オブジェクトG2が移動開始位置に配置されていれば、プレイヤオブジェクトPOに防御動作させる。また、操作データDaを参照して、Yボタン56が押下されている場合、プレイヤオブジェクトPOをダッシュで移動させて、プレイヤオブジェクト位置データDjを更新する。また、操作データDaを参照して、Xボタン55が押下されている場合、プレイヤオブジェクトPOをジャンプさせて、プレイヤオブジェクト位置データDjを更新する。
次に、CPU81は、左コントローラ3を振動させるための振動データを生成する処理を行い(ステップS185)、次のステップに処理を進める。なお、上記ステップS185における振動データ生成処理は、上述したステップS168における振動データ生成処理と同様であるため、ここでは詳細な説明を省略する。
次に、CPU81は、右コントローラ4を振動させるための振動データを生成する処理を行い(ステップS186)、次のステップに処理を進める。なお、上記ステップS186における振動データ生成処理は、上述したステップS169における振動データ生成処理と同様であるため、ここでは詳細な説明を省略する。
次に、CPU81は、振動データを送信する周期毎に当該周期に対応する振動データを左コントローラ3および右コントローラ4へ送信する処理を行い(ステップS187)、当該サブルーチンによる処理を終了する。なお、上記ステップS187における振動データ送信処理は、上述したステップS170における振動データ送信処理と同様であるため、ここでは詳細な説明を省略する。
図24に戻り、上記ステップS147において拡張グリップ操作方式が選択されていないと判定した場合、CPU81は、横持ち操作方式が選択されているとしてステップS149に処理を進める。ステップS149において、CPU81は、横持ち操作方式によるゲーム処理を行い、ステップS150に処理を進める。以下、図27を参照して、横持ち操作方式によるゲーム処理について説明する。
図27において、CPU81は、横持ち操作方式で用いられるコントローラとして設定されている左コントローラ3または右コントローラ4から操作データを取得して操作データDaを更新し(ステップS191)、次のステップに処理を進める。
次に、CPU81は、第1オブジェクト動作処理を行い(ステップS192)、次のステップに処理を進める。例えば、CPU81は、操作対応テーブルデータDiが示す操作対応テーブルの記述に基づいて、上記ステップS191において取得した操作データが示す指示内容を設定し、当該指示内容に応じて第1オブジェクトG1を動作させて、プレイヤオブジェクト位置データDjを更新する。
例えば、左コントローラ3を用いた横持ち操作方式において、CPU81は、上記ステップS191において取得した操作データが左方向ボタン36の押下操作を示している場合、移動開始位置から所定方向への第1オブジェクトG1の移動を開始して、プレイヤオブジェクト位置データDjを更新する。また、CPU81は、上記ステップS191において取得した操作データがアナログスティック32の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第1オブジェクトG1が移動中であれば、アナログスティック32が傾倒操作されている方向および傾倒角度に応じて、第1オブジェクトG1の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDjを更新する。
また、右コントローラ4を用いた横持ち操作方式において、CPU81は、上記ステップS191において取得した操作データがAボタン53の押下操作を示している場合、移動開始位置から所定方向への第1オブジェクトG1の移動を開始して、プレイヤオブジェクト位置データDjを更新する。また、CPU81は、上記ステップS191において取得した操作データがアナログスティック52の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第1オブジェクトG1が移動中であれば、アナログスティック52が傾倒操作されている方向および傾倒角度に応じて、第1オブジェクトG1の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDjを更新する。
そして、何れのコントローラを用いた横持ち操作方式であっても、CPU81は、第1オブジェクトG1の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第1オブジェクトG1の移動を継続する。例えば、CPU81は、プレイヤオブジェクト位置データDjを参照して第1オブジェクトG1の位置および移動方向を取得し、当該第1オブジェクトG1の位置から当該移動方向および移動アルゴリズムに基づいて第1オブジェクトG1を移動させ、当該移動後の第1オブジェクトG1の位置を用いてプレイヤオブジェクト位置データDjを更新する。なお、第1オブジェクトG1が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第1オブジェクトG1の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第1オブジェクトG1が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第1オブジェクトG1の位置が設定される。また、プレイヤオブジェクトPOが左パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第1オブジェクトG1の位置が設定される。
次に、CPU81は、第2オブジェクト動作処理を行い(ステップS193)、次のステップに処理を進める。例えば、CPU81は、操作対応テーブルデータDiが示す操作対応テーブルの記述に基づいて、上記ステップS191において取得した操作データが示す指示内容を設定し、当該指示内容に応じて第2オブジェクトG2を動作させて、プレイヤオブジェクト位置データDjを更新する。
例えば、左コントローラ3を用いた横持ち操作方式において、CPU81は、上記ステップS191において取得した操作データが下方向ボタン34の押下操作を示している場合、移動開始位置から所定方向への第2オブジェクトG2の移動を開始して、プレイヤオブジェクト位置データDjを更新する。また、CPU81は、上記ステップS191において取得した操作データがアナログスティック32の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第2オブジェクトG2が移動中であれば、アナログスティック32が傾倒操作されている方向および傾倒角度に応じて、第2オブジェクトG2の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDjを更新する。
また、右コントローラ4を用いた横持ち操作方式において、CPU81は、上記ステップS191において取得した操作データがXボタン55の押下操作を示している場合、移動開始位置から所定方向への第2オブジェクトG2の移動を開始して、プレイヤオブジェクト位置データDjを更新する。また、CPU81は、上記ステップS191において取得した操作データがアナログスティック52の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第2オブジェクトG2が移動中であれば、アナログスティック52が傾倒操作されている方向および傾倒角度に応じて、第2オブジェクトG2の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDjを更新する。
そして、何れのコントローラを用いた横持ち操作方式であっても、CPU81は、第2オブジェクトG2の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第2オブジェクトG2の移動を継続する。例えば、CPU81は、プレイヤオブジェクト位置データDjを参照して第2オブジェクトG2の位置および移動方向を取得し、当該第2オブジェクトG2の位置から当該移動方向および移動アルゴリズムに基づいて第2オブジェクトG2を移動させ、当該移動後の第2オブジェクトG2の位置を用いてプレイヤオブジェクト位置データDjを更新する。なお、第2オブジェクトG2が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第2オブジェクトG2の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第2オブジェクトG2が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第2オブジェクトG2の位置が設定される。また、プレイヤオブジェクトPOが右パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第2オブジェクトG2の位置が設定される。
次に、CPU81は、プレイヤオブジェクト動作処理を行い(ステップS194)、次のステップに処理を進める。例えば、CPU81は、操作対応テーブルデータDiが示す操作対応テーブルの記述に基づいて、上記ステップS191において取得した操作データが示す指示内容を設定し、当該指示内容に応じてプレイヤオブジェクトPOを動作させて、プレイヤオブジェクト位置データDjを更新する。
すなわち、左コントローラ3を用いた横持ち操作方式において、CPU81は、操作データDaを参照して、アナログスティック32がy軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを左に移動させて、プレイヤオブジェクト位置データDjを更新する。CPU81は、操作データDaを参照して、アナログスティック32がy軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを右に移動させて、プレイヤオブジェクト位置データDjを更新する。CPU81は、操作データDaを参照して、アナログスティック32がx軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを前方に移動させて、プレイヤオブジェクト位置データDjを更新する。CPU81は、操作データDaを参照して、アナログスティック32がx軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを後方に移動させて、プレイヤオブジェクト位置データDjを更新する。そして、CPU81は、操作データDaを参照して、アナログスティック32を押し込む操作が行われている場合、第1オブジェクトG1および第2オブジェクトG2が移動開始位置に配置されていれば、プレイヤオブジェクトPOに防御動作させる。また、操作データDaを参照して、上方向ボタン35が押下されている場合、プレイヤオブジェクトPOをダッシュで移動させて、プレイヤオブジェクト位置データDjを更新する。また、操作データDaを参照して、右方向ボタン33が押下されている場合、プレイヤオブジェクトPOをジャンプさせて、プレイヤオブジェクト位置データDjを更新する。
また、右コントローラ4を用いた横持ち操作方式において、CPU81は、操作データDaを参照して、アナログスティック52がy軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを左に移動させて、プレイヤオブジェクト位置データDjを更新する。CPU81は、操作データDaを参照して、アナログスティック52がy軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを右に移動させて、プレイヤオブジェクト位置データDjを更新する。CPU81は、操作データDaを参照して、アナログスティック52がx軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを前方に移動させて、プレイヤオブジェクト位置データDjを更新する。CPU81は、操作データDaを参照して、アナログスティック52がx軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを後方に移動させて、プレイヤオブジェクト位置データDjを更新する。そして、CPU81は、操作データDaを参照して、アナログスティック52を押し込む操作が行われている場合、第1オブジェクトG1および第2オブジェクトG2が移動開始位置に配置されていれば、プレイヤオブジェクトPOに防御動作させる。また、操作データDaを参照して、Bボタン54が押下されている場合、プレイヤオブジェクトPOをダッシュで移動させて、プレイヤオブジェクト位置データDjを更新する。また、操作データDaを参照して、Yボタン56が押下されている場合、プレイヤオブジェクトPOをジャンプさせて、プレイヤオブジェクト位置データDjを更新する。
次に、CPU81は、左コントローラ3を振動させるための振動データを生成する処理を行い(ステップS195)、次のステップに処理を進める。なお、上記ステップS195における振動データ生成処理は、上述したステップS168における振動データ生成処理と同様であるため、ここでは詳細な説明を省略する。
次に、CPU81は、右コントローラ4を振動させるための振動データを生成する処理を行い(ステップS196)、のステップに処理を進める。なお、上記ステップS196における振動データ生成処理は、上述したステップS169における振動データ生成処理と同様であるため、ここでは詳細な説明を省略する。
次に、CPU81は、振動合成処理を行い(ステップS197)、次のステップに処理を進める。例えば、CPU81は、上記ステップS195で生成されて更新された左コントローラ振動データDfおよび上記ステップS196で生成されて更新された右コントローラ振動データDgに基づいて、1つのコントローラを振動させるための合成振動データを生成し、当該データを用いて合成振動データDhを更新する。具体的には、CPU81は、左コントローラ振動データDfが示す振動波形(左コントローラ用振動波形)と右コントローラ振動データDgが示す振動波形(右コントローラ用振動波形)とを、上述した選択方式や加算方式等によって合成し、当該合成した振動波形を用いて合成振動データDhを更新する。
次に、CPU81は、振動データを送信する周期毎に当該周期に対応する振動データを、横持ち操作方式で用いられるコントローラとして設定されている左コントローラ3または右コントローラ4へ送信する処理を行い(ステップS198)、当該サブルーチンによる処理を終了する。例えば、CPU81は、合成振動データDhを参照して、上記送信周期に対応する振動長さ分の振動データを左コントローラ3または右コントローラ4へ送信する。このように1つのコントローラを振動させるための合成振動データが送信されることによって、当該合成振動データを受信した左コントローラ3または右コントローラ4は、合成振動データに応じた振動波形で振動する。
図24に戻り、ステップS150において、CPU81は、表示制御処理を行い、次のステップに処理を進める。例えば、CPU81は、プレイヤオブジェクト位置データDj、および敵オブジェクト位置データDkを用いて、ゲームフィールド上にプレイヤオブジェクトPO、第1オブジェクトG1、第2オブジェクトG2、敵オブジェクトEOを配置する。そして、CPU81は、所定の位置(例えば、プレイヤオブジェクトPOの背後)に配置された仮想カメラからゲームフィールドを見た仮想空間画像を生成し、当該仮想空間画像を表示装置(例えば、据置型モニタ6)の表示画面に表示する処理を行う。
次に、CPU81は、ゲームを終了するか否かを判定する(ステップS151)。上記ステップS151においてゲームを終了する条件としては、例えば、上記ゲームの結果が確定したことや、ユーザがゲームを終了する操作を行ったこと等がある。CPU81は、ゲームを終了しない場合に上記ステップS145に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。以降、ステップS145〜ステップS151の一連の処理は、ステップS151でゲームを終了すると判定されるまで繰り返し実行される。
このように、本実施例においては、左コントローラ3および右コントローラ4の両方を用いて操作する場合(縦持ち操作方式、拡張グリップ操作方式)に、それぞれのコントローラを異なる振動波形によって振動させることができるため、それぞれのコントローラに応じた適切な振動を与えることが可能となり、リアリティがあるゲームプレイが可能となる。その一方で、同じゲームを左コントローラ3および右コントローラ4の一方を用いて操作する場合(横持ち操作方式)、2つのコントローラそれぞれに与えられる振動波形に基づいて1つのコントローラ用の振動波形が生成され、当該振動波形を示す振動データが当該一方のコントローラに送信される。したがって、左コントローラ3および右コントローラ4の一方を操作する場合であっても、2つのコントローラに与えられていた振動と同じ振動データに基づいた振動を与えることが可能となるため、操作方式を変更しても適切な振動を与えることが可能となり、リアリティがあるゲームプレイが可能となる。
なお、上述した実施例では、ゲーム開始前に操作方式が選択されて設定される例を用いたが、ゲーム中であっても操作方式が変更可能であってもよい。一例として、上述した複数の操作方式それぞれに設定されている固有の操作がゲーム中に行われることに応じて、操作方式が切り替え可能に構成されてもよい。他の例として、所定の操作が行われることによって操作方式の選択肢を表示してゲームを中断し、当該ゲーム中断中に選択肢が選択されることに応じて、操作方式が切り替え可能に構成されてもよい。
また、上述した実施例では、左コントローラ3の振動データと右コントローラ4の振動データとに基づいて1つのコントローラ用の振動データを生成する処理を、本体装置2において行っているが、他の装置において当該処理を行ってもよい。例えば、上記1つのコントローラ用の振動データを用いて振動することになる当該コントローラ側において、当該振動データを生成する処理を行ってもよい。この場合、本体装置2から対象となるコントローラへ、左コントローラ3の振動データと右コントローラ4の振動データとを送信することによって、当該コントローラ側で1つのコントローラ用の振動データを生成する処理が可能となる。
また、上述した実施例では、左コントローラ3の振動データと右コントローラ4の振動データとに基づいて1つのコントローラ用の振動データを生成する方式をいくつか例示したが、これらの方式は、ゲーム中において固定されてもよいし、ゲーム中に変更されてもよい。後者の場合、ゲーム状況に応じて、適切な方式を選択することによって、左コントローラ3の振動データと右コントローラ4の振動データとに基づいて1つのコントローラ用の振動データを生成することが考えられる。例えば、上述したように、選択方式によって1つのコントローラ用の振動データを生成する場合、左コントローラ用振動波形および右コントローラ用振動波形のうち、全体として振幅がより大きなものを選択することが可能となるため、入力される振動波形全体の特徴を維持したまま、ユーザに対して振動刺激を与えることができる。その一方で、加算方式によって1つのコントローラ用の振動データを生成する場合、振動を欠落させることなく互いに重なり合った振動をユーザに対して知覚させることができる。このように、生成方式の利点に基づいて、ゲーム状況に合致する適切な生成方式を適宜選択することによって、さらに適切な振動を与えることが可能となる。
また、上述した実施例では、1人のユーザが縦持ち操作方式、拡張グリップ操作方式、および横持ち操作方式によって左コントローラ3および/または右コントローラ4を用いてゲームプレイする例を用いたが、複数のユーザがゲームプレイすることも考えられる。この場合、それぞれのユーザが用いる左コントローラ3および/または右コントローラ4に対して、それぞれのユーザが設定された操作方式に応じた振動をそれぞれのユーザが操作するコントローラに与えればよい。
また、複数のユーザが横持ち操作方式によって左コントローラ3および右コントローラ4の一方を用いる場合、それぞれのユーザが操作するコントローラに対して、同じ振動を与えることも考えられる。例えば、複数のユーザがそれぞれ縦持ち操作方式または拡張グリップ操作方式によって同じゲームをプレイする場合に、それぞれのユーザが把持する左コントローラ3には同じ振動が与えられ、それぞれのユーザが把持する左コントローラ3にも同じ振動が与えられるゲーム例(例えば、ゲームで再生されるBGMや効果音と連動して左コントローラ3および右コントローラ4にそれぞれ振動が与えられるケース、複数のユーザが同じプレイヤオブジェクトを操作するケース等)を想定する。上記ゲームを複数のユーザがそれぞれ横持ち操作方式によって操作する場合、左コントローラ3用の振動波形と右コントローラ4用の振動波形とが各ユーザにおいて同じとなるため、複数のユーザがそれぞれ操作するコントローラには、それぞれ同じ振動が与えられることになる。
また、上述した実施例において、左コントローラ3や右コントローラ4の動きや姿勢を検出する方法については、単なる一例であって、他の方法や他のデータを用いて左コントローラ3や右コントローラ4の動きや姿勢を検出してもよい。また、上述した実施例では、左コントローラ3や右コントローラ4を用いた操作に応じたゲーム画像を据置型モニタ6に表示しているが、本体装置2のディスプレイ12に表示してもよい。また、第1オブジェクトG1および/または第2オブジェクトG2の動作を制御するためのコントローラは、左コントローラ3および右コントローラ4のセットだけでなく、他のコントローラが組み合わせられたり、他のコントローラ同士が組み合わせられたりしてもよい。
また、他の実施形態においては、本体装置2は、据置型モニタ6と直接通信可能であってもよい。例えば、本体装置2と据置型モニタ6とが直接有線通信または直接無線通信を行うことが可能であってもよい。この場合、本体装置2は、本体装置2と据置型モニタ6とが直接通信可能か否かに基づいて画像の表示先を決定してもよい。
また、付加装置(例えば、クレードル)は、本体装置2を着脱可能な任意の付加装置であってよい。付加装置は、本実施形態のように、本体装置2に対する充電を行う機能を有していてもよいし、有していなくてもよい。
また、情報処理システム1は、どのような装置であってもよく、携帯型のゲーム装置、任意の携帯型電子機器(PDA(Personal Digital Assistant)、携帯電話、パーソナルコンピュータ、カメラ、タブレット等)等であってもよい。
また、上述した説明では情報処理(ゲーム処理)を情報処理システム1でそれぞれ行う例を用いたが、上記処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、情報処理システム1がさらに他の装置(例えば、別のサーバ、他の画像表示装置、他のゲーム装置、他の携帯端末)と通信可能に構成されている場合、上記処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した情報処理(ゲーム処理)は、少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施例においては、情報処理システム1のCPU81が所定のプログラムを実行することによって情報処理を行うことが可能であるが、情報処理システム1が備える専用回路によって上記処理の一部または全部が行われてもよい。
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置(据置型のゲーム装置)と携帯型の情報処理装置(携帯型のゲーム装置)との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本発明を実現できることは言うまでもない。
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
また、上記プログラムは、外部メモリ等の外部記憶媒体を通じて情報処理システム1に供給されるだけでなく、有線または無線の通信回線を通じて当該装置に供給されてもよい。また、上記プログラムは、当該装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。