JP4989052B2 - 入力データ処理プログラムおよび情報処理装置 - Google Patents

入力データ処理プログラムおよび情報処理装置 Download PDF

Info

Publication number
JP4989052B2
JP4989052B2 JP2005218620A JP2005218620A JP4989052B2 JP 4989052 B2 JP4989052 B2 JP 4989052B2 JP 2005218620 A JP2005218620 A JP 2005218620A JP 2005218620 A JP2005218620 A JP 2005218620A JP 4989052 B2 JP4989052 B2 JP 4989052B2
Authority
JP
Japan
Prior art keywords
input
coordinate
value
update
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2005218620A
Other languages
English (en)
Other versions
JP2007034793A (ja
Inventor
敬三 太田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nintendo Co Ltd
Original Assignee
Nintendo Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nintendo Co Ltd filed Critical Nintendo Co Ltd
Priority to JP2005218620A priority Critical patent/JP4989052B2/ja
Publication of JP2007034793A publication Critical patent/JP2007034793A/ja
Application granted granted Critical
Publication of JP4989052B2 publication Critical patent/JP4989052B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Digital Computer Display Output (AREA)
  • User Interface Of Digital Computer (AREA)

Description

本発明は、タッチパッド等の入力装置から入力されるデータを処理するための入力データ処理プログラムおよび情報処理装置に関する。
従来、タッチパッド等のポインティングデバイスを用いて画面の表示内容を変化させる技術がある。例えば、タッチパッド上でタッチペンをスライドさせることによってタッチパッド上で操作者に軌跡を描かせ、軌跡の向きおよび軌跡を描いた速度に応じて画面上のオブジェクト(例えばカーソル等)を移動させるのである。
上記の技術では、オブジェクトの移動速度は、入力の速度(タッチペンをスライドさせた速度)に比例しているのが一般的である。つまり、入力の速度が一定値であれば、オブジェクトの移動速度も一定値となる。ところが、操作者が入力を行う場合、入力の速度は、入力開始時(タッチペン等がタッチパッドに最初に触れた時点)において0から非連続的に増加し、入力終了時(タッチペン等がタッチパッドから離れた時点)において非連続的に0に減少する。そのため、オブジェクトは、入力開始時において急激に移動を開始し、入力終了時に急激に移動を停止するように動作することになる。このようなオブジェクトの移動が行われると、操作者はオブジェクトの移動を不自然に感じるおそれがある。特に、画面をスクロールさせる処理等、画面に表示されている画像全体を移動させる処理に上記の技術を適用する場合には、入力開始時および入力終了時において画面全体が急激に移動することとなり、操作者は画面の表示内容を目で追うことができなくなるおそれがある。これによって、操作者に対して不自然な印象を与えるどころか、不快感を与えてしまうおそれすらある。
これに対し、特許文献1には、「画像の拡大処理の過程を表示する場合に、拡大開始時においては画面が変化する速度を徐々に大きくし、拡大終了時においてはその速度を徐々に小さくする」技術が記載されている。また、特許文献2には、画面をスクロールさせる速度に関して、移動開始時および移動終了時において速度変化を緩やかにする技術が記載されている。これらの技術によれば、画面が急激に変化することを防止し、画面の変化を滑らかにすることができる。
特開平5−282415号公報 特開昭63−206827号公報
しかし、上記特許文献に記載の技術は、画面に表示された画像が移動する(変化する)速度を単に緩やかにするものであり、当該技術では画像の移動量(変化量)については考慮されていない。すなわち、上記技術では、画像の移動量は、操作者がタッチペンをスライドさせた長さ(タッチパッド上に描かれた軌跡の長さ)に比例していない。そのため、操作者は、描いた軌跡の長さから想像する長さよりも画像の実際の移動量が短いと感じたり、逆に長いと感じたりすることから、画像の移動に対して不自然な印象を受けるおそれがあった。つまり、従来の技術では、画像の急激な移動を防止することはできても、画像の移動に対して操作者が不自然な印象を受けることを防止することはできなかった。
それ故に、本発明の目的は、ポインティングデバイスを用いて画面に表示されている画像を変化させる場合において操作者が受ける不自然な印象を解消し、操作者に自然な印象を与えることができる入力データ処理プログラムおよび情報処理装置を提供することである。
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
本発明の第1の局面は、入力面に対する入力状態を検出する入力装置(タッチパッド7)と表示装置(テレビ2)とを備える情報処理装置(ゲーム装置2)のコンピュータ(CPU11等)に、記憶ステップ(S9)と、取得ステップ(S2)と、第1更新制御ステップ(S24)と、第2更新制御ステップ(S35)と、表示制御ステップ(S11)とを実行させる入力データ処理プログラムである。記憶ステップにおいて、コンピュータは、所定の平面(仮想平面)上の位置を表す第1座標(目標座標)および第2座標(追従座標)の値を情報処理装置のメモリ(メインメモリ17)に記憶する。取得ステップにおいて、入力面に対する入力状態を示す入力データ(入力座標データ、または入力ベクトルを示すデータ)を入力装置から繰り返し取得してメモリに記憶する。第1更新制御ステップにおいて、メモリに記憶された入力データに基づいて第1座標の更新を制御する。第2更新制御ステップにおいて、第1座標の値が変化したか否かにかかわらず入力データが取得される度に、第2座標の位置が第1座標の位置に近づくように当該第2座標の値を更新する。表示制御ステップにおいて、第2更新制御ステップが実行される度に、第2座標の更新前の位置を始点としかつ更新後の位置を終点とする出力ベクトルの向きおよび大きさに基づいて、表示装置に表示されている画像の一部(プレイヤキャラクタ等)または全部を移動させて表示させる。
第2の局面においては、第1更新制御ステップにおいて、入力面に対して入力が行われていないことを入力データが示すときには第1座標の値は変化しない。
第3の局面においては、第1更新制御ステップにおいて、入力面に対して入力が行われていないことを示す入力データが取得された後で、入力面に対する入力位置を示す入力データが取得されたときであっても、第1座標の値は変化しない。
第4の局面においては、所定の平面は、仮想的に設定される平面である。このとき、第1更新制御ステップにおいては、入力装置に対する入力が中断した後で当該入力が再度行われたとき、再度の入力が行われた時点における第1座標の値は、入力が中断する直前の第1座標の値に設定される。
第5の局面においては、入力装置は、入力面に対して入力が行われたとき、当該入力面に対する入力位置を所定時間間隔で検出して当該入力位置を示すデータ(入力座標データ)を出力する。このとき、取得ステップにおいては、入力装置から出力されたデータが入力データとして取得される。第1更新制御ステップは、入力ベクトル算出ステップ(S21)と、位置決定ステップ(S24)とを含む。入力ベクトル算出ステップにおいては、コンピュータは、メモリに記憶された入力データにより示される位置を終点としかつ当該入力データの1つ前に記憶された入力データにより示される位置を始点とする入力ベクトルを算出する。位置決定ステップにおいては、入力ベクトルの方向および大きさに基づいて第1座標の更新後の位置を決定する。
第6の局面においては、入力装置は、入力面に対して入力が行われたとき、当該入力面に対する入力位置を所定時間間隔で検出し、検出された入力位置を終点としかつ前回に検出された入力位置を始点とする入力ベクトルを示すデータを出力する。このとき、取得ステップにおいては、入力装置から出力されたデータが入力データとして取得される。第1更新制御ステップは、取得された入力データにより示される入力ベクトルの方向および大きさに基づいて第1座標の更新後の位置を決定する位置決定ステップ(S24)を含む。
第7の局面においては、位置決定ステップにおいて、入力ベクトルの大きさが所定値よりも小さいときには第1座標の値は変化しない。
第8の局面においては、第2更新制御ステップにおいて、第2座標の位置から第1座標の位置までの距離を縮小した距離だけ当該第1座標の方向へ当該第2座標の位置が移動される。
第9の局面においては、第2更新制御ステップにおいて、第2座標の位置から第1座標の位置までの距離が所定長さ(R)以下であるときには当該第2座標の値は変化しない。
第10の局面においては、第1座標および第2座標の2次元座標系には、当該2次元座標系の少なくとも一方の成分に関して、第1境界値(x=0,y=0)と、当該第1境界値に所定の加算値(W)を加算した第2境界値(x=W,y=W)とが設定されている。このとき、入力データ処理プログラムは、第1補正ステップ(S26,S27)と、第2補正ステップ(S36,S37)とをコンピュータにさらに実行させる。第1補正ステップにおいて、コンピュータは、第1更新制御ステップにおいて第1座標の値が変化された結果、当該第1座標における一方の成分の値が第1境界値よりも小さいときには、当該一方の成分の値が加算値の分だけ大きくなるように補正し、当該一方の成分の値が第2境界値よりも大きいときには、当該一方の成分の値が加算値の分だけ小さくなるように補正する。また、第2補正ステップにおいては、第2更新制御ステップにおいて第2座標の値が変化された結果、当該第2座標における一方の成分の値が第1境界値よりも小さいときには、当該一方の成分の値が加算値の分だけ大きくなるように補正し、当該一方の成分の値が第2境界値よりも大きいときには、当該一方の成分の値が加算値の分だけ小さくなるように補正する。さらに、第2更新制御ステップにおいては、第1補正ステップによる第1座標の補正が実行され、かつ、当該第1座標の補正が実行された結果実行される第2座標の補正がまだ実行されていないときには、補正前の第1座標と第2座標とに基づいて第2座標の位置が移動される。
第11の局面においては、入力データ処理プログラムは、モード切替ステップ(S4)をコンピュータにさらに実行させる。モード切替ステップにおいては、コンピュータは、少なくとも取得ステップ、第1更新ステップ、第2更新ステップ、および表示制御ステップを繰り返し実行する第1のモードと、第1のモードとは異なる第2のモードとを切り替える。このとき、記憶ステップにおいては、第2のモードから第1のモードへ切り替わったときには第1座標および第2座標が同じ値に設定されてメモリに記憶される。
第12の局面においては、入力データは、入力面に対して入力が行われた位置(入力位置)を示す。このとき、第1更新制御ステップにおいては、第1座標の値は、取得された入力データにより示される位置に対応する所定の平面上の位置を表す座標値に更新される。
第13の局面においては、入力データは、入力面に対して入力が行われた位置を示すものであってもよい。このとき、第1更新制御ステップにおいては、入力データにより示される位置を表す座標を所定の関数を用いて変換することによって第1座標の値が算出される。入力データ処理プログラムは、入力装置に対する入力が中断した後で当該入力が再度行われたとき、再度の入力が行われた時点における入力データにより示される位置を、入力が中断する直前の第1座標の位置に変換するように所定の関数を変更する関数変更ステップをコンピュータにさらに実行させる。
第14の局面は、入力面に対する入力状態を検出する入力装置(タッチパッド7)と表示装置(テレビ6)とを備える情報処理装置(ゲーム装置2)である。情報処理装置は、記憶手段(S9を実行するCPU11等。以下、単にステップ番号のみを示す。)と、取得手段(S2)と、第1更新制御手段(S24)と、第2更新制御手段(S35)と、表示制御手段(S11)とを備える。記憶制御手段は、所定の平面上の位置を表す第1座標および第2座標の値を情報処理装置のメモリ(メインメモリ17)に記憶する。取得手段は、入力面に対する入力状態を示す入力データを入力装置から繰り返し取得してメモリに記憶する。第1更新制御手段は、メモリに記憶された入力データに基づいて第1座標の更新を制御する。第2更新制御手段は、第1座標の値が変化したか否かにかかわらず入力データが取得される度に、第2座標の位置が第1座標の位置に近づくように当該第2座標の値を更新する。表示制御手段は、第2座標の更新が実行される度に、第2座標の更新前の位置を始点としかつ更新後の位置を終点とする出力ベクトルの向きおよび大きさに基づいて、表示装置に表示されている画像の一部または全部を移動させて表示させる。
第15の局面は、操作データに応じて所定のデータ処理を実行する情報処理装置に接続可能な入力装置である。入力装置は、記憶手段と、検出手段(タッチパッド7)と、第1更新制御手段と、第2更新制御手段と、表示制御手段とを備える。記憶制御手段は、所定の平面上の位置を表す第1座標および第2座標の値をメモリに記憶する。検出手段は、入力面に対する入力状態を示す入力データを繰り返し検出してメモリに記憶する。第1更新制御手段は、メモリに記憶された入力データに基づいて第1座標の更新を制御する。第2更新制御手段は、第1座標の値が変化したか否かにかかわらず入力データが取得される度に、第2座標の位置が第1座標の位置に近づくように当該第2座標の値を更新する。算出手段は、第2座標の更新が実行される度に、第2座標の更新前の位置を始点としかつ更新後の位置を終点とする出力ベクトルを算出し、操作データとして情報処理装置へ出力する。
第1の局面によれば、第2座標の位置は、第1座標の位置が変化したか否かとは無関係に、第1座標の位置に近づく移動を繰り返す。したがって、第1座標の位置が移動しない場合でも第2座標の位置は移動する。その結果、最終的には第1座標の移動距離と第2座標の移動距離とは同じになる。これによって、プレイヤが入力面に対して行った入力の長さに応じた距離だけ第2座標の位置を移動させることができる。第2座標の移動量が画像の移動量に対応するので、これによって、入力の長さに応じた距離だけ画像を移動させることができる。そのため、プレイヤは、自己の操作に対する画像の移動量を、入力を行った長さによってイメージすることができる。したがって、ポインティングデバイスを用いて画面に表示されている画像を変化させる操作を行う場合において、操作者が不自然な印象を受けることを解消することができ、当該操作の操作性を向上することができる。
第2の局面によれば、操作者がタッチオフした(入力面から指等を離した)ことによって第1座標の移動が停止する。ただし、このときでも第2座標の移動は継続して行われるので、第2座標の位置が第1座標の位置に追いつく前に操作者がタッチオフした場合であっても、最終的には、第1座標の移動距離と第2座標の移動距離とは同じになる。したがって、第2座標の位置が第1座標の位置に追いつく前に操作者がタッチオフした場合でも、操作者が不自然な印象を受けることを防止することができる。
ここで、操作者が同じ操作を複数回繰り返して行う場合を考える。例えば、入力面上において左から右へ軌跡を描く操作を繰り返して行う場合を考える。この場合において、第1座標の位置を入力位置に対応する位置に移動させる方法を用いたとすると、タッチオフした後で再度タッチオンした場合、タッチオフした時点の第1座標の位置とタッチオンした時点の第1座標の位置が別の位置になってしまう。タッチオフされる位置は入力面の右側であり、タッチオンされる位置は入力面の左側であるからである。このとき、第2座標の位置をタッチオフ時の位置のままにすると、第1座標を追従する第2座標については、タッチオフ前には右方向に移動していたにもかかわらず、タッチオン後には左方向に移動することになる。つまり、第2座標の移動方向が逆になってしまい、タッチオン後の移動方向は操作者が意図しない方向となってしまう。また、これを防止するためには、タッチオフ後の再度のタッチオン時には、第2座標の位置を第1座標の新たな位置に設定し直すことが考えられる。しかし、これによれば、再度のタッチオン時における出力ベクトルの大きさが0になってしまうので、再度のタッチオン時に画像の移動が停止してしまい、操作者に不自然な操作感覚を与えてしまう。以上のように、第1座標の位置を入力位置に基づいて移動させる方法では、再度のタッチオンされると、タッチオフ前の第1座標の位置をリセットしなければならなくなることから、操作者に不自然な操作感覚を与えてしまう。
上記方法(第1座標の位置を入力位置に対応する位置に移動させる方法)に対して、第3の局面によれば、操作者がタッチオフした後で再度タッチオンした(入力面に指等を接触させる)場合であっても、第1座標の値は変化しない。したがって、タッチオフ後にタッチオンが行われた場合でも、第1座標の値はタッチオフ前の値と異なる値にはならない。そのため、タッチオン後の移動方向が操作者の意図しない方向となることや、画像の移動が急に停止してしまうことを防止することができる。
また、上記方法に対して、第4の局面によれば、仮想の平面上に第1座標および第2座標を設けることによって、入力面の位置と第1および第2座標の位置とを独立して表す。そして、タッチオフされた後で再度タッチオンされた場合には、タッチオフ直前における第1座標の値と、タッチオン後における第1座標の値とを同じにする。これによって、タッチオン後の移動方向が操作者の意図しない方向となることや、画像の移動が急に停止してしまうことを防止することができる。
また、上記方法に対して、第5の局面によれば、入力位置そのものではなく、入力ベクトルに基づいて第1座標を移動させるので、タッチオフ後に再度タッチオンがなされた場合でも、タッチオフ時の第1座標の位置を継続して用いることができる。そのため、タッチオフ後に再度タッチオンが行われた場合でも、出力ベクトルがタッチオフ前と逆方向になったり、画像の移動が急に停止してしまうことがない。つまり、画像の移動について操作者に不自然な印象を与えることがない。さらに、第2座標が第1座標を追従して移動することについては変わらないので、この場合も、最終的には、第2座標の移動距離と第2座標の移動距離とを同じにすることができる。
また、第6の局面によれば、第5の局面と同様、入力位置そのものではなく、入力ベクトルに基づいて第1座標を移動させるので、タッチオフ後に再度タッチオンがなされた場合でも、タッチオフ時の第1座標の位置を継続して用いることができる。したがって、第5の局面と同様、画像の移動について操作者に不自然な印象を与えることがない。また、第6の局面によれば、情報処理装置が入力ベクトルを算出する処理を実行する必要がないので、情報処理装置の処理負荷を軽減することができる。
なお、操作者が入力面上の1点をタッチしている場合であっても、入力装置によって実際に検出される入力位置が若干移動してしまうことがある。このような場合には、微少な大きさの入力ベクトルが算出される結果、画像が微少な距離だけ移動することになり、操作者の意図しない移動が行われてしまう。これに対して、第7の局面によれば、入力ベクトルの大きさが微少である場合には第1座標の位置は移動しないので、操作者が入力面上の1点をタッチしている場合には画像の移動が行われない。したがって、操作者が意図しない操作によって画像が移動することを防止することができる。
第8の局面によれば、第2座標の1回の移動距離を、第2座標の位置から第1座標の位置までの距離を縮小した距離として容易に算出することができる。また、縮小する度合いを変化させることで、第2座標が第1座標を追従する度合いを容易に変化させることができる。
第9の局面によれば、第1座標と第2座標との距離がある程度の距離(所定長さ以下の距離)になった時点で、第2座標が第1座標に到達したと見なされる。ここで、第2座標が第1座標に到達する寸前の時点では、第2座標の1回の移動距離は非常に小さくなっている。したがって、このような第2座標の移動を行わないようにしても操作者に不自然な印象を与えることはないと考えられ、むしろ、微少な距離だけ第2座標を移動させるような不要な処理は処理負荷を増大させるだけであると考えられる。そこで、第7の発明によれば、第2座標が第1座標に到達する寸前の時点における第2座標の位置を移動させる処理を省略することによって、情報処理装置の処理負荷を軽減することができる。
第10の局面によれば、第1座標および第2座標を、第1境界値から第2境界値までの範囲の値として表現することができる。つまり、無限の広がりを有する仮想平面における位置を、第1境界値から第2境界値までの範囲の値によって表現することができる。これによって、第1座標および第2座標についての計算において、大きな数の計算を実行しなくてもよくなるので、第1座標および第2座標の値のオーバーフローの危険性が無くなる。
第11の局面によれば、第1のモードに切り替わった時点では第1座標と第2座標とが同じ値に設定されるので、この時点では出力ベクトルが0となり、画像の移動が行われない。すなわち、第1のモードに切り替わった時点で画像が急に移動することがなく、モードが切り替わった際にも操作者に不自然な印象を与えることがない。
第12の局面によれば、入力面上における入力位置に基づいて第1座標の位置が移動されるので、操作者の入力をそのまま反映させて第1座標の位置を移動させることができる。したがって、操作者にとっては第1座標を直接移動させているような操作感覚で操作できるので、操作者にとって操作しやすい操作方法を提供することができる。
第13の局面によれば、入力位置を表す座標が関数によって第1座標に変換される。また、当該関数は、タッチオフ後に再度のタッチオンが行われたとき、再度のタッチオンが行われた位置と、タッチオフ直前の第1座標の位置とを対応付けるように変換される。そのため、タッチオフ後に再度のタッチオンが行われた場合でも、第1座標の位置をタッチオフ直前の位置に設定することができるので、タッチオン後の移動方向が操作者の意図しない方向となることや、画像の移動が急に停止してしまうことを防止することができる。
また、第14および第15の局面によれば、第1の局面と同様の効果を得ることができる。
図1は、本発明の一実施形態に係る情報処理装置の一例であるゲームシステムの構成を示す外観図であり、図2はそのブロック図である。図1および図2に示すように、ゲームシステム1は、ゲーム装置2、光ディスク3、メモリカード4、コントローラ5、テレビ6(図2に示すスピーカ25を含む)を備える。光ディスク3およびメモリカード4は、ゲーム装置2に着脱自在に装着される。コントローラ5は、ゲーム装置2に設けられる複数(図1では、4つ)のコントローラポート用コネクタのいずれかに接続される。コントローラ5は複数の操作部を有し、具体的には、第1のタッチパッド7a、第2のタッチパッド7b、スタートボタン8a、セレクトボタン8b、Lボタン8c、およびRボタン8dを含む。また、他の実施形態においては、ゲーム装置2とコントローラ5との通信は、通信ケーブルを用いずに無線通信によって行われてもよい。また、テレビ6およびスピーカ25は、AVケーブル等によってゲーム装置2に接続される。なお、本発明は図1に示すような据え置き型のゲーム装置に限らず、携帯型のゲーム装置であってもよいし、業務用のゲーム装置であってもよいし、携帯電話やパソコン等、プログラムを実行することができる装置であってもよいことはもちろんである。以下、図2を参照しながら、本発明に係るゲームシステムにおける各部を詳細に説明するとともに、ゲームシステムにおける一般的な動作を説明する。
外部記憶媒体の一例である光ディスク3は、例えばDVD−ROMであり、本発明に係るプログラムの一例であるゲームプログラムやキャラクタデータ等のゲームに関するデータを固定的に記憶している。プレイヤがゲームを行う場合、光ディスク3はゲーム装置2に装着される。なお、ゲームプログラム等を記憶する手段は、DVD−ROMに限らず、例えばCD−ROM、MO、メモリカード、ROMカートリッジ等の記憶媒体であってもよい。ゲームプログラム等は、ゲーム装置本体内のメモリやハードディスク等の記憶手段に記憶されるようにしてもよく、この場合、通信によりゲームプログラムをダウンロードするようにしてもよい。メモリカード4は、例えばフラッシュメモリ等の書き換え可能な記憶媒体によって構成され、例えばゲームにおけるセーブデータ等のデータを記憶する。
ゲーム装置2は、光ディスク3に記録されているゲームプログラムを読み出し、ゲーム処理を行う。コントローラ5は、プレイヤがゲーム操作に関する入力を行うための入力装置である。コントローラ5は、プレイヤによるタッチパッド7aおよび7bの操作や各操作ボタン8a〜8dの押圧操作や後述するスイッチ(図示しない)の押圧操作に応じて操作データをゲーム装置2に出力する。複数のプレイヤによってゲームを行う場合、コントローラ5はプレイヤの数だけ設けられる。テレビ6は、ゲーム装置2から出力された画像データを画面に表示する。また、スピーカ25は、典型的にはテレビ6に内蔵されており、ゲーム装置2から出力されたゲームの音声を出力する。
前述のように、コントローラ5は、その主面の左右両側に1つずつ、計2つのタッチパッド7aおよび7bを有する。なお、2つのタッチパッド7aおよび7bは同じ構成であり、以下では、2つのタッチパッド7aおよび7bを特に区別しない場合、単に「タッチパッド7」と記載する。タッチパッド7としては、例えば抵抗膜方式や光学式(赤外線方式)や静電容量結合式など、任意の方式のものを利用することができる。タッチパッド7は、その入力面にプレイヤの指等が触れると、接触位置(入力位置)に対応する座標データ(入力座標データ)を出力する。タッチパッド7は、所定のサンプリング時間毎に入力位置を検出して入力座標データを出力する。入力座標データは、操作データとしてコントローラ5からゲーム装置2に出力される。ここでは、所定のサンプリング時間を画面表示のフレーム時間と同じであるとする。なお、タッチパッド7は、入力座標データを出力するものであればどのようなものであってもよい。例えば、タッチパッド7は、プレイヤの指等が入力面に接触している面積を示すデータを上記入力座標データとともにゲーム装置2に出力してもよいし、入力位置の移動速度(後述する入力ベクトル)を検出して出力してもよい。また、本実施形態においては、タッチパッド7の入力面は、押下可能なようにバネ等で支持されており、タッチパッド7の裏面にはそれぞれスイッチ(図示せず)が設けられる。プレイヤは、タッチパッド7の入力面を押下することによってスイッチを押下することができる。
なお、以上に説明したコントローラ5は、本発明において用いられる入力装置の一例であり、入力装置は、入力面上における入力位置を検出することが可能なポインティングデバイスであればどのようなものであってもよい。例えば、入力装置は、タッチパッドを1つのみ備える構成であってもよいし、タッチパッドに代えてタッチパネルを備える構成であってもよい。
次に、ゲーム装置2の構成について説明する。図2において、ゲーム装置2内には、CPU11およびそれに接続されるメモリコントローラ20が設けられる。さらに、ゲーム装置2内において、メモリコントローラ20は、グラフィックスプロセッシングユニット(GPU)24と、メインメモリ17と、デジタル信号処理回路(DSP)36と、各種インターフェース(I/F)21〜26とに接続される。また、DSP18を介してサブメモリ19と接続される。メモリコントローラ20は、これら各構成要素間のデータ転送を制御する。
ゲーム開始の際、まず、ディスクドライブ27は、ゲーム装置2に装着された光ディスク3を駆動する。光ディスク3に記憶されているゲームプログラムは、ディスクI/F26およびメモリコントローラ20を介して、メインメモリ17に読み込まれる。メインメモリ17上のプログラムをCPU11が実行することによって、ゲームが開始される。ゲーム開始後、プレイヤは、各タッチパッド7aおよび7bや各操作ボタン8a〜8dや上記スイッチを用いてコントローラ5に対してゲーム操作等の入力を行う。プレイヤによる入力に従い、コントローラ5は、操作データをゲーム装置2に出力する。コントローラ5から出力される操作データは、コントローラI/F21およびメモリコントローラ20を介してCPU11に入力される。CPU11は、入力された操作データに応じてゲーム処理を行う。ゲーム処理における画像データ生成等に際して、GPU12やDSP18が用いられる。また、サブメモリ19は、DSP18が所定の処理を行う際に用いられる。
GPU12は、ジオメトリユニット13およびレンダリングユニット14を含み、画像処理専用のメモリに接続されている。この画像処理専用メモリは、例えばカラーバッファ15およびZバッファ16として利用される。ジオメトリユニット13は、仮想3次元空間であるゲーム空間に置かれた物体や図形に関する立体モデル(例えばポリゴンで構成されるオブジェクト)の座標についての演算処理を行うものであり、例えば立体モデルの回転・拡大縮小・変形や、ワールド座標系の座標から視点座標系やスクリーン座標系の座標への変換を行うものである。レンダリングユニット14は、所定のテクスチャに基づいて、スクリーン座標に投影された立体モデルについてピクセル毎のカラーデータ(RGBデータ)をカラーバッファ15に書き込むことによって、ゲーム画像を生成する。また、カラーバッファ15は、レンダリングユニット14によって生成されたゲーム画像データ(RGBデータ)を保持するために確保されたメモリ領域である。Zバッファ16は、3次元の視点座標から2次元のスクリーン座標に変換する際に視点からの奥行情報を保持するために確保されたメモリ領域である。GPU12は、これらを用いてテレビ6に表示すべき画像データを生成し、適宜メモリコントローラ20およびビデオI/F22を介してテレビ6に出力する。なお、ゲームプログラム実行時にCPU11において生成される音声データは、メモリコントローラ20からオーディオI/F24を介して、スピーカ25に出力される。なお、本実施形態では、画像処理専用のメモリを別途設けたハードウェア構成としたが、これに限らず例えばメインメモリ17の一部を画像処理用のメモリとして利用する方式(UMA:Unified Memory Architecture)を使うようにしてもよい。ゲーム装置2は、ゲームプログラムを実行することにより生成したゲームデータをメモリコントローラ20およびメモリI/F23を介してメモリカード4に転送する。また、ゲーム装置2は、ゲーム開始に先立って、メモリカード4に記憶されたゲームデータを、メモリコントローラ20およびメモリI/F23を介してメインメモリ17に読み込む。
次に、本実施形態に係るプログラムによってゲーム装置2において実行される処理の概要を説明する。本実施形態において、ゲーム装置2は、プレイヤによるタッチパッド7に対する入力に基づいて表示制御処理を実行する。表示制御処理とは、テレビ6に表示される内容を制御する処理であり、具体的には、ゲーム画面をスクロールさせる処理(画面に表示されている画像全体をスクロールさせる処理)や、画面に表示されているオブジェクトを移動させる処理である。
ここで、ゲーム装置2は、タッチパッド7への入力に基づいて出力ベクトルを算出する。ゲーム装置2は、この出力ベクトルに基づいてプレイヤによる操作内容を判断し、プレイヤによる操作に従った表示制御処理を行う。なお、本実施形態では、ゲーム装置2によって3次元の仮想ゲーム空間が構築され、テレビ6には、当該仮想ゲーム空間内に設定される仮想カメラから見た当該仮想ゲーム空間の画像が表示される。本実施形態に係るゲーム装置2は、上記表示制御処理として、出力ベクトルに応じて仮想カメラの視線方向を変化させる処理を実行する。
図3および図4は、本実施形態における表示制御処理の例を示す図である。図3に示す仮想ゲーム空間が画面に表示されていた状態において、例えば、タッチパッド7上で左から右へ軌跡を描く入力をプレイヤが行ったとする。このとき、ゲーム装置2は、右方向を向く出力ベクトルを算出し、テレビ6の画面に表示されている仮想ゲーム空間の画像全体を左方向へ移動させる(画面を右方向へスクロールさせる)(図4)。すなわち、仮想ゲーム空間の画像全体を左方向へ移動させるように仮想カメラの視線方向を変化させる(図4)。なお、本実施形態では、表示制御処理として画像全体をスクロールさせる処理を実行する場合を例として説明するが、表示制御処理は、画面に表示されている画像中のオブジェクトを移動させる処理であってもよい。プレイヤによって操作されるプレイヤキャラクタが画面に表示される場合には、表示制御処理は、当該プレイヤキャラクタを仮想ゲーム空間内で移動させる処理であってもよい。
次に、出力ベクトルの算出方法について図5〜図8を用いて説明する。図5は、タッチパッド7に対する入力の一例を示す図である。タッチパッド7に対する入力を行う際、プレイヤは、タッチパッド7の入力面上で軌跡を描くように入力を行う。本実施形態のように仮想カメラの視線方向を移動させる操作をタッチパッド7を用いて行う場合、典型的には、プレイヤは直線状の軌跡を入力面上に描くと考えられる。ただし図5および図7では、後述する目標点および追従点の移動の様子を見やすくする目的で、曲線状の軌跡が描かれた場合を例として示している。
タッチパッド7は、所定のサンプリング時間間隔で入力位置を検出する。例えば図5において、プレイヤが点線で示す軌跡を描いた場合、タッチパッド7は、入力位置として、位置P1’、P2’、P3’、およびP4’を順に連続して検出する。入力位置の座標(入力座標)を示すデータは、入力位置が検出される度にコントローラ5からゲーム装置2へ出力される。ゲーム装置2は、出力された入力座標の位置と前回に出力された入力座標の位置との差を示すベクトルを算出する。以下、このベクトルを入力ベクトルと呼ぶ。入力ベクトルは、前回に検出された入力位置を始点とし、最後に検出された入力位置(最新の入力位置)を終点とするベクトルである。換言すれば、入力ベクトルは、入力面上を入力位置が移動する速度を示す。図5の例においては、入力位置P2’が検出されたとき、入力ベクトルとしてベクトルVi1’が算出される。また、入力位置P3’が検出されたとき、入力ベクトルとしてベクトルVi2’が算出され、入力位置P4’が検出されたとき、入力ベクトルとしてベクトルVi3’が算出される。なお、上記入力位置を示す入力座標および入力ベクトルは、タッチパッド7の入力面上の位置を表すための座標系によって表現される。ここでは、入力面上の座標系をx’y’座標系と表す。
なお、他の実施形態においては、タッチパッド7が入力位置の移動速度(すなわち、入力ベクトル)を検出することが可能である場合には、入力ベクトルを示すデータが操作データとしてタッチパッド7からゲーム装置2へ出力されてもよい。この場合、ゲーム装置2は、入力位置から入力ベクトルを算出する処理を実行する必要がない。
図6は、仮想平面の一例を示す図である。仮想平面とは、出力ベクトルを算出するためにゲーム装置2が設定する仮想の平面である。本実施形態では、仮想平面は有限の大きさを有しているとする。仮想平面上には、出力ベクトルを算出するために用いられる目標点および追従点が設定される。目標点は、上記入力ベクトルの大きさおよび向きに基づいて移動される点である。追従点は、目標点を追従するように移動される点である。図6に示すように、目標点および追従点は、最初は同じ位置に設定される。目標点および追従点の位置を表す座標系(xy座標系)は、タッチパッド7の入力面上の位置を表す座標系と同じであってもよいし、異なる座標系であってもよい。なお、ここでは、xy座標系とx’y’座標系とは同じ座標系であるとし、xy座標系のx軸がx’y’座標系のx’軸に対応し、xy座標系のy軸がx’y’座標系のy’軸に対応するものとする。
図6は、図5に示した入力が行われた場合における目標点および追従点の移動の様子を示している。なお、図6においては、目標点を白丸で示し、追従点を黒丸で示している。初期状態においては、目標点の初期位置P1および追従点の初期位置Q1は同じ位置である。目標点および追従点の位置は、入力位置が検出されて入力ベクトルが算出される度に更新される。目標点は、入力ベクトルの向きに対応する方向に、入力ベクトルの大きさに基づいた距離だけ移動される。具体的には、目標点は、入力ベクトルに基づいて算出される目標移動ベクトルにより示される距離および方向に移動される。なお、後述する詳細なゲーム処理(図9〜図12参照)においては、入力ベクトルの大きさの変化を緩和するように目標移動ベクトルが算出されるが、図5〜図8においては、説明をわかりやすくする目的で、入力ベクトルと目標移動ベクトルとは同じであるとする。
例えば図6において、入力位置P2’が検出されて入力ベクトルVi1’が算出されたとき、位置P1にある目標点は、入力ベクトルVi1’に基づいて算出される目標移動ベクトルVi1により示される距離および方向に移動される結果、位置P2に移動される。さらに、位置Q1にある追従点は、目標点に追従するように位置Q1から位置P2の方向へ移動される結果、追従点は位置Q2に移動される。つまり、追従点の移動先の位置は、位置Q1と位置P2との間の位置となる。
出力ベクトルは、前回の追従点の位置を始点とし、現在の追従点の位置を終点とするベクトルとして算出される。つまり、出力ベクトルは、追従点の速度を示すベクトルである。例えば図6において、入力位置P2’が検出されて入力ベクトルVi1’が算出されたとき、追従点はQ1からQ2に移動されるので、このときの出力ベクトルは、位置Q1を始点とし位置Q2を終点とするベクトルVo1となる。
また例えば、入力位置P3’が検出されて入力ベクトルVi2’が算出されたとき、位置P2にある目標点は、入力ベクトルVi2’に基づいて算出される目標移動ベクトルVi2により示される距離および方向に移動される結果、位置P3に移動される。さらに、位置Q2にある追従点は、目標点に追従するように位置Q2から位置P3の方向へ移動される結果、位置Q3に移動される。このとき、出力ベクトルは、位置Q2を始点とし位置Q3を終点とするベクトルVo2となる。同様に、入力位置P4’が検出されて入力ベクトルVi3’が算出されたとき、位置P3にある目標点は位置P4に移動され、位置Q3にある追従点は位置Q4に移動される。その結果、出力ベクトルは、位置Q3を始点とし位置Q4を終点とするベクトルVo4となる。
上記のように本実施形態では、ゲーム装置2は、入力位置の移動速度を示す入力ベクトルに基づいて目標点を移動し、目標点を追従するように移動される追従点の速度を示す出力ベクトルを算出する。これによって、入力ベクトルの大きさおよび向きに急激な変化があった場合でも、出力ベクトルではこのような急激な変化が緩和されることになる。ゲーム装置2は、この出力ベクトルを用いて仮想カメラの視線方向を移動することによって、仮想カメラの視線方向が急激に変化することを防止することができる。すなわち、仮想カメラの視線方向が急激に変化することによって、画面が急にスクロールしたり、スクロールしていた画面が急に停止したりすることを防止することができる。したがって、画面の急激な移動によってプレイヤが不快さを感じることを防止することができる。
次に、目標点および追従点の移動動作について図7および図8を用いて詳細に説明する。図7および図8は、目標点および追従点が移動する様子をフレーム毎に示す図である。なお、本実施形態では、タッチパッド7における入力位置の検出が1フレーム毎に行われ、目標点および追従点の移動は1フレーム毎に行われるものとする。また、図7および図8では説明を容易にする目的で、目標点および追従点が1次元の直線上を移動するものとして説明する。
まず、タッチパッド7に対する入力が最初に検出されたフレーム(1フレーム目)では、目標点および追従点はそれぞれ初期位置P1およびQ1に設定される。なお、1フレーム目の時点では追従点が移動していないので、出力ベクトルは0である。
2フレーム目では、目標点が位置P2に移動したとする。位置Q1にある追従点は、位置P2の方向へ移動される。ここで、追従点の移動距離は、位置Q1と位置P2との距離(位置Q1から位置P2までのベクトル)Vm1に基づいて算出される。具体的には、追従点は、位置Q1と位置P2との距離に所定の定数Sを積算した距離だけ移動される。つまり、追従点の移動距離、すなわち、出力ベクトルVo1の大きさは、ベクトルVm1に当該所定の定数Sを積算することによって算出される。この所定の定数は、追従点が目標点を追従する度合いを表すので、以下では、当該所定の定数を「追従度」と呼ぶ。なお、追従度Sは、0<S<1である。したがって、出力ベクトルVo1はベクトルVi1より小さくなるので、入力ベクトルの大きさの変化が出力ベクトルでは緩和され、入力開始時の急激な速度変化を緩和することができることがわかる。
3フレーム目以降でも2フレーム目と同様に目標点および追従点が移動される。すなわち、n(nは2以上の整数)フレーム目における追従点の移動距離Vo(n)は、n−1フレーム目における追従点の位置と、nフレーム目における目標点の位置との距離Vm(n)に基づいて決定される。
図7および図8では、5フレーム目でタッチパッド7に対する入力がなくなったものとする。このとき、ゲーム装置2は目標点を移動しない。つまり、4フレーム目における目標点の位置がそのまま維持され、目標点は初期位置に戻らない。一方、追従点は、2フレーム目以降と同様に移動される。つまり、5フレーム目においても追従点は位置Q4から位置Q5まで移動する。したがって、出力ベクトルVo4は、0ではない大きさを有する。
なお、6フレーム目以降においても、追従点は5フレーム目と同様に移動する。そして、追従点は、実質的に目標点に追いついたと判断された時点で移動を停止する。ゲーム装置2は、追従点から目標点までの距離Vm(n)が、予め定められた所定の距離(後述する到達領域の半径R)以内になった場合、「追従点が実質的に目標点に追いついた」と判断する。すなわち、目標点から所定の距離以内に追従点が位置する場合、追従点は移動されない。
図7に示したように、本実施形態においては、タッチパッド7に対する入力がなくなった後のフレームにおいても、出力ベクトルが0でない大きさとなる結果、画面のスクロールが続けられる。つまり、画面のスクロールは、タッチパッド7に対する入力がなくなってからしばらくの間(追従点が目標点に追いつくまでの間)続行され、次第にスクロールの速度が遅くなりながら最後にスクロールが停止する。これによって、入力終了時に入力ベクトルの大きさが急激に変化する場合であっても、画面のスクロールの速度が急激に変化することを防止することができる。
なお、入力終了時に入力ベクトルの大きさが急激に変化することを防止するためには、目標点が停止した後も追従点を移動させる方法の他に、入力終了時における出力ベクトルの大きさを単に小さくし(例えば、0<a<1である定数aを入力ベクトルに乗算する)、目標点が停止したことに応じて追従点を停止する方法も考えられる。例えば、図4の例で言えば、ベクトルVo3の大きさを小さくするように調整するのである。
しかし、この方法では、目標点の総移動量(図7に示す位置P1から位置P4までの距離)と、追従点の総移動量(位置Q1から位置Q4までの距離)とが、等しくならない。目標点の総移動量と追従点の総移動量とは比例しないので、プレイヤによる軌跡の描き方(軌跡を描いた速度等)によって、追従点の総移動量が目標点の総移動量に近い値になったり、大きく異なる値になったりする。したがって、プレイヤが同じ長さの軌跡をタッチパッド7上に描いたとしても、軌跡を描いた速度や1フレーム毎の速度の変化量によって、追従点の移動量、すなわち、画面のスクロール量が異なってしまう。そのため、プレイヤは、自分が描いた直線の長さによって画面のスクロール量をイメージすることができず、プレイヤが思っていたよりも画面がスクロールしなかったり、逆に、思っていたよりも画面がスクロールしすぎたりすることになる。このとき、プレイヤは、画面のスクロールに不自然な印象を受け、操作性が悪いと感じる。
そこで、本実施形態では、目標点の移動が停止した後も追従点を移動するようにしている。これによって、入力ベクトルに基づいて移動する目標点の総移動距離と、出力ベクトルを算出する元になる追従点の総移動距離とは、ほぼ同じになる。したがって、タッチパッド7の入力面上に描かれた軌跡の長さに応じた距離だけ目標点を移動させるようにすれば、追従点の総移動距離、すなわち、出力ベクトルの総和は、当該軌跡の長さに応じて決まることになる。これによって、プレイヤが描いた直線の長さと、画面がスクロールする距離とを比例させることができる。例えば、プレイヤがタッチパッド7上に所定長さの直線を描いたことによる画面のスクロール量は、当該所定長さの半分の長さの直線を描いたことによる画面のスクロール量の約2倍となる。プレイヤは、自分が描いた直線の長さによって画面のスクロール量をイメージすることができるので、プレイヤが思っていたよりも画面がスクロールしなかったり、逆に、思っていたよりも画面がスクロールしすぎたりすることを防止することができる。つまり、プレイヤが不自然な印象を受けることを防止し、プレイヤに快適な操作性を提供することができる。
次に、プレイヤが一旦タッチオフした(タッチパッド7から指等を離した)後で再度タッチオン(タッチパッド7に触れる)する状況を考える。例えば、プレイヤが画面を大きくスクロールさせる場合にこのような状況が起こると考えられる。例えば、画面を右方向に大きくスクロールさせる操作をプレイヤが行う場合を考える。この場合、プレイヤは、タッチパッド7上において左から右に延びる軌跡を描く操作を行う。ただし、1回の当該操作による画面のスクロール量は決まっているので、1回の操作で所望のスクロール量が得られない場合、プレイヤは当該操作を複数回連続して行う。この場合、プレイヤは、1回の上記操作が完了したことによってタッチオフした直後に、再度同じ操作を行うためにタッチオンする。本実施形態では、このようなタッチオフ直後に再度タッチオンする場合においても、画面をスムーズにスクロールさせることができる。以下、タッチオフ後に再度タッチオンする場合における目標点および追従点の動作について説明する。
図8は、目標点および追従点が移動する様子をフレーム毎に示す図である。図8は、図7において5フレーム目でプレイヤがタッチオフした後、8フレーム目で再度タッチオンを行った場合の移動の様子を示す図である。
プレイヤがタッチオフしている間のフレーム(5フレーム目〜7フレーム目)では、上述のように、目標点の位置はそのまま維持される。すなわち、目標点は位置P4の位置にある。さらに、プレイヤが再度タッチオンする8フレーム目では、入力ベクトルは0であるので、8フレーム目においても目標点は移動しない。一方、追従点は5フレーム目〜8フレーム目の間も移動し続け、8フレーム目の時点では位置Q8にある。
次の9フレーム目において、目標移動ベクトルVi8が算出された結果、位置P4にあった目標点は位置P9に移動される。このとき、追従点は、現在の位置Q8から目標点の位置P9までを結ぶベクトルVm8に基づいて移動される。すなわち、追従点は、位置Q8と位置P9との距離に上記追従度Sを積算した距離だけ移動される。10フレーム目以降については、9フレーム目の場合と同様に目標点および追従点の移動が行われる。
以上のように、本実施形態においては、タッチオフ後に再度タッチオンされた場合であっても、目標点の位置はタッチオフ前の位置が継続して用いられる。また、追従点は、タッチオフ中であるかタッチオン中であるかにかかわらず、目標点を追従するように移動される。
ここで、仮に、タッチオフ後に再度タッチオンされた場合に目標点および追従点の位置をリセットする(初期位置に移動する)ようにした場合を考える。この場合、タッチオンされた時点における出力ベクトルは0になる。したがって、タッチオンされた時点で追従点が目標点に追いついていない場合には、画面のスクロールが急に停止してしまう。これによって、画面を自然にスクロールさせることができなくなる。また、タッチオンされる直前のフレームまでに追従点が目標点に追いついていない場合には、目標点の総移動距離と追従点の総移動距離とが異なることになる。そのため、プレイヤが思っていたよりも画面がスクロールしなくなるので、プレイヤは画面のスクロールに対して不自然な印象を受けてしまう。
一方、本実施形態においては、目標点および追従点についてタッチオフ前の位置が継続されるので、追従点が目標点に追いついていない場合にはタッチオン時における出力ベクトルは0にならない。したがって、タッチオン時に画面のスクロールが急に停止することがない。また、タッチオフおよびタッチオンが複数回繰り返されても、最終的な総移動距離は目標点と追従点とでほぼ同じになるので、プレイヤが画面のスクロールに対して不自然な印象を受けることがない。
なお、本実施形態では、タッチパッド7を用いて仮想カメラの視線方向を移動させるモード(第1モード)と、それ以外のモード(第2モード:例えば、仮想ゲーム空間に登場するプレイヤキャラクタをプレイヤによる操作に従って移動させるモード)とが用意されている。例えば、ゲームモードが第2モードに設定されている場合、仮想ゲーム空間内のプレイヤキャラクタが画面に表示されるように仮想カメラが設定され、プレイヤキャラクタが移動する様子を仮想カメラで撮像して画面に表示される。一方、ゲームモードが第1モードに設定されている場合、プレイヤキャラクタから仮想ゲーム空間を見た始点となるように仮想カメラの位置が切り替わる。目標点および追従点は、第2モードから第1モードへ切り替わったときにリセットされる。第1モード中においては、上述したように、タッチオフ後に再度タッチオンされた場合であっても目標点および追従点の位置はリセットされない。
次に、ゲームプログラムを実行することによってゲーム装置2において行われるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる主なデータについて図9を用いて説明する。図9は、ゲーム装置2のメインメモリ17に記憶される主なデータを示す図である。図9に示すように、メインメモリ17には、現在入力座標データ41、前入力座標データ42、入力ベクトルデータ43、入力速度データ44、目標座標データ45、追従座標データ46、距離ベクトルデータ47、2点間距離データ48、出力ベクトルデータ49、速度定数データ50、補正定数データ51、仮想平面データ52、到達領域データ53、追従度データ54、および、モードデータ55等が記憶される。なお、メインメモリ17には、図9に示すデータの他、プレイヤキャラクタに関するデータ(プレイヤキャラクタの画像データや位置データ等)やゲーム空間に関するデータ(地形データ等)等、ゲーム処理に必要なデータが記憶される。
現在入力座標データ41は、タッチパッド7によって検出された最新の入力位置を表す座標(現在入力座標)を示すデータである。タッチパッド7が検出した入力座標データは、操作データとしてコントローラ5からゲーム装置2へ出力される。ゲーム装置2のCPU11は、当該操作データに含まれる入力座標データを現在入力座標データ41としてメインメモリ17に記憶する。なお、ゲーム装置2は1フレーム毎に操作データをコントローラ5から取得して現在入力座標データ41の内容を更新する。したがって、現在入力座標データ41は、現在の入力位置(最も最近に検出された入力位置)の座標を示すことになる。なお、以下では、現在入力座標の値を(Ipx,Ipy)と表す。
また、前入力座標データ42は、タッチパッド7によって検出された前回の入力位置を表す座標(前入力座標)を示すデータである。すなわち、CPU11は、新たな座標データをコントローラ5から取得すると、取得した座標データの内容を現在入力座標データ41としてメインメモリ17に更新して記憶するとともに、更新前の現在入力座標データ41の内容を前入力座標データ42としてメインメモリ17に記憶する。なお、以下では、前入力座標の値を(Ipx’,Ipy’)と表す。
入力ベクトルデータ43は、上記入力ベクトルを示すデータである。入力ベクトルは、上記現在入力座標データ41および前入力座標データ42に基づいて算出される。なお、本実施形態では、タッチパッド7上の位置を表す座標系と、仮想平面上の位置を表す座標系とについて同じ座標系を用いる。これによって、タッチパッド7上の位置を表す座標を、仮想平面上の位置を表す座標へ変換する処理が不要になる。すなわち、上記入力ベクトルを上記目標移動ベクトルへ変換する処理が不要になる。したがって、入力ベクトルデータ43は、上記入力ベクトルを示すとともに、上記目標移動ベクトルを示すことになる。なお、以下では、入力ベクトルの値を(Ivx,Ivy)と表す。
入力速度データ44は、入力速度を示すデータである。入力速度は、入力ベクトルの時間変化を緩和するための計算(後述するステップS21およびS22)において用いられる変数である。なお、以下では、入力速度の値をIsと表す。本実施形態では、入力速度データ44は1フレーム毎に算出され、入力速度データ44の内容は1フレーム毎に更新される。なお、図示していないが、本実施形態においては、前回に算出された入力速度(更新前の入力速度。Is’と表す。)を示すデータがメインメモリ17に記憶される。
目標座標データ45は、上記目標点の位置を表す座標(目標座標)を示すデータである。また、追従座標データ46は、上記追従点の位置を表す座標(追従座標)を示すデータである。以下では、目標座標の値(2次元の座標値)を(Dpx,Dpy)と表し、追従座標の値を(Fpx、Fpy)と表す。また、距離ベクトルデータ47は、追従点から目標点までの結ぶベクトル(距離ベクトル)を示すデータである。距離ベクトルは、出力ベクトルを算出するために用いられるベクトルであり、図7および図8に示したVm(n)に相当する。以下では、距離ベクトルの値を(Lx,Ly)と表す。また、2点間距離データ48は、追従点から目標点までの距離(2点間距離)を示すデータである。すなわち、2点間距離データ48は、距離ベクトルの大きさを示す。以下では、2点間距離の値をLと表す。
出力ベクトルデータ49は、上記出力ベクトルを示すデータである。入力ベクトルは、上記現在入力座標データ41および前入力座標データ42に基づいて算出される。以下では、出力ベクトルの値を(Fvx、Fvy)と表す。
速度定数データ50は、上記入力速度を算出する処理(後述するステップS21)に用いる定数である速度定数Apを示すデータである。補正定数データ51は、上記入力ベクトルを補正する処理(後述するステップS22)に用いる定数である補正定数Spを示すデータである。
仮想平面データ52は、仮想平面の大きさを示すデータである。仮想平面は無限の広がりを持つ平面として設定してもよいが、目標座標および追従座標の値を所定の範囲内で表すために、本実施形態では仮想平面を有限の大きさとしている。なお詳細は後述するが、仮想平面の端は逆側の端に接続されている(図13参照)。ここでは、仮想平面は正方形であるとする。したがって、仮想平面の大きさは、正方形の一辺の長さWによって表すことができる。また、仮想平面上の位置を表すための座標系は、正方形の所定の頂点に原点が位置するものとする(図13参照)。
到達領域データ53は、追従点が目標点に追いついたと判断される領域(到達領域と呼ぶ)を示すデータである。本実施形態では到達領域は目標点の位置を中心とした円形領域とする。したがって、到達領域は円形領域の半径によって表すことができる。すなわち、到達領域データ53としては、当該円形領域の半径の長さを示す値を記憶しておけばよい。ここでは、到達領域である円形領域の半径をRとする。
追従度データ54は、上記追従度Sを示すデータである。追従度Sは、0<S<1の範囲で設定される。追従度Sの値を大きくすると、目標点に対する追従点の追従性を高くすることができ、追従度Sの値を小さくすると、目標点に対する追従点の追従性を低くすることができる。
なお、上記定数(速度定数Ap、補正定数Sp、仮想平面の幅W、半径R、および追従度S)の値は、ゲームプログラムにおいて予め設定されている値をゲーム装置2が読み込んでメインメモリ17に記憶させるようにしてもよいし、ゲーム状況やプレイヤによる指示に応じて値が適宜設定されるようにしてもよい。
モードデータ55は、現在のモードを示すデータである。すなわち、モードデータ55は、上記第1モードおよび第2モードのいずれかを示す。モードデータ55の内容は、モードが切り替わる度に更新される。
次に、ゲームプログラムを実行することによってゲーム装置2において行われるゲーム処理の詳細を、図10〜図14を用いて説明する。図10は、ゲーム装置2において実行されるゲーム処理の流れを示すフローチャートである。ゲーム装置2の電源が投入されると、ゲーム装置2のCPU11は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ17等の各ユニットが初期化される。そして、光ディスク3に記憶されたゲームプログラムがメインメモリ17に読み込まれ、CPU11によって当該ゲームプログラムの実行が開始される。図10に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。なお、図10〜図12に示すフローチャートにおいては、ゲーム処理のうち、タッチパッド7への入力に基づいて上記出力ベクトルを算出する処理について詳細に示し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。
図10のステップS1において、まず、初期処理が行われる。具体的には、上記定数(速度定数Ap、補正定数Sp、仮想平面の幅W、半径R、および追従度S)の値を示す各種データ48〜53が、メインメモリ17に記憶される。さらにステップS1においては、3次元の仮想のゲーム空間が構築されるとともに、プレイヤキャラクタ等のゲーム空間に登場するキャラクタがゲーム空間に配置される。そして、初期状態のゲーム空間がテレビ6に表示される。なお、本実施形態では、初期状態においてゲームモードは第2モードに設定されているものとする。すなわち、メインメモリ17に記憶されているモードデータ55は第2モードを示す。ステップS1の初期処理によってゲームが開始され、以降のステップS2〜S12の処理ループが1フレーム毎に繰り返されることによってゲームが進行していく。
ステップS2において、コントローラ5に対してプレイヤによって行われた入力が取得される。すなわち、CPU11は、タッチパッド7aおよび7bや各ボタン8a〜8dに対する操作内容を示す操作データをコントローラ5から取得する。続くステップS3において、モードを変更する操作が行われたか否かが判定される。すなわち、CPU11は、ステップS2d取得した操作データに基づいて、モードを変更する操作(例えば、Rボタン8dを押下する操作)が行われたか否かを判定する。判定の結果、モードを変更する操作が行われたと判定される場合、ステップS4の処理が実行される。一方、モードを変更する操作が行われていないと判定される場合、ステップS4の処理がスキップされてステップS5の処理が実行される。
ステップS4においては、モードを変更する操作に応じてモードが切り替えられる。すなわち、操作前が第1モードであった場合には第2モードに切り替えられ、操作前が第2モードであった場合には第2モードに切り替えられる。CPU11は、メインメモリ17中のモードデータ55の内容を、切り替えられたモードに応じて変更する。本実施形態では、モードの切り替えに応じて仮想カメラの位置が変更される。具体的には、第1モードの場合には仮想カメラの位置はプレイヤキャラクタの頭部付近に設定され、第2モードの場合には仮想カメラの位置はプレイヤキャラクタを俯瞰する位置に設定される。ステップS4の次にステップS5の処理が実行される。
ステップS5において、現在のゲームモードが第1モードであるか否かが判定される。CPU21は、メインメモリ17中のモードデータ55を参照して、現在のゲームモードが第1モードであるか第2モードであるかを判定する。判定の結果、第1モードである場合、ステップS7〜S11の処理が実行される。一方、第2モードである場合、ステップS6の処理が実行される。
まず、第2モードにおけるゲーム処理を説明する。ステップS6において、プレイヤによるゲーム操作に基づいたゲーム処理が行われる。なお、第2モードにおけるゲーム処理はどのようなものであってもよいが、例えば、ゲーム操作に従ってプレイヤキャラクタを移動させたり、敵キャラクタが登場する場合にはプレイヤキャラクタに敵キャラクタを攻撃させたりする処理が考えられる。ステップS6の後、後述するステップS12の処理が実行される。
次に、第1モードにおけるゲーム処理を説明する。ステップS7において、ゲームモードが切り替えられた直後であるか否かが判定される。具体的には、直前に実行されたステップS3における判定が肯定であったか否かが判定される。判定の結果、ゲームモードが切り替えられた直後であると判定される場合、ステップS8の処理が実行される。一方、ゲームモードが切り替えられた直後でないと判定される場合、ステップS8の処理がスキップされてステップS9の処理が実行される。
ステップS8においては、仮想平面上における目標点および追従点が初期位置に設定される。CPU11は、メインメモリ17に記憶されている目標座標データ45および追従座標データ46の内容を、予め定められた初期位置の座標値とする。さらに、ステップS8においては、CPU11は、メインメモリ17に記憶されている現在入力座標データ41、前入力座標データ42、入力ベクトルデータ43、入力速度データ44、距離ベクトルデータ47、および出力ベクトルデータ49の内容をクリアする。ステップS8の次にステップS9の処理が実行される。
ステップS9において、ステップS2で取得された座標データが現在入力座標データ41としてメインメモリ17に記憶される。ステップS2でコントローラ5から取得される操作データにはタッチパッド7から出力される入力座標データが含まれているので、CPU11は、操作データに含まれている入力座標データの内容を現在入力座標データ41としてメインメモリ17に更新して記憶する。つまり、現在入力座標データ41の内容は、ステップS2で取得された入力座標データの内容に更新される。さらにステップS9においては、更新前における現在入力座標データ41の内容が、前入力座標データ42としてメインメモリ17に記憶される。
続くステップS10において、出力ベクトル算出処理が実行される。出力ベクトル算出処理は、ステップS2で取得された入力座標データに基づいて出力ベクトルを算出するための処理である。以下、図11〜図14を用いて出力ベクトル算出処理の詳細を説明する。
図11および図12は、図10に示す出力ベクトル算出処理(S10)の詳細な処理の流れを示すフローチャートである。出力ベクトル算出処理においては、まずステップS21において、入力座標から入力ベクトルが算出される。入力ベクトル(Ivx,Ivy)は、現在入力座標(Ipx,Ipy)と前入力座標(Ipx’,Ipy’)とを用いて算出される。すなわち、CPU11は、メインメモリ17中の現在入力座標データ41および前入力座標データ42を参照して、次の式(1)に従って入力ベクトルを算出する。
Ivx=Ipx−Ipx’
Ivy=Ipy−Ipy’ …(1)
なお、タッチパッド7に対する入力が開始されたフレーム(タッチパッド7に対する入力があったフレームであって、前回のフレームで当該入力がなかったフレーム)では、入力ベクトル(Ivx,Ivy)は(0,0)として算出される。上式(1)で算出された入力ベクトルを示すデータは、入力ベクトルデータ43としてメインメモリ17に更新して記憶される。ステップS21の次にステップS22の処理が実行される。
次のステップS22およびS23では、入力ベクトルを補正する処理が実行される。ステップS22およびS23の処理は、入力ベクトルの時間変化を緩和するように入力ベクトルが補正するための処理である。本実施形態では、目標点を追従する追従点の時間変化を出力ベクトルとすることによって入力ベクトルの時間変化を緩和するとともに、ステップS22およびS23の処理によって入力ベクトルの時間変化を緩和している。なお、他の実施形態においては、ステップS22およびS23の処理を実行せず、ステップS21で算出された入力ベクトルをそのままステップS24以降の処理に用いるようにしてもよい。
具体的には、ステップS22において、ステップS21で算出された入力ベクトルに基づいて入力速度が算出される。入力速度Isは、入力ベクトル(Ivx,Ivy)と、前回の入力速度(ステップS22で入力速度が更新される前の入力速度データ44により示される入力速度)Is’と、速度定数Apとを用いて算出される。すなわち、CPU11は、メインメモリ17中の入力ベクトルデータ43、入力速度データ44、および速度定数データ50を参照して、次の式(2)に従って入力速度を算出する。
Is=Is’+(Iv−Is’)×Ap …(2)
上式(2)において、Ivは入力ベクトル(Ivx,Ivy)の長さである。なお、上式(2)において、タッチパッド7に対する入力が開始されたフレームでは、前回の入力速度(Isx’,Isy’)は(0,0)として計算される。上式(2)で算出された入力速度を示すデータは、入力速度データ44としてメインメモリ17に更新して記憶される。
続くステップS23において、ステップS22で算出された入力速度に基づいて入力速度が補正される。入力ベクトル(Ivx,Ivy)は、ステップS22で算出された入力速度(Isx,Isy)、補正前の入力ベクトル(Ivx’,Ivy’)、および補正定数Spを用いて算出される。すなわち、CPU11は、メインメモリ17中の入力ベクトルデータ43、入力速度データ44、および補正定数データ51を参照して、次の式(3)に従って入力ベクトルを補正する。
Ivx=Ivx’×(Is×Sp+1)
Ivy=Ivy’×(Is×Sp+1) …(3)
CPU11は、メインメモリ17に記憶される入力ベクトルデータ43の値を、上式(3)で得られた値に更新する。ステップS23の次にステップS24の処理が実行される。
ステップS24において、入力ベクトルに基づいて目標点が移動される。目標点の移動後における位置を示す目標座標(Dpx,Dpy)は、移動前の目標点の位置を示す目標座標(Dpx’,Dpy’)と、入力ベクトル(Ivx,Ivy)とを用いて算出される。すなわち、CPU11は、メインメモリ17中の入力ベクトルデータ43および目標座標データ45を参照して、次の式(4)に従って目標座標の値を算出する。
Dpx=Dpx’+Ivx
Dpy=Dpy’+Ivy …(4)
上式(4)において、(Dpx’,Dpy’)は移動前の目標座標であり、式(4)の計算を行う前における目標座標データ45により示される値である。CPU11は、メインメモリ17に記憶される目標座標データ45の値を、上式(4)で得られた値に更新する。ステップS24の次にステップS25の処理が実行される。
ステップS25において、目標点が仮想平面の境界を越えたか否かが判定される。そして、目標点が仮想平面の境界を越えた場合、ステップS26において目標座標が補正される。以下、ステップS25およびS26の処理の詳細を、図13を用いて説明する。
図13は、仮想平面上を目標点が移動する様子の一例を示す図である。図13に示すように、本実施形態においては仮想平面31は正方形である。仮想平面31の位置を表すための座標系は、正方形の左下の頂点に原点が位置し、右方向をx軸正方向とし、上方向をy軸正方向とするように設定されている。仮想平面31の各辺の長さはWであるので、仮想平面のx軸方向およびy軸方向に関する範囲は0〜Wである。仮想平面31の境界は、x=0、x=W,y=0,y=Wという4つの直線で表される。
上述のように仮想平面31は有限の大きさであるので、上記ステップS24で目標点が移動されたことによって、目標点が仮想平面31の境界を越えてしまうことが考えられる。図13において、位置Paは移動前の目標点の位置であり、位置Pb’は移動後の目標点の位置である。図13では、目標点は、x=0の直線で表される境界を越えて移動している。ステップS25は、目標点が図13のように境界を越えて移動したことを検出するためのステップである。
具体的には、ステップS25においては、目標座標が仮想平面31の範囲内(0〜W)の位置を表すか否かが判定される。ステップS25の判定は、目標座標(Dpx,Dpy)および仮想平面の大きさWを用いて行うことができる。すなわち、CPU11は、メインメモリ17に記憶されている目標座標データ45および仮想平面データ52を参照して、以下の式(5)〜(8)が満たされるか否かをそれぞれ判定する。
Dpx<0 …(5)
Dpx≧W …(6)
Dpy<0 …(7)
Dpy≧W …(8)
ステップS25においては、上式(5)〜(8)のうちの少なくとも1つが満たされる場合、目標点は仮想平面31の境界を越えて移動したと判定される。一方、上式(5)〜(8)のすべてが満たされない場合、目標点は仮想平面31の境界を越えて移動していないと判定される。ステップS25の判定において、目標点は仮想平面31の境界を越えて移動したと判定される場合、ステップS26の処理が実行される。一方、目標点は仮想平面31の境界を越えて移動していないと判定される場合、ステップS26の処理がスキップされて図12に示すステップS30の処理が実行される。
ステップS26においては、仮想平面31内の座標値をとるように目標座標が補正される。図13を例にとって説明すると、目標点が移動によって仮想平面31外の位置Pb’となった場合、目標点は仮想平面31内の位置Pbに補正される。すなわち、仮想平面31の各辺には、仮想平面31と同じ座標系を有する別の仮想平面(仮の仮想平面と呼ぶ)32が接続していると考え、当該仮の仮想平面32における座標系で位置Pbを表した場合の座標値を、補正後の目標座標の座標値とする。これによって、仮想平面の境界は、逆側の境界に接続されていることとなる。なお、図13では、x=0の直線で表される境界を目標点が超えた場合を例として説明したが、他の境界を越えた場合も同様に処理することができる。
具体的には、ステップS26においては、目標座標(Dpx,Dpy)の各成分の値が適宜補正される。すなわち、CPU11は、次の条件に従って式(9)〜(12)の計算を行い、目標座標(Dpx,Dpy)を補正する。
上式(5)が満たされる場合:Dpx=Dpx’+W …(9)
上式(6)が満たされる場合:Dpx=Dpx’−W …(10)
上式(7)が満たされる場合:Dpy=Dpy’+W …(11)
上式(8)が満たされる場合:Dpy=Dpy’−W …(12)
上式(9)〜(12)において、(Dpx’,Dpy’)は補正前の目標座標である。なお、上記ステップS25において、式(5)〜(8)のうちのいずれか2つの式が満たされる場合には、式(9)〜(12)のうちで当該2つの式に対応する2つの式の計算が行われる。以上のステップS26の次にステップS27の処理が実行される。
ステップS27において、目標点の位置および追従点の位置に基づいて距離ベクトルが算出される。距離ベクトル(Lx,Ly)は、目標座標(Dpx,Dpy)および追従座標(Fpx,Fpy)を用いて算出される。すなわち、CPU11は、メインメモリ17に記憶されている目標座標データ45および追従座標データ46を参照して、次の式(13)に従って距離ベクトルを算出する。
Lx=Dpx−Fpx
Ly=Dpy−Fpy …(13)
CPU11は、メインメモリ17に記憶される距離ベクトルデータ47の値を、上式(13)で得られた値に更新する。ステップS27の次にステップS28の処理が実行される。
なお、目標点が仮想平面の境界を超えた場合、ステップS27で算出された距離ベクトルが、追従点から目標点への正しいベクトルとならない。図14は、目標点が仮想平面の境界を超えた場合における目標点および追従点を示す図である。図14に示すように、位置Paにあった目標点が仮想平面の境界を越えて位置Pbに移動した場合、ステップS27において算出される距離ベクトルは、ベクトルVaとなる。しかし、このベクトルVaは追従点から目標点への正しいベクトルではなく、正しいベクトルはVbとなるべきである。そこで、目標点が仮想平面の境界を超えた場合に距離ベクトルを補正するために、ステップS28およびS29の処理が実行される。
ステップS28においては、ステップS27で算出された距離ベクトルを補正するか否かが判定される。ここで、本実施形態では、距離ベクトルの各成分の大きさに上限値を設定しておき、仮想平面の大きさWを当該上限値の2倍よりも大きくなるように設定する。なお、距離ベクトルの各成分の大きさには上限がないが、タッチパッド7を用いた操作を実際に行う上で十分な大きさの値を上限値として設定しておけばよい。以上のように仮想平面の大きさWを設定することによって、距離ベクトルの各成分の大きさLxおよびLyが仮想平面の大きさWの半分以上の場合には、距離ベクトルの各成分の大きさのいずれかが上限値を超えているので、距離ベクトルを補正すべきと判断することができる。
具体的には、ステップS28において、CPU11は、メインメモリ17に記憶されている距離ベクトルデータ47および仮想平面データ52を参照して、以下の式(14)〜(17)が満たされるか否かをそれぞれ判定する。
Lx<−W/2 …(14)
Lx≧W/2 …(15)
Ly<−W/2 …(16)
Ly≧W/2 …(17)
ステップS28においては、上式(14)〜(17)のうちの少なくとも1つが満たされる場合、距離ベクトルを補正すると判定される。この場合、ステップS29の処理が実行される。一方、上式(14)〜(17)のすべてが満たされない場合、距離ベクトルを補正しないと判定される。この場合、ステップS29の処理がスキップされて図12に示すステップS30の処理が実行される。
ステップS29においては、ステップS27で算出された距離ベクトルの各成分の大きさが補正される。具体的には、CPU11は、次の条件に従って式(18)〜(21)の計算を行い、距離ベクトル(Lx,Ly)を補正する。
上式(14)が満たされる場合:Lx=Lx’+W …(18)
上式(15)が満たされる場合:Lx=Lx’−W …(19)
上式(16)が満たされる場合:Ly=Ly’+W …(20)
上式(17)が満たされる場合:Ly=Ly’−W …(21)
上式(18)〜(21)において、(Lx’,Ly’)は補正前の距離ベクトルである。なお、上記ステップS29において、式(14)〜(17)のうちのいずれか2つの式が満たされる場合には、式(18)〜(21)のうちで当該2つの式に対応する2つの式の計算が行われる。以上のステップS29の次に図12に示すステップS30の処理が実行される。
なお、追従点は目標点を追従するように移動するので、目標点が仮想平面の境界を越えた以降において追従点も目標点と同様に仮想平面の境界を越えて移動することになる(後述するステップS36およびS37)。ステップS29の補正処理は、目標座標の補正が実行され、かつ、当該目標座標の補正が実行された結果実行されるべき追従座標の補正がまだ実行されていない場合(すなわち、追従点が境界をまだ超えていない場合)に実行されることになる。
なお、ステップS28およびS29においては、距離ベクトルの各成分の大きさに上限値(W/2)を設け、当該各成分が上限値を超える場合に距離ベクトルを補正するようにした。ここで、他の実施形態では、目標点が仮想平面の境界を超えており、かつ、追従点が仮想平面の境界をまだ越えていないことを示すフラグを用いて、距離ベクトルを補正するか否かを判定するようにしてもよい。具体的には、ステップS25における判定結果が肯定であった場合、フラグをオンに設定する。ステップS28では、上述した判定に代えて、当該フラグがオンであるか否かを判定する。そして、フラグがオンである場合、ステップS29の処理を行う。なお、フラグは、目標点に続いて追従点が仮想平面の境界を超えた場合(後述するステップS36の判定結果が肯定であった場合)にオフに設定される。以上の処理によっても、距離ベクトルを正しい値に補正することができる。
図12に示すステップS30において、距離ベクトルを用いて追従点から目標点までの距離(2点間距離)が算出される。すなわち、CPU11は、メインメモリ17に記憶されている距離ベクトルデータ47により示される距離ベクトル(Lx,Ly)の大きさを2点間距離Lとして算出する。算出された2点間距離Lを示すデータは、2点間距離データ48としてメインメモリ17に記憶される。
続くステップS31において、追従点が上記到達領域内に位置するか否かが判定される。到達領域は、目標点を中心とした半径Rの円形領域である。したがって、ステップS31の判定は、ステップS30で算出された2点間距離Lが到達領域の半径R以下であるか否かによって行うことができる。すなわち、CPU11は、メインメモリ17に記憶されている到達領域データ53および2点間距離データ48を参照して、L≦Rであるか否かを判定する。ステップS31の判定処理は、追従点が目標点に到達したと見なされるか否かを判定するための処理である。
ステップS31の判定において、追従点が上記到達領域内に位置すると判定される場合、ステップS32の処理が実行される。ステップS32において、出力ベクトルの値が0に設定される。すなわち、メインメモリ17に記憶されている出力ベクトルデータ49の内容は、(0,0)に更新される。ステップS32の次に、ステップS35の処理が実行される。
一方、ステップS31の判定において、追従点が上記到達領域内に位置しないと判定される場合、ステップS33およびS34の処理が実行される。ステップS33およびS34の処理は、追従点を目標点に追従するように移動させる処理である。まず、ステップS33においては、距離ベクトルの大きさが調整される。距離ベクトルの大きさは、追従点から到達領域の外周までの距離となるように調整される。調整後の距離ベクトル(Lx,Ly)は、上記2点間距離L、調整前の距離ベクトル(Lx’,Ly’)、および到達領域の半径Rを用いて算出される。すなわち、CPU11は、メインメモリ17に記憶されている距離ベクトルデータ47、2点間距離データ48、および到達領域データ53を参照して、次の式(22)に従って距離ベクトルを算出する。
Lx=Lx’×(L−R)/L
Ly=Ly’×(L−R)/L …(22)
CPU11は、メインメモリ17に記憶される距離ベクトルデータ47の値を、上式(22)で得られた値に更新する。
続くステップS34において、距離ベクトル(Lx,Ly)および追従度Sに基づいて出力ベクトル(Fvx,Fvy)が算出される。すなわち、CPU11は、メインメモリ17に記憶されている距離ベクトルデータ47および追従度データ54を参照して、次の式(23)に従って出力ベクトルを算出する。
Fvx=Lx×S
Fvy=Ly×S …(23)
CPU11は、メインメモリ17に記憶される出力ベクトルデータ49の値を、上式(23)で得られた値に更新する。このステップS34で得られた出力ベクトルに基づいて、画面に表示されている画像を移動させる処理が実行される(後述するステップS11)。ステップS34の次に、ステップS35の処理が実行される。
ステップS35においては、ステップS34で算出された出力ベクトルに従って追従点が移動される。移動後の追従点の位置を示す追従座標(Fpx,Fpy)は、移動前の追従点の位置を示す追従座標(Fpx’,Fpy’)と、ステップS32またはステップS34で算出された出力ベクトル(Fvx,Fvy)を用いて算出される。すなわち、CPU11は、メインメモリ17に記憶されている追従座標データ46および出力ベクトルデータ49を参照して、次の式(24)に従って追従座標を算出する。
Fpx=Fpx’+Fvx
Fpy=Fpy’+Fvy …(24)
CPU11は、メインメモリ17に記憶される追従座標データ46の値を、上式(24)で得られた値に更新する。ステップS35の次にステップS36の処理が実行される。
ステップS36において、追従点が仮想平面の境界を越えたか否かが判定される。ステップS36の判定処理は、判定を行う対象を目標座標に代えて追従座標とする点を除いて、目標座標が仮想平面の境界を越えたか否かを判定するステップS25の判定処理と同様である。ステップS36の判定において、追従点が仮想平面の境界を越えたと判定される場合、ステップS37において追従座標が補正される。ステップS37の処理は、補正を行う対象を目標座標に代えて追従座標とする点を除いて、目標座標を補正するステップS26の処理と同様である。一方、ステップS36の判定において、追従点が仮想平面の境界を越えていないと判定される場合、ステップS37の処理がスキップされ、CPU11は出力ベクトル算出処理を終了する。
図10の説明に戻り、ステップS10の出力ベクトル算出処理の次に、ステップS11の処理が実行される。ステップS11においては、出力ベクトルの向きおよび大きさに基づいて、テレビ6の画面に表示されている画像をスクロールさせる処理が実行される。具体的には、CPU11は、仮想カメラの視線方向を、出力ベクトルの向きに対応する方向に、出力ベクトルの大きさに応じた角度だけ移動させる。これによって、画面上では画像がスクロールして表示される(図3および図4参照)。
続くステップS12において、ゲームを終了するか否かが判定される。ゲームを終了するか否かの判定は、例えば、ゲームオーバーとなる所定の条件(より具体的には、プレイヤキャラクタが敵キャラクタに倒されたこと)が満たされたか否かによって行うことができる。また、ゲームを終了するか否かの判定は、プレイヤがゲームを終了するための所定の操作を行われたか否かによって行うことができる。ステップS12の判定において、ゲームを終了すると判定される場合、CPU11は図10に示すゲーム処理を終了する。一方、ゲームを終了しないと判定される場合、ステップS2の処理が再度実行される。以降、ステップS12においてゲームを終了すると判定されるまでステップS2〜S12の処理ループが繰り返し実行される。
以上のように、本実施形態では、目標点と、目標点を追従する追従点とを設定し、追従点の移動距離を示す出力ベクトルに基づいて表示制御処理を行う。これによって、入力開始時および入力終了時における入力ベクトルの急激な変化を緩和し、画像を滑らかに移動させることができる。さらに、追従点は、目標点の移動状況にかかわらず(目標点が移動しているか否かにかかわらず)、目標点に到達すると判断されるまで移動を続ける。これによって、プレイヤが行った入力の長さに応じた量だけ画像が移動されることになるので、画像を移動させる操作の操作性を向上することができる。
なお、本実施形態では、入力ベクトルに基づいて目標点を移動させるようにしたが、他の実施形態では、入力位置に基づいて目標点を移動させるようにしてもよい。例えば、タッチパッド7の入力面上の入力位置に対応する位置に目標点を移動させるようにしてもよい。この場合でも、目標点の移動状況にかかわらず追従点を移動させることによって、上記と同様、プレイヤが行った入力の長さに応じた量だけ画像を移動させるようにすることができる。
なお、本実施形態では、タッチパッド7に対する入力位置に基づくのではなく入力ベクトルに基づいて目標点を移動させることによって、タッチオフ後にタッチオンされた場合でも目標点の位置をリセットしなくてもよい。つまり、タッチオフ後にタッチオンされた場合であってもタッチオフ前の目標点の位置を維持して追従点を移動させることができる。これによって、タッチオフ直後にタッチオンがされた場合における画像の移動をスムーズにすることができる。さらに、タッチオフ直後にタッチオンがされた場合であっても目標点と追従点の総移動量をほぼ等しくすることができ、プレイヤが行った入力の長さに応じた量だけ画像が移動させることができる。
また、他の実施形態においては、上記ステップS21で算出された入力ベクトルの大きさが、予め定められた所定値よりも小さい場合、ステップS24で目標点を移動させないようにしてもよい。なお、プレイヤが入力面上の1点をタッチしている場合であっても、タッチパッド7によって実際に検出される入力位置が若干移動してしまうことがある。このような場合には、画像が微少な距離だけ移動することになる。しかし、このような移動は、プレイヤが意図していない移動である。これに対して、入力ベクトルの大きさが微少である場合には目標点を移動させないようにすることで、プレイヤが意図しない操作によって画像が移動することを防止することができる。
また、上記実施形態においては、コントローラ5から出力された入力座標データ(または入力ベクトルのデータ)を受け取ったゲーム装置2が、出力ベクトルを算出する処理を実行した。ここで、他の実施形態では、コントローラ5側で出力ベクトルを算出する処理を実行するようにしてもよい。すなわち、コントローラ5は、上記ステップS7〜S10の処理を実行する。さらに、コントローラ5は、ステップS10の結果得られた出力ベクトルをゲーム装置2へ出力(送信)する。ゲーム装置2は、コントローラ5から出力された出力ベクトルのデータを受信し、受信した出力ベクトルに応じて仮想カメラの視線方向を決定する(ステップS11)。このように、コントローラ5がCPUやステップS2およびS3を実行する処理回路を備える場合には、出力ベクトルをコントローラ5が算出するようにしてもよい。なお、このとき、ゲーム装置2は、出力ベクトルに応じた表示制御処理を行うだけであるので、従来のゲーム装置をそのまま適用することができる。すなわち、出力ベクトルを算出可能なコントローラを従来のゲーム装置に接続することによって、図1と同等のゲームシステムを実現することができる。
また、上記実施形態においては、仮想平面上に設定される目標点を入力ベクトルに基づいて移動させることによって、目標点の位置を入力位置から独立して(目標点の位置を入力位置と一対一に対応させずに)管理するようにした。ここで、他の実施形態においては、入力面上の入力座標を仮想平面上の座標に変換する関数を用い、タッチオンされる度に当該関数を変更するようにしてもよい。すなわち、タッチオフ後にタッチオンされたことが検出された場合、ゲーム装置2は、タッチオンした位置を表す座標(タッチオン時の入力座標)を、タッチオフされた時点における目標座標に変換する関数を算出する。この関数は、具体的には、座標を所定距離だけ平行移動させる関数である。例えば、タッチオン時の入力座標を(1,0)とし、タッチオフされた時点における目標座標を(3,3)とした場合、ゲーム装置2は、x座標値を2加算し、y座標値を3加算するように座標を平行移動させる関数を算出する。ゲーム装置2は、タッチオンが行われた最初のフレームで当該関数を算出する。そして、タッチオンが継続する間は、算出された関数を用いて入力座標を変換する。なお、最初のタッチオン時(目標座標が初期位置にある時点)には、最初にタッチオンされた位置を目標座標の初期位置に変換する関数が算出される。以上のように、入力座標を上記関数を用いて変換することによって目標座標を計算し、新たにタッチオンが行われる度に当該関数を変更することで、目標点の位置を入力位置と一対一に対応させずに管理することができる。また、これによれば、タッチオフ後に再度タッチオンが行われた場合であっても、再度のタッチオン後の目標点の位置がタッチオフ前と異なることがない。
また、上記実施形態においては、ゲームプログラムおよびゲーム装置を例として説明したが、本発明は、ゲームに限らず、画面上において指定された位置または上記入力ベクトルを検出することが可能なポインティングデバイスを用いて出力ベクトルを算出する技術に適用することができる。
本発明は、ポインティングデバイスを用いて画面に表示されている画像を変化させる場合において操作者に自然な印象を与えること等を目的として、例えばゲーム装置等の情報処理装置や、情報処理装置において実行される入力データ処理プログラムに適用することが可能である。
本発明の一実施形態に係るゲームシステムの構成を示す外観図 図1に示すゲームシステムのブロック図 本実施形態における表示制御処理の例を示す図 本実施形態における表示制御処理の例を示す図 タッチパッド7に対する入力の一例を示す図 仮想平面の一例を示す図 目標点および追従点が移動する様子をフレーム毎に示す図 目標点および追従点が移動する様子をフレーム毎に示す図 ゲーム装置2のメインメモリ17に記憶される主なデータを示す図 ゲーム装置2において実行されるゲーム処理の流れを示すフローチャート 図10に示す出力ベクトル算出処理の詳細な処理の流れを示すフローチャート 図10に示す出力ベクトル算出処理の詳細な処理の流れを示すフローチャート 仮想平面上を目標点が移動する様子の一例を示す図 目標点が仮想平面の境界を超えた場合における目標点および追従点を示す図
符号の説明
1 ゲームシステム
2 ゲーム装置
3 光ディスク
6 テレビ
5 コントローラ
7a,7b タッチパッド
11 CPU
17 メインメモリ
31 仮想平面

Claims (5)

  1. 入力面に対する入力状態を検出する入力装置と表示装置とを備える情報処理装置のコンピュータに、
    仮想的に設定される所定の平面上の位置を表す第1座標および第2座標の値を前記情報処理装置のメモリに記憶する記憶ステップと、
    前記入力面に対する入力状態を示す入力データを前記入力装置から繰り返し取得して前記メモリに記憶する取得ステップと、
    前記メモリに記憶された入力データに基づいて前記第1座標の更新を制御する第1更新制御ステップと、
    前記第1座標の値が変化したか否かにかかわらず前記入力データが取得される度に、前記第2座標の位置が前記第1座標の位置に近づくように当該第2座標の値を更新する第2更新制御ステップと、
    前記第2更新制御ステップが実行される度に、前記第2座標の更新前の位置を始点としかつ更新後の位置を終点とする出力ベクトルの向きおよび大きさに基づいて、前記表示装置に表示されている画像の一部または全部を移動させて表示させる表示制御ステップとを実行させ、
    前記第2更新制御ステップにおいては、前記入力面に対する入力が途切れたことを前記入力データが示すときには、前記第2座標の位置が当該途切れた時点の前記第1座標の位置に近づくように当該第2座標の値を更新し、
    前記第1更新制御ステップにおいては、前記入力装置に対する入力が中断した後で当該入力が再度行われたとき、再度の入力が行われた時点における前記第1座標の値は、入力が中断する直前の第1座標の値に設定される、入力データ処理プログラム。
  2. 入力面に対する入力状態を検出する入力装置と表示装置とを備える情報処理装置であって、
    仮想的に設定される所定の平面上の位置を表す第1座標および第2座標の値を前記情報処理装置のメモリに記憶する記憶制御手段と、
    前記入力面に対する入力状態を示す入力データを前記入力装置から繰り返し取得して前記メモリに記憶する取得手段と、
    前記メモリに記憶された入力データに基づいて前記第1座標の更新を制御する第1更新制御手段と、
    前記第1座標の値が変化したか否かにかかわらず前記入力データが取得される度に、前記第2座標の位置が前記第1座標の位置に近づくように当該第2座標の値を更新する第2更新制御手段と、
    前記第2座標の更新が実行される度に、前記第2座標の更新前の位置を始点としかつ更新後の位置を終点とする出力ベクトルの向きおよび大きさに基づいて、前記表示装置に表示されている画像の一部または全部を移動させて表示させる表示制御手段とを備え、
    前記第2更新制御手段は、前記入力面に対する入力が途切れたことを前記入力データが示すときには、前記第2座標の位置が当該途切れた時点の前記第1座標の位置に近づくように当該第2座標の値を更新し、
    前記第1更新制御手段は、前記入力装置に対する入力が中断した後で当該入力が再度行われたとき、再度の入力が行われた時点における前記第1座標の値を、入力が中断する直前の第1座標の値に設定する、情報処理装置。
  3. 操作データに応じて所定のデータ処理を実行する情報処理装置に接続可能な入力装置であって、
    仮想的に設定される所定の平面上の位置を表す第1座標および第2座標の値をメモリに記憶する記憶制御手段と、
    前記入力面に対する入力状態を示す入力データを繰り返し検出して前記メモリに記憶する検出手段と、
    前記メモリに記憶された入力データに基づいて前記第1座標の更新を制御する第1更新制御手段と、
    前記第1座標の値が変化したか否かにかかわらず前記入力データが取得される度に、前記第2座標の位置が前記第1座標の位置に近づくように当該第2座標の値を更新する第2更新制御手段と、
    前記第2座標の更新が実行される度に、前記第2座標の更新前の位置を始点としかつ更新後の位置を終点とする出力ベクトルを算出し、前記操作データとして前記情報処理装置へ出力する算出手段とを備え、
    前記第2更新制御手段は、前記入力面に対する入力が途切れたことを前記入力データが示すときには、前記第2座標の位置が当該途切れた時点の前記第1座標の位置に近づくように当該第2座標の値を更新し、
    前記第1更新制御手段は、前記入力装置に対する入力が中断した後で当該入力が再度行われたとき、再度の入力が行われた時点における前記第1座標の値を、入力が中断する直前の第1座標の値に設定する、入力装置。
  4. 入力面に対する入力状態を検出する入力装置と表示装置とを備える情報処理システムであって、
    仮想的に設定される所定の平面上の位置を表す第1座標および第2座標の値を前記情報処理システムのメモリに記憶する記憶制御手段と、
    前記入力面に対する入力状態を示す入力データを前記入力装置から繰り返し取得して前記メモリに記憶する取得手段と、
    前記メモリに記憶された入力データに基づいて前記第1座標の更新を制御する第1更新制御手段と、
    前記第1座標の値が変化したか否かにかかわらず前記入力データが取得される度に、前記第2座標の位置が前記第1座標の位置に近づくように当該第2座標の値を更新する第2更新制御手段と、
    前記第2座標の更新が実行される度に、前記第2座標の更新前の位置を始点としかつ更新後の位置を終点とする出力ベクトルの向きおよび大きさに基づいて、前記表示装置に表示されている画像の一部または全部を移動させて表示させる表示制御手段とを備え、
    前記第2更新制御手段は、前記入力面に対する入力が途切れたことを前記入力データが示すときには、前記第2座標の位置が当該途切れた時点の前記第1座標の位置に近づくように当該第2座標の値を更新し、
    前記第1更新制御手段は、前記入力装置に対する入力が中断した後で当該入力が再度行われたとき、再度の入力が行われた時点における前記第1座標の値を、入力が中断する直前の第1座標の値に設定する、情報処理システム。
  5. 記憶制御手段によって、仮想的に設定される所定の平面上の位置を表す第1座標および第2座標の値をメモリに記憶する記憶ステップと、
    取得手段によって、入力面に対する入力状態を示す入力データを繰り返し取得して前記メモリに記憶する取得ステップと、
    第1更新制御手段によって、前記メモリに記憶された入力データに基づいて前記第1座標の更新を制御する第1更新制御ステップと、
    第2更新制御手段によって、前記第1座標の値が変化したか否かにかかわらず前記入力データが取得される度に、前記第2座標の位置が前記第1座標の位置に近づくように当該第2座標の値を更新する第2更新制御ステップと、
    表示制御手段によって、前記第2更新制御ステップが実行される度に、前記第2座標の更新前の位置を始点としかつ更新後の位置を終点とする出力ベクトルの向きおよび大きさに基づいて、表示装置に表示されている画像の一部または全部を移動させて表示させる表示制御ステップとを備え、
    前記第2更新制御ステップにおいては、前記入力面に対する入力が途切れたことを前記入力データが示すときには、前記第2座標の位置が当該途切れた時点の前記第1座標の位置に近づくように当該第2座標の値を更新し、
    前記第1更新制御ステップにおいては、前記入力面に対する入力が中断した後で当該入力が再度行われたとき、再度の入力が行われた時点における前記第1座標の値は、入力が中断する直前の第1座標の値に設定される、情報処理方法。


JP2005218620A 2005-07-28 2005-07-28 入力データ処理プログラムおよび情報処理装置 Active JP4989052B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005218620A JP4989052B2 (ja) 2005-07-28 2005-07-28 入力データ処理プログラムおよび情報処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005218620A JP4989052B2 (ja) 2005-07-28 2005-07-28 入力データ処理プログラムおよび情報処理装置

Publications (2)

Publication Number Publication Date
JP2007034793A JP2007034793A (ja) 2007-02-08
JP4989052B2 true JP4989052B2 (ja) 2012-08-01

Family

ID=37793963

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005218620A Active JP4989052B2 (ja) 2005-07-28 2005-07-28 入力データ処理プログラムおよび情報処理装置

Country Status (1)

Country Link
JP (1) JP4989052B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4326568B2 (ja) 2007-02-20 2009-09-09 任天堂株式会社 情報処理装置および情報処理プログラム
JP5833906B2 (ja) * 2011-12-13 2015-12-16 任天堂株式会社 情報処理プログラム、情報処理装置、情報処理システムおよび情報処理方法
JP5833898B2 (ja) * 2011-11-29 2015-12-16 任天堂株式会社 情報処理プログラム、情報処理装置、情報処理システムおよび情報処理方法
JP5855934B2 (ja) * 2011-12-26 2016-02-09 任天堂株式会社 座標処理プログラム、座標処理装置、座標処理システムおよび座標処理方法
JP5725519B2 (ja) * 2013-06-11 2015-05-27 任天堂株式会社 情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法
JP5738372B2 (ja) * 2013-09-10 2015-06-24 任天堂株式会社 情報処理装置、情報処理プログラム、情報処理システム、および情報処理方法
CN106843709B (zh) 2015-12-04 2020-04-14 阿里巴巴集团控股有限公司 根据实时信息显示展现对象的方法和装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH083785B2 (ja) * 1987-02-24 1996-01-17 富士通株式会社 表示スクロ−ル方式
JP3593827B2 (ja) * 1996-11-26 2004-11-24 ソニー株式会社 画面のスクロール制御装置及びスクロール制御方法
JP2001092578A (ja) * 1999-09-20 2001-04-06 Casio Comput Co Ltd オブジェクト移動処理装置およびそのプログラム記録媒体

Also Published As

Publication number Publication date
JP2007034793A (ja) 2007-02-08

Similar Documents

Publication Publication Date Title
JP4748657B2 (ja) 入力データ処理プログラムおよび入力データ処理装置
JP4989052B2 (ja) 入力データ処理プログラムおよび情報処理装置
JP4326502B2 (ja) 表示領域を移動させる画像処理プログラムおよび画像処理装置
US8780052B2 (en) Input data processing program and information processing apparatus
JP5806799B2 (ja) 情報処理装置、情報処理プログラム、情報処理システムおよび情報処理方法
US8469810B2 (en) Storage medium having game program stored thereon and game apparatus
US8647197B2 (en) Storage medium storing game program and game apparatus
US20110014977A1 (en) Game device, game processing method, information recording medium, and program
JP5576061B2 (ja) プログラム及びゲーム装置
JP4471761B2 (ja) ゲームプログラム、ゲーム装置、および入力装置
JP4761528B2 (ja) ゲームプログラムおよびゲーム装置
JP2011258160A (ja) プログラム、情報記憶媒体及び画像生成システム
JP2001314645A (ja) キャラクタ制御方法、ビデオゲーム装置、及び記録媒体
JP7436293B2 (ja) ゲームプログラム、ゲーム装置、ゲームシステム、およびゲーム処理方法
JP6581639B2 (ja) ゲームプログラム、およびゲームシステム
JPH11235466A (ja) コンピュータゲーム装置
JP5210547B2 (ja) 移動制御プログラムおよび移動制御装置
JP2006141722A (ja) ゲームプログラムおよびゲーム装置
JP2001178963A (ja) ビデオゲーム装置、画像表示装置及び方法、動画表示装置及び方法並びに記録媒体
JP2003320167A (ja) ゲーム装置およびゲームプログラム
US7621812B2 (en) Game system and game program
US8926427B2 (en) Video game with screen flip and dual sets of collision data
US20110130201A1 (en) Game device, control method for a game device, and information storage medium
JP4842344B2 (ja) 表示領域を移動させる画像処理プログラムおよび画像処理装置
GB2560156A (en) Virtual reality system and method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080613

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100825

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100831

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101026

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110107

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110405

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20110412

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20110520

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20110902

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120427

R150 Certificate of patent or registration of utility model

Ref document number: 4989052

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150511

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250