〔第1実施形態〕
以下、図面を参照しながら、本発明を適用した第1実施形態として、伸縮自在なキャラクタが登場するビデオゲームを例に挙げて説明する。
[ゲーム装置の構成]
図1は、本実施形態における家庭用ゲーム装置の構成例を説明するシステム構成図である。家庭用ゲーム装置1200のゲーム装置本体1201は、例えばCPUや画像処理用LSI、ICメモリ等が実装された制御ユニット1210と、光学ディスク1202やメモリカード1204といった情報記憶媒体の読み取り装置1206,1208を備える。そして、家庭用ゲーム装置1200は、光学ディスク1202やメモリカード1204からゲームプログラムおよび各種設定データを読み出し、ゲームコントローラに為される操作入力に基づいて各種のゲーム演算を実行し、所与のビデオゲームを実行する。
家庭用ゲーム装置1200の制御ユニット1210で生成されたゲーム画像やゲーム音は、信号ケーブル1209で接続されたビデオモニタ1220に出力される。プレーヤは、ビデオモニタ1220のディスプレイ1222に表示されるゲーム画像を見つつ、スピーカ1224から出力されるBGMや効果音といったゲーム音を聞きながら、ゲームコントローラ1230から各種操作を入力してゲームを楽しむ。
ゲームコントローラ1230は、選択の決定やキャンセル、タイミングの入力などに用いられるプッシュボタン1232と、図で言うところの上下左右の各方向を単独入力するための方向入力キー1234と、右アナログレバー1236と、左アナログレバー1238とを備える。
右アナログレバー1236および左アナログレバー1238は、図で言うところの上下左右の2軸を有する方向入力デバイスであり、レバー1236a,1238aを倒すことによって2軸成分を含む任意の方向入力と、レバーの傾倒量に応じた任意操作量を入力することができる。また、いずれのアナログレバーも、操作入力していない中立状態からレバーの軸方向に押し込むことで、プッシュスイッチとしても機能する。そして、本実施形態では、右アナログレバー1236および左アナログレバー1238からの操作入力によって、プレーヤキャラクタの移動並びに伸縮の操作をする。
尚、ゲーム実行に必要なゲームプログラムおよび各種設定データは、通信装置1212を介して通信回線1に接続し、外部装置からダウンロードして取得する構成であっても良い。ここで言う、通信回線とは、データ授受が可能な通信路を意味する。すなわち、通信回線とは、直接接続のための専用線(専用ケーブル)やイーサネット(登録商標)等によるLAN(Local Area Network)の他、電話通信網やケーブル網、インターネット等の通信網を含む意味であり、また、通信方法については有線/無線を問わない。
[プレーヤキャラクタの説明]
図2は、本実施形態におけるプレーヤキャラクタのモデル構成を説明するための図である。同図に示すように、本実施形態におけるビデオゲームでプレーヤがゲームの主人公として操作するプレーヤキャラクタCPは、一頭一尾の想像上のワーム(worm:細長く足のない動物。)としてデザインされており、紐のように柔軟であるとともに伸縮自在な胴CPbを有する。つまり、プレーヤキャラクタCPは、頭CPhおよび尾CPt方向を伸身前後方向として胴CPbの太さをそのままに伸縮自在なキャラクタとして設定されている。尚、本実施形態では同CPbが伸び縮みする形態として説明するが、頭CPhおよび尾CPtを含む全身が自在に伸び縮みする設定としても良いのは勿論である。
プレーヤキャラクタCPは、図2(a)に示すように、複数のノード2が、互いに前後の距離Lを一定にした直列状の関節構造を成す骨格モデルBMを有する。別の言い方をするならば、関節部位に相当するノード2(=制御点)が連結子4によって関節構造として連結されており、連結子4は全て同じ固定長Lを有している。また、ノード2と連結子4との結合角度は、全て所定角度範囲θ内となるように限定されている。したがって、ノード2を関節部位と見なすと、骨格モデルBMは、複数の関節が直列状に連結されており、しかも各関節では一定角度以上曲がらないことになる。
図2(b)に示すように、プレーヤキャラクタCPにはヒット判定モデルHMが設定されている。本実施形態におけるヒット判定モデルHMでは、各ノードにヒット判定領域6が設定されている。本実施形態におけるヒット判定領域6は、対応するノード2の位置座標を中心にして、半径R(=連結子4の長さL)の球状領域として設定されている。
そして図2(c)に示すように、プレーヤキャラクタCPの表示モデルはポリゴンによって形成される。具体的には、各ノード2には、隣接するノードに向かうそれぞれのベクトルの和のベクトルを面に含む表示基準円10が設定されている。そして、頭CPhおよび尾CPtは、骨格モデルBMの先頭および末尾のノードを基準点として予め設定された頭部或いは尾部のモデルを配置する。そして、胴CPbについては、各ノードに設定されている表示基準円10で定義される円周の外縁を滑らかに結ぶように複数のポリゴンを生成・変形・再配置する。胴部CPbにおけるポリゴンモデルの形成は、例えばスケルトンモデルへの外皮形成処理などの公知のモデリング技術を適宜用いることによって実現できる。
尚、本実施形態では、表示基準円10の半径はヒット判定領域6の半径Rと同じに設定されているので、プレーヤキャラクタCPの外皮に何らかのオブジェクトが接触すると、ヒット判定される様に設定されているが、これに限るものではなくヒット判定領域6の半径Rよりやや大きく設定することによって、ヒットしたオブジェクトがプレーヤキャラクタCPに刺さって見えないように整合を図ったりしても良い。
また、以下の説明では複数あるノード2のうち、キャラクタの前方側端のノードを「前端ノード2fr」、後方側端のノードを「後端ノード2rr」と呼称することがある。
[機能ブロックの説明]
図3は、本実施形態における機能構成の一例を示す機能ブロック図である。同図に示すように本実施形態では、操作入力部100と、処理部200と、音出力部350と、画像表示部360と、通信部370と、記憶部500とを備える。
操作入力部100は、プレーヤによって為された各種の操作入力に応じて操作入力信号を処理部200に出力する。図1では、コントローラ1230が操作入力部100に該当する。そして、本実施形態における操作入力部100は、一つの入力操作で少なくとも2軸の方向入力を可能にする第1方向入力部102および第2方向入力部104を備える。
第1方向入力部102および第2方向入力部104は、例えばアナログレバーやトラックパッド、マウス、トラックボール、少なくとも2軸以上の検出軸を有する多軸検出型加速度センサまたは検出軸方向を違えて組み合わされた単軸検出型加速度センサの集合、少なくとも2方向以上の検出方向を可能にする多方向検出型傾斜センサまたは検出方向を違えて組み合わされた単方向検出型傾斜センサの集合、タッチパネルなどによって実現され、本実施形態ではプレーヤキャラクタCPの頭CPhおよび尾CPtそれぞれの移動方向と移動量の入力に用いられる。図1では、右アナログレバー1236、左アナログレバー1238が該当する。
処理部200は、例えばマイクロプロセッサやASIC(特定用途向け集積回路)、ICメモリなどの電子部品によって実現され、操作入力部100や記憶部500をはじめゲーム装置1200の各機能部との間でデータの入出力を行うとともに、所定のプログラムやデータ、操作入力部100からの操作入力信号に基づいて各種の演算処理を実行して、ゲーム装置1200の動作を制御する。図1では、ゲーム装置本体1201に内蔵された制御ユニット1210が処理部200に該当する。
そして本実施形態における処理部200は、ゲーム演算部210と、音生成部250と、画像生成部260と、通信制御部270とを備える。
ゲーム演算部210は、ゲームの進行に係る処理を実行する。例えば、ゲーム空間を仮想空間中に形成する処理や、仮想空間中に配置されたプレーヤキャラクタPC以外のキャラクタの動作制御処理、ヒット判定処理、物理演算処理、ゲーム結果の算出処理などを実行する。そして、本実施形態のゲーム演算部210は、伸縮キャラクタ制御部212を含んでいる。
伸縮キャラクタ制御部212は、オブジェクトの伸縮制御に関する処理を実行する。具体的には、例えば骨格モデルBMに新たな関節部位として新たなノードを追加形成する処理、ノードの移動処理、プレーヤキャラクタCPに作用する力を各ノードについて算出して設定する処理を含む各種処理を実行する。
音生成部250は、例えばデジタルシグナルプロセッサ(DSP)などのプロセッサやその制御プログラムによって実現され、ゲーム演算部210による処理結果に基づいてゲームに係る効果音やBGM、各種操作音の音信号を生成し、音出力部350に出力する。
音出力部350は、音生成部250から入力される音信号に基づいて効果音やBGM等を音出力するための装置である。図1ではビデオモニタ1220のスピーカ1224がこれに該当する。
画像生成部260は、例えば、デジタルシグナルプロセッサ(DSP)などのプロセッサ、その制御プログラム、フレームバッファ等の描画フレーム用ICメモリ等によって実現される。画像生成部260は、ゲーム演算部210による処理結果に基づいて1フレーム時間(1/60秒)で1枚のゲーム画像を生成し、生成したゲーム画像の画像信号を画像表示部360に出力する。
画像表示部360は、画像生成部260から入力される画像信号に基づいて各種ゲーム画像を表示する。例えば、フラットパネルディスプレイ、ブラウン管(CRT)、プロジェクター、ヘッドマウントディスプレイといった画像表示装置によって実現できる。図1ではビデオモニタ1220のディスプレイ1222が該当する。
通信制御部270は、データ通信に係るデータ処理を実行し、通信部370を介して外部装置とのデータのやりとりを実現する。
通信部370は、通信回線2と物理レベルで接続して通信を実現する。例えば、無線通信機、モデム、TA(ターミナルアダプタ)、有線用の通信ケーブルのジャックや制御回路等によって実現され、図1では通信装置1212がこれに該当する。
記憶部500は、処理部200にゲーム装置1200を統合的に制御させるための諸機能を実現するためのシステムプログラムや、ゲームを実行させるために必要なゲームプログラム、各種データ等を記憶する。また、処理部200の作業領域として用いられ、処理部200が各種プログラムに従って実行した演算結果や操作部100から入力される入力データ等を一時的に記憶する。この機能は、例えばRAMやROMなどのICメモリ、ハードディスク等の磁気ディスク、CD−ROMやDVDなどの光学ディスクなどによって実現される。
本実施形態では、記憶部500はゲームプログラム502を記憶している。処理部200がゲームプログラム502を読み出して実行することによって、処理部200にゲーム演算部210としての機能を実現させることができる。
また、記憶部500には、予め用意されるデータとしてゲーム空間設定データ520と、キャラクタ初期設定データ522とが記憶されている。また、ゲームの進行に伴って随時書き換えられるデータとして、キャラクタ制御データ524、作用力データ530、区間登録データ532、第1移動予定位置データ534、第2移動予定位置データ536を記憶する。また、ゲームの進行に係る処理を実行するにあたり適宜必要となるタイマー値なども記憶される。本実施形態では、ノード増減許可タイマー550を含む各種タイマーのタイマー値が一時的に記憶される。
ゲーム空間設定データ520は、仮想空間にゲーム空間を形成するための各種データが格納されている。例えば、プレーヤキャラクタCPが移動する地表や建物を含む配置物に関するモデルデータ、テクスチャデータおよびモーションデータが含まれる。また、ゲーム中にプレーヤキャラクタCP以外にコンピュータによって自動制御されるノンプレーヤキャラクタ(NPC)が登場する場合には、NPCのモデルデータやテクスチャデータおよびモーションデータなどが含まれる。
キャラクタ初期設定データ522は、プレーヤキャラクタCPの初期設定データが格納されている。本実施形態では、ゲームスタート時におけるプレーヤキャラクタCPはある一定の長さの胴CPbを有するように設定されている。すなわち、所定数のノード2が配列された骨格モデルBMおよびそのヒット判定モデルHMに関するデータが格納されている。また、プレーヤキャラクタCPの頭CPhや尾CPtのモデルデータ、胴CPbの部分に外皮を形成する際のテクスチャデータなどが格納されている。
そして、プレーヤキャラクタCPをゲーム実行中に制御するためのデータが、キャラクタ制御データ524に格納されている。
図4は、本実施形態におけるキャラクタ制御データ524のデータ構成例を示す図である。同図に示すように、キャラクタ制御データ524は、その時点におけるプレーヤキャラクタCPの骨格モデル制御データ525と、ヒット判定制御データ526と、表示モデル制御データ527とを含む。
骨格モデル制御データ525には、ノード識別情報525aに対応づけて、該ノードのゲーム空間座標系における位置座標525bと、頭側連結ノード識別情報525cと、尾側連結ノード識別情報525dと、エフェクタ情報525eと格納されている。
頭側連結ノード識別情報525cおよび尾側連結ノード識別情報525dは、当該ノードの配列順前後(頭側/尾側)に連結されているノードの識別情報を格納している。すなわち、前者は当該ノードの頭側(前方側)に連結されているノードの識別情報を格納し、後者は当該ノードの尾側(後方側)に連結されているノードの識別情報を格納する。先端のノードである場合には、連結先が無いことになるので、例えば同図に示すように「NULL」が格納される。
エフェクタ情報525eは、当該ノードが右アナログレバー1236又は左アナログレバー1238からの操作入力に応じた仮想力(操作力)を作用させるノードであるか否かを示している。例えば同図のように、右アナログレバー1236による操作入力に応じた仮想力が作用するノードには「1」、左アナログレバー1238による操作入力に応じた仮想力が作用するノードには「2」、それ以外には「0」が格納されている。
尚、本実施形態では、プレーヤキャラクタCPの頭CPhと尾CPtは初期設定状態の両端のノード(図4の「NODE1」と「NODE5」)に固定されているが、例えばゲームが始まって最初に入力があったレバーを前端のノードの操作に割り当て、他方のレバーを後端のノードの操作に割り当てるように、エフェクタ情報525eを自動的に変更する構成としても良い。また、本発明を、粘土を模したオブジェクトの制御に適用する場合には、右アナログレバー1236及び左アナログレバー1238がそれぞれ制御対象のオブジェクトに接触したことを判定して、各接触位置近傍のノードのエフェクタ情報525eを自動的に変更して操作の割り当てをすることで、仮想力(操作力)が作用する点が変化する例にも対応可能となる。
ヒット判定制御データ526には、ノード識別情報526aと、ヒット判定領域情報526bと、ヒットフラグ526cとが対応付けて格納されている。
ヒット判定領域情報526bは、当該ノードに対応付けられるヒット判定領域6を定義するデータとして、例えばゲーム空間座標系における位置座標と判定領域の半径Rの値を格納する。本実施形態では、対応するノードを中心に半径Rの球形判定領域が設定されるので、同図のように各領域半径R(R1、R2・・・)が格納されている。また、本実施形態では半径Rは一定であるが、例えばゲーム中にプレーヤキャラクタCPが太ったり痩せたりする設定とするならば適宜半径Rを可変することによって、適切なヒット判定を維持することができる。
そして、当該ノードに対応付けられているヒット判定領域で、他のオブジェクトと衝突していると判定された場合には、対応づけられたヒットフラグ526cを「0(未ヒット)」から「1(ヒット)」に変更して、ヒット状態を記憶する。
表示モデル制御データ527には、ノード識別情報と対応づけて各ノードに設定される表示基準円10を定義するデータを格納している。
作用力データ530は、各ノードに作用している力に関する情報を格納している。
図5は、本実施形態における作用力データ530のデータ構成例を示す図である。同図に示すように、例えば、ノード識別情報530aに対応づけて、操作力ベクトル530b、外力ベクトル530c、特定力ベクトル530d、およびこれらの力の合力に当る作用力ベクトル530eが格納されている。その他、慣性力ベクトルや重力ベクトルなどゲーム中にプレーヤキャラクタCPの動作制御に影響を与える力を適宜設定することができる。
操作力ベクトル530bは、右アナログレバー1236又は左アナログレバー1238による操作入力に応じて設定される仮想力(=操作力)が、エフェクタ情報525eで設定されたノードに作用し、更に骨格モデルBMの連結構造に従って各ノードに作用している力のベクトルを格納する。つまり、エフェクタ情報525eで「1」が格納されている先端のノードには右アナログレバー1236への操作入力に応じた操作力が直接作用するので、該操作力がそのままの状態で格納される。
一方、胴部分にあたるノードには操作力が直接的には作用しないが、先端のノードから順次連結した設定であるので、連結子4を伝って作用した結果としての力が格納される。したがって、その時点における骨格モデルBMが一直線状であれば、先頭のノードに作用した操作力と同じ操作力が各ノードの操作力ベクトル530bに格納されるが、骨格モデルBMが湾曲している場合にはノード間の連結関係に従って先頭のノードに作用した操作力の連結子方向成分の分力が格納されることになる。
外力ベクトル530cは、ゲーム空間自体や、ゲーム空間に配置されている他のオブジェクトの影響によって作用する仮想力を格納する。例えば、重力、他のオブジェクトとの衝突や接触によって生じる力や、環境風を受けることによって生じる力がこれに含まれる。その他、電磁力や、好物に惹きつけられる様子を表す仮想力など適宜含めることができる。
特定力ベクトル530dは、プレーヤキャラクタCPを特定の姿勢に変化させる際に作用させる所定の力(特定力)が、作用している場合に当該所定力のベクトルを格納する。本実施形態では、プレーヤキャラクタCPに立位姿勢である立ち上がり姿勢や逆立ち姿勢をさせるときに作用させる力に係る情報を格納する。
区間登録データ532は、骨格モデルBMの特定範囲を登録する。本実施形態では、他のオブジェクトと接触している部分でプレーヤキャラクタCPの全身を区切り、その区切った各区間が登録される。区切りの単位はノードである。従って、前端(頭)のノード、後端(尾)のノード、並びに他のオブジェクトと接触しているノードで区切られた区間(範囲)が区間登録データ532に登録される。言い換えると、プレーヤキャラクタCPを区切った各区間の両端のノードが区間登録データ532に登録される。
図6は、本実施形態における区間登録データ532のデータ構成例を示す図である。同図に示すように、区間登録データ532には、区間識別情報532aと対応づけて、当該区間の両端にあたる第1端ノード識別情報532bと、第2端ノード識別情報532cとを格納する。同図の例では、本実施形態における前端ノードに当る「NODE1」から胴部分に含まれる「NODE3」までの区間が、区間「SC1」として格納されている。つまり、プレーヤキャラクタCPは、胴部分のどこか(NODE3)で他のオブジェクトと接触していることになる。
接触が発生すれば、他のオブジェクトから外力を受けるケースや、移動中に他のオブジェクトに引っかかって前進する力に対する反力を受けてしまうケースなどが起り得る。つまり、そうして受けた外力によってプレーヤキャラクタCPが強制的に伸長される(以下、「強制伸長」とも言う。)可能性が生じることになる。
したがって、本実施形態ではこの区間登録データ532に登録された区間毎に作用する力関係が伸長する条件を満たすか否かを判定し、伸長する条件を満たすと判定された場合には当該区間を伸ばすように制御する。具体的には、キャラクタ制御データ524の骨格モデル制御データ525に格納されている骨格モデルBMのデータを、当該区間の端部のノードと、そのノードの区間内側の隣接ノードとの間に新たなノードを追加するように変更することでプレーヤキャラクタCPの伸びを実現する。
第1移動予定位置データ534と第2移動予定位置データ536は、共にプレーヤキャラクタCPの移動に係る制御に必要なデータを格納する。
図7は、本実施形態における第1移動予定位置データ534のデータ構成の一例を示す図である。同図に示すように、第1移動予定位置データ534では、ノード識別情報534aと対応づけて、前端ノードに操作力が作用し後端ノードに操作力が作用していないと仮定して求められた第1移動予定位置座標534bと、前端ノードから当該ノードまでの距離を表す値としての第1比例定数534cとが格納されている。
第2移動予定位置データ536についても、図8に示すように同様のデータ構成を有しており、ノード識別情報536aと対応づけて、後端ノードに操作力が作用し前端ノードに操作力が作用していないと仮定して求められた第2移動予定位置座標536bと、後端ノードから当該ノードまでの距離を表す値としての第2比例定数536cとが格納されている。
本実施形態では、プレーヤキャラクタCPの前端ノードに左アナログレバー1238へ為された操作入力に応じた第1の操作力が作用し、後端ノードに右アナログレバー1236に為された操作入力に応じた第2の操作力が作用する。つまり、プレーヤキャラクタCPは頭と尾のそれぞれを引っ張る力が作用し、双方の力が作用した結果として胴CPBの部分の位置が変化することになる。これを物理的に正確に算出しようとした場合、多くの演算負荷が必要になってしまう。そこで、第1の操作力が作用し第2の操作力が作用していないと仮定して、各ノードの移動予定位置を求めた情報を第1移動予定位置データ534bに格納し、第2の操作力が作用し第1の操作力が作用していないと仮定して、各ノードの移動予定位置を求めた情報を第2移動予定位置データ536bに格納する。そして、夫々のノードについて両端からの相対位置関係に応じてこれら二つの移動予定位置を元にその中間のどこかに実際に適用される移動予定位置を求める。具体的には、当該ノードから前端ノードまでの距離、および後端ノードまでの距離の比に応じた二つの移動予定位置の間の位置を求める。
ノード増減許可タイマー550は、時間経過を計時するタイマーのカウント値を格納する。本実施形態では、プレーヤキャラクタCPの伸長或いは短縮の制御が行われていない状態の時間経過を計時する。計時された時間、すなわちカウント値が所定の基準に満たない間は、プレーヤキャラクタCPの伸縮制御が制限され実行されない。
[動作の説明]
次に本実施形態における処理の流れについて説明する。ここで説明する処理は、処理部200が、記憶部500に記憶されているシステムプログラム(不図示)やゲームプログラム502を読み出して実行することによって実現され、所定サイクルで繰り返し実行される。
図9は、本実施形態における処理の流れを説明するためのフローチャートである。
同図に示すように、先ずゲーム演算部210は、ゲーム空間設定データ520を参照して仮想空間中にプレーヤキャラクタCPの移動する地表や背景、NPCなどを配置してゲーム空間を形成し、形成したゲーム空間に、キャラクタ初期設定データ522を参照して初期状態のプレーヤキャラクタCPを初期位置に配置する(ステップS2)。
このとき、プレーヤキャラクタCPの配置にともなって、キャラクタ制御データ524の骨格モデル制御データ525に初期状態の骨格モデルBMが登録され、登録された骨格モデルに従って外皮を形成してプレーヤキャラクタCPの表示モデルをゲーム空間に配置する。
次に、処理部200は、予め動作が設定されているオブジェクト(例えば、NPCなど)の動作を制御する(ステップS4)。例えば、プレーヤキャラクタCPの移動を邪魔するおもちゃの自動車などを設定するならば、地表面を所定のルールに基づいて移動制御する。
次に、処理部200は、プレーヤの操作入力に従ってプレーヤキャラクタCPを伸長或いは短縮させる任意伸縮処理を実行する(ステップS6)。
図10は、本実施形態における任意伸縮処理の流れを説明するためのフローチャートである。同図に示すように、任意伸縮処理では先ず、ゲーム演算部210がノード増減許可タイマー550のカウントを所定数加算し(ステップS30)、加算した後のノード増減許可タイマー550のカウント値が基準値に達しているか否かを判定する(ステップS32)。
ノード増減許可タイマー550のカウント値が基準値に達していなければ(ステップS32のNO)、任意伸縮処理はそのまま終了する。
一方、ノード増減許可タイマー550のカウント値が基準値に達している場合(ステップS32のYES)、処理部200は更に所定の任意伸長操作が入力されているか否かを判定する(ステップS34)。具体的には、右アナログレバー1236から右方向入力され、同時に左アナログレバー1238から左方向入力が入力されたか否かを判定する。すなわち、第1方向入力部102と第2方向入力部104から、同時入力と見なせる程度の時間差で、互いに相反する方向に方向入力されたか否かを判定する。したがって、左右に限らず両レバーで上下互い違いに入力された場合にも任意伸長操作が入力されたと判定する構成としても良い。
そして、任意伸長操作が入力されたと判定された場合(ステップS34のYES)、ゲーム演算部210は、前端ノード(頭CPhのノード)を連結子4の長さLだけ、前端ノードの次に連結された次連結ノードから前端ノードを向いた方向に移動させ(ステップS36)、移動した先端ノードと次連結ノードとの間に新たなノードを追加する(ステップS38)。
具体的には、例えば図4の例ならば、「NODE1」がプレーヤキャラクタCPの先端ノードに当るので、その次に連結されている「NODE2」から「NODE1」へ向かうベクトルの方向へ、「NODE1」を連結子4の長さLだけ移動させる。そして、新たに追加形成されるノードに適当なノード識別情報(例えば「NODE6」)を付与して、骨格モデル制御データ525に登録する。このとき、位置座標525bは、「NODE1」と「NODE2」の中間位置とし、頭側連結ノード識別情報525cには「NODE1」を格納し、尾側連結ノード識別情報525dには「NODE2」を格納する。エフェクタ情報525eには「0」を格納する。そして、「NODE1」の尾側連結ノード識別情報525dを「NODE2」から「NODE6」に更新し、「NODE2」の頭側連結ノード識別情報525cを「NODE1」から「NODE6」に更新する。
こうしてキャラクタ制御データ524に登録されている骨格モデルBMに新たなノードを追加形成したならば、ゲーム演算部210は更に同様にして、後端ノード(尾CPtのノード)を連結子4の長さLだけ、後端ノードの前側に連結された連結ノードから後端ノードを向いた方向に移動させ(ステップS40)、移動した後端ノードと連結ノードとの間に新たなノードを追加形成する(ステップS42)。
そして、ノード増減許可タイマー550をリセットして「0」に戻してリスタートし(ステップS44)、任意伸縮処理を終了する。
尚、ステップS38及びステップS42においては、追加形成するノードを端部のノードと次連結ノードとの間に追加形成する構成としているが、端部のノードの先に単純に追加形成する構成としても良いのは勿論である。この場合、骨格モデル制御データ525のエフェクタ情報525eを変更して、右アナログレバー1236或いは左アナログレバー1238の操作割り当てを新たに追加形成されたノードに変更する必要がある。
ステップS34において否定判定がされた場合(ステップS34のNO)、ゲーム演算部210は特定の任意短縮操作が入力されたか否かを判定する(ステップS50)。具体的には、右アナログレバー1236から左方向入力され、同時に左アナログレバー1238から右方向入力がされたか否かを判定する。すなわち、第1方向入力部102と第2方向入力部104から、同時と見なせるほどの時間差で互いに近寄るように方向入力されたか否かを判定する。したがって、左右に限らず両レバーで上下から寄せるように入力された場合にも任意短縮操作が入力されたと判定する構成としても良い。
任意短縮操作が入力されなかったと判定された場合には(ステップS50のNO)、ゲーム演算部210は、任意短縮処理を終了する。また、骨格モデルBMの全ノード数が2以下の場合にも、任意伸縮処理を終了する。
一方、任意短縮操作が入力されたと判定された場合には(ステップS50のYES)、ゲーム演算部210は前端ノードの次に連結されている次連結ノードと、後端ノードの前連結ノードを削除し(ステップS52)、前端ノードと後端ノードを夫々の削除された連結ノードの位置に移動させる(ステップS54)。
具体的には、例えば図4の例ならば、前端ノードに当る「NODE1」と、後端ノードに当る「NODE5」の隣接ノードに当たる「NODE2」と「NODE4」を削除する。そして、「NODE1」の位置座標525bを「NODE2」の値、「NODE5」の位置座標525bを「NODE4」の値に変更する。
更に、「NODE1」の尾側連結ノード識別情報525dを「NODE3」に変更し、「NODE3」の頭側連結ノード識別情報525cを「NODE1」に変更する。また、「NODE5」の頭側連結ノード識別情報525cを「NODE3」に変更し、「NODE3」の尾側連結ノード識別情報525dを「NODE5」に変更する。
また、ヒット判定制御データ526も「NODE2」と「NODE4」の登録を抹消して更新する。
以上の任意伸縮処理によってプレーヤは任意にプレーヤキャラクタCPを伸ばしたり縮めたりすることできるようになる。
例えば図11は、本実施形態におけるプレーヤキャラクタCPの任意伸長操作と制御の概念の関係を示す図である。同図(a)に示すように、プレーヤがゲームコントローラ1230の右アナログレバー1236を右方向、左アナログレバー1238を左方向に同時入力すると任意伸長操作の入力となる。すると、プレーヤキャラクタCPの骨格モデルBMは、同図(b)の俯瞰図に示すように、左側の状態から右側の状態に変更される。すなわち、先端ノード2dと該先端ノードの次連結ノード2eとの間に新たなノード2fが追加形成され、更に後端ノード2hと該後端ノードの前の連結ノード2jとの間にも新たなノード2kが追加形成されて変更される。そして、プレーヤキャラクタCPの表示モデルは、変更された骨格モデルBMに基づいて外皮を形成することによって、同図(c)の俯瞰図に示す様に、左側の全長が短い状態から右側の全長が伸びた状態に変化する。
一方、同図(d)の左側の状態のように、右アナログレバー1236から右方向入力、左アナログレバー1238から左方向入力がされているが、同時入力とは見なされない場合には、左アナログレバー1238への入力に応じた仮想力(=第1の操作力。図中の左向き太黒矢印。)が、先端ノード2dに作用し、右アナログレバー1236への入力に応じた仮想力(=第2の操作力。図中の右向き斜線太矢印。)が、先端ノード2hに作用していると見なされ、プレーヤキャラクタCPの頭CPh、尾CPtをそれぞれ引っ張る様に作用する。したがって、骨格モデルBMが湾曲状態であれば、新たなノードの追加形成は行われずに先端ノード2dと後端ノード2hが反対方向に引っ張られる格好となり、右側の状態のように直線状態(伸身状態)に近づくことになる。
また例えば図12は、本実施形態におけるプレーヤキャラクタCPの任意短縮操作と制御の概念の関係を示す図である。同図(a)に示すように、プレーヤがゲームコントローラ1230の右アナログレバー1236を左方向、左アナログレバー1238を右方向に同時入力すると任意短縮操作の入力となる。
任意短縮操作が入力されると、プレーヤキャラクタCPの骨格モデルBMは、同図(b)の俯瞰図に示すように、左側の状態から右側の状態に変更される。すなわち、先端ノード2dの次の連結ノード2fが削除され、更に後端ノード2hの前の連結ノード2kが削除されて変更される。そして、プレーヤキャラクタCPの表示モデルは、変更された骨格モデルBMに基づいて外皮を形成することによって、同図(c)の俯瞰図に示す様に、左側の状態から右側の全長が縮んだ状態に変化する。
一方、右アナログレバー1236から左方向入力され、左アナログレバー1238から右方向入力がされたが、同時入力とは見なされない場合には、左アナログレバー1238への入力に応じた仮想力(=第1の操作力。図中の右向き太黒矢印。)が、先端ノード2dに作用し、右アナログレバー1236への入力に応じた仮想力(=第2の操作力。図中の左向き斜線太矢印。)が、先端ノード2hに作用していると見なされ、プレーヤキャラクタCPの頭CPhと尾CPtを近づける様に作用する。したがって、同図(d)の左側の状態のように、骨格モデルBMが湾曲状態であれば、ノードの削除は行われずに先端ノード2dと後端ノード2hが近づく格好となり、右側の状態のように湾曲がより強い状態に近づくことになる。
また、本実施形態では、ノード増減許可タイマー550が設けられ、カウント値が基準値に達していない場合、換言すればプレーヤキャラクタCPが伸長或いは短縮されない状態がある一定時間以上経過していない場合には、プレーヤが任意伸長操作や任意短縮操作を入力しても、伸長或いは短縮の制御は実行されない。これによって、伸長或いは短縮する動作にある種の時間的な「溜め」を作り、プレーヤキャラクタCPの胴が伸びたり縮んだりする際の抵抗感を表現し、あたかも胴CPbがある程度生き物らしく成長や変形によって伸び縮みしているかのように見せることができる。
尚、任意短縮操作の定義は、適宜変更可能である。例えば、右アナログレバー1236及び左アナログレバー1238に押し込みスイッチの機能を設け、両レバーの同時押し込み操作を検出した場合に任意短縮操作が入力されたと判定する構成とすることもできる。
また、削除するノードは、端部のノードの次の連結ノードを削除する構成に限らず、端部のノードを削除し、骨格モデル制御データ525のエフェクタ情報525eを変更して右アナログレバー1236や左アナログレバー1238の操作割り当てを端部のノードの次の連結ノードへ変更する構成も可能である。
図9に戻って、任意伸縮処理を終了したならば、ゲーム演算部210は次に作用力設定処理(ステップS8)、強制伸長処理(ステップS10)を実行して、プレーヤキャラクタCPに作用する外力によって伸長させる。
作用力設定処理は、プレーヤキャラクタCPに作用する力の設定と、その合力である作用力の算出に関する処理である。
図13は、本実施形態における作用力設定処理の流れを説明するためのフローチャートである。同図に示すように、作用力設定処理では先ず、操作力設定処理を実行する(ステップS72)。操作力設定処理とは、プレーヤによる2種類の方向入力に応じた仮想力をプレーヤキャラクタCPに設定する処理である。
図14は、本実施形態における操作力設定処理の流れを説明するためのフローチャートである。同図に示すように操作力設定処理では先ず、左アナログレバー1238に入力されている傾倒方向と傾倒量に応じた第1の操作力を決定し、プレーヤキャラクタCPの頭CPhの基準となる前端ノードに設定する(ステップS100)。そして、前端ノードから各ノードに連結子4を介して伝わる操作力を先端からの連結順に算出して設定する(ステップS102)。
図5の例で言うと、設定された第1の操作力のベクトルは、作用力ベクトルデータ530の「NODE1」に対応する操作力ベクトル530bに格納され、同様に第1の操作力ベクトルが各ノードに作用する分力が求められて各々に対応する操作力ベクトル530bに格納される。
次に、ゲーム演算部210は、右アナログレバー1236に入力されている傾倒方向と傾倒量に応じた第2の操作力を決定し、プレーヤキャラクタCPの尾CPtの基準となる後端ノードに設定する(ステップS104)。
次いで、後端ノードから各ノードに連結子4を介して伝わる第2の操作力の分力を連結順後ろから順番に算出し(ステップS106)、算出した第2の操作力の分力と、ステップS100並びにS102で算出されて各ノードの操作力ベクトル530bに格納されているベクトルとのベクトル和を求めて、操作力ベクトル530bを更新し(ステップS108)、操作力設定処理を終了する。
操作力設定処理を終了したならば図13のフローに戻り、ゲーム演算部210は次に操作力方向補正処理を実行する(ステップS74)。
操作力方向補正処理は、ステップS72で設定された操作力の作用する方向を補正することによって、プレーヤキャラクタCPの胴が湾曲した状態から旋回を続ける場合に、わずかに旋回の内側をたどるようにして移動するように表現する処理である。
図15は、本実施形態における操作力方向補正処理の流れを説明するためのフローチャートである。操作力方向補正処理では先ず、ゲーム演算部210は、前端ノードから連結順に全ノードについてループBの処理を実行する(ステップS120〜S128)。ループBでは、処理対象のノードの連結順が、前端ノードから3番目以降であるか否かを判定する。(ステップS122)。具体的には、キャラクタ制御データ524の骨格モデル制御データ525から該当するノードを起点に頭側連結ノード識別情報525cを参照して「NULL」が格納されているまでの回数をカウントするとしても良い。
そして、連結順が1番目または2番目の場合には(ステップS122のNO)、ループBの処理を終了する。一方、連結順が3番目以降の場合には(ステップS122のYES)、処理対象ノードに設定されている操作力のベクトルの方向を補正すべきか否かを判定する。具体的には、処理対象ノードから連結順一つ前のノードへ向かうベクトルVC1と、処理対象ノードから連結順二つ前のノードへ向かうベクトルVC2を求め、ベクトルVC1とベクトルVC2の相対角度が基準値以上であるか否かを判定する(ステップS124)。基準値としては、プレーヤキャラクタCPの初期設定の大きさや、キャラクタの胴CPBの柔らかさのイメージに応じて適宜設定できるが、例えば10°程度とする。つまり、同ステップは、所定の超過湾曲条件を満たす湾曲部分のノードを検出する処理としての意味がある。
そして、相対角度が基準値に満たない場合には(ステップS124のNO)、ゲーム演算部210は、処理対象ノードの操作力を補正する必要が無いと判断して、ループBの処理を終了する。一方、相対角度が基準値以上である場合には(ステップS124のYES)、作用力データ530を参照して、処理対象ノードに設定されている操作力ベクトル530bを、ベクトルVC1とベクトルVC2との中間方向へ補正して(ステップS126)、ループBを終了する。そして、全てのノードについてループBが実行されたならば操作力方向補正処理を終了する。
図16は、本実施形態における操作力方向補正処理の概念を説明するための図であって、プレーヤキャラクタCPが左旋回しようとしている状態の骨格モデルBMの俯瞰図に相当する。骨格モデルBMは、ノードを節にして湾曲して弧を描いている。
図16(a)の上側の図では、矢印で示された各ノードに設定された操作力は操作力設定処理で設定されたままである。つまり、前端ノード2dに作用する操作力(黒太矢印で表示。)が連結子伝いに伝達されるので、各ノード2e〜2hは連結子の方向に作用する力(ハッチングされた小さい矢印で表示。)で引っ張られる格好になる。したがって、設定されたままの操作力が各ノードに作用したと仮定した場合、図16(a)の下側の図に示すよう、各ノードは連結順で一つ前のノードが元有った位置に向かう様に移動制御されることになる。こうした動作は、所謂蛇の移動と同じであり、プレーヤキャラクタCPが蛇である場合を除けば、プレーヤに好まれないケースが予想される。
これに対して、操作力方向補正処理を実行すると、図16(b)の上側の図に示すように連結順3番目以降のノードで、ベクトルVC1とベクトルVC2の成す角度が基準値を超える場合、例えば、ベクトルVC3のように、そもそも設定された操作力は骨格モデルBMの弧の内側に向けて補正される。この結果、図16(b)の下側の図に示すように、骨格モデルBMの湾曲度が基準値より大きい箇所では、各ノードが旋回方向わずかに内側に向かって移動する様に制御される。この結果、進行方向を変えつつ、できるだけ曲がった胴をできるだけまっすぐに戻せるように(つまり、より楽な姿勢で進行方向を変えるように)表現することができる。このように、蛇やムカデとは異なる旋回動作姿勢制御によって、プレーヤキャラクタCPが、蛇やムカデでもなく胴が自在に伸び縮みする能力を有する特異なキャラクタとしての存在感を表現することが可能となり、プレーヤに摩訶不思議な印象を与えゲームへの興味を惹くことができるようになる。
さて、操作力方向補正処理を終了したならば図13のフローに戻り、ゲーム演算部210は次に特定力設定処理を実行する(ステップS76)。
特定力設定処理は、プレーヤキャラクタCPに所定の姿勢変化をさせるための姿勢変化操作入力が有った場合に、当該姿勢変化に対応づけられた特定力を設定する処理である。本実施形態では、ゲームコントローラ1230から所定のボタンスイッチが押された場合に、プレーヤキャラクタCPを立ち上がらせる。また、別のボタンスイッチが押された場合に、プレーヤキャラクタCPを飛行可能に浮揚させる。
図17は、本実施形態における特定力設定処理の流れについて説明するためのフローチャートである。同図に示すように、特定力設定処理では先ず、ゲーム演算部210は「立ち上がり」又は「逆立ち」に対応する特定の操作入力(立位姿勢指示操作)がなされているか否かを判定する(ステップS140)。本実施形態では、ゲームコントローラ1230のプッシュボタン1232のうち、所定のプッシュボタンが押下されたら「立ち上がり」、別の所定のプッシュボタンが押下されたら「浮揚」の特定操作入力がなされたと判定する。
「立ち上がり」の特定操作入力が有る場合には(ステップS140のYES→ステップS142の「立ち上がり」)、作用力データ530を参照し、何れかのノードに対応して特定力ベクトル530dにマイナス重力(ゲーム空間の重力をキャンセルする上向きに作用する仮想力)が設定されているか否かを判定する(ステップS144)。
何れのノードにもマイナス重力が設定されていなければ(ステップS144のNO)、ゲーム演算部210は後端ノードの位置を固定してから(ステップS146)、後端ノードの一つ前のノードにマイナス重力を設定し(ステップS148)、特定力設定タイマーを起動させる(ステップS150)。マイナス重力は、作用させるノードから後端ノードの直上所定距離(例えば、全長の1.2倍離れた位置)の仮想点を向き、プレーヤキャラクタCPを吊下げできる適当な大きさを設定する。
何れかのノードにすでにマイナス重力が設定されていた場合は(ステップS144のYES)、特定力設定タイマーで所定時間(例えば、0.5秒程度)が計時されたか否かを判定し(ステップS152)、所定時間が計時されていれば(ステップS152のYES)、更に、作用力データ530を参照して前端ノードより所定数後ろのノード(例えば1つ後ろのノード)にマイナス重力が設定されているか否かを判定する(ステップS154)。
ここで、前端ノードより所定数後ろのノード(例えば、プレーヤキャラクタCPが立ち上がった時に首に相当する部分のノード。)にマイナス重力が設定されていない場合(ステップS154のNO)、マイナス重力の設定を、現在設定されているノードから連結順一つ前のノードに移動させ(ステップS156)、特定力設定タイマーをリセットして再度所定時間の計時をやり直す(ステップS158)。
「立ち上がり」の特定操作が入力され続けている間、制御サイクル毎に特定力設定タイマーがカウントされ、所定時間が計時されるごとにマイナス重力が連結順一つ前のノードに順次移動設定されることになる。そして、前端ノードより手前の所定のノードに達すると(ステップS152のYES)、それ以降はマイナス重力の移動設定は行われることなく特定力処理を終了する。
特定力設定タイマーをリセットしたならば、次いでゲーム演算部210は、立ち上がりの姿勢変化が完了したか否かを判定する(ステップS160)。例えば、前端ノードより所定数(例えば1つ)後ろのノードが、後端ノードの直上に位置しているか否かで判断することができる。そして、立位姿勢への変化が完了していない場合には(ステップS160のNO)、そのまま特定設定処理を終了する。したがって、次の制御サイクルで、引き続き姿勢変化の制御が実行される。一方、立位姿勢への変化が完了したと判定された場合には(ステップS160のYES)、後端ノードの位置固定を解除して(ステップS162)、特定力設定処理を終了する。
この結果、例えば図18に示すようにプレーヤキャラクタCPの姿勢変化制御が行われる。すなわち、先ず最初、図18(a)に示すように後端ノードの一つ前のノードにマイナス重力(図中の上向き矢印)が設定される。そして、図18(b)に示すように、所定時間が計時されるごとにマイナス重力が連結順一つ前のノードに順次移動設定される。つまり、尾から頭にむけて順にノードが吊り上げられる格好となる。そして、前端ノードより手前の所定のノード(1つ手前のノード)に達すると、それ以降はマイナス重力の移動設定は行われなり、この段階では同図(c)に示すように、プレーヤキャラクCPは尾CPtを起点にして立ち上がった格好となる。
同図の例では「立ち上がり」の姿勢変化を実現しているが、マイナス重力の設定を変更することで「逆立ち」の姿勢変化などにも応用できる。例えば、図19の「逆立ち」の例であれば、同図(a)に示すように最初にマイナス重力を設定し、同図(b)のように前端ノードの所定数(例えば1つ)後ろから初めて徐々に後端ノードに向かってマイナス重力の移動設定を実行する。結果、同図(c)のように、プレーヤキャラクCPは頭CPhを起点にして逆立ちする格好となる。
同様の手法によってプレーヤキャラクタCPを浮揚させることもできる。
すなわち、図17において「浮揚」の特定操作入力が有る場合には(ステップS140のYES→ステップS142の「浮揚」)、ゲーム演算部210は全ノードにマイナス重力を設定する(ステップS164)。このとき設定されるマイナス重力は、各ノードの重量をキャンセルするのに十分な大きさの上向きの仮想力となる。すなわち、プレーヤキャラクタCPの全身に重力の影響がキャンセルされ、右アナログレバー1236や左アナログレバー1238による方向入力によって設定される操作力の方向に向けて空中を浮揚する様に移動することが可能になる。
そして、設定されているマイナス重力は、次回以降のステップS140の演算処理において特定操作入力がされていないと判定された場合(ステップS140)に、解除されて(ステップS166)特定力処理を終了する。したがって、吊り上げられる力が失せることとなり、立ち上がり或いは浮揚していたプレーヤキャラクタCPは重力に従って自由落下し、再び地面を這う姿勢となる。
尚、プレーヤキャラクタCPの「立ち上がり」姿勢変化にともなう特定力設定は、一つの仮想力の作用位置を変更する構成に限らず、「浮揚」の時の制御と同様にして、後端ノードの一つ前のノードから、前端ノードの所定数後ろのノードまで順に、各ノード毎にマイナス重力を次々に作用させる構成として実現しても良いのは勿論である。
さて、特定力処理を終了したならば、図13の作用力設定処理のフローに戻る。
ゲーム演算部210は次に、プレーヤキャラクタCPに接触する他のオブジェクトの有無を判定する(ステップS78)。そして、接触する他のオブジェクトが有る場合(ステップS78のYES)、ゲーム演算部210は、他のオブジェクトと接触することに起因してプレーヤキャラクタCPに作用する外力を設定するために外力設定処理を実行する(ステップS82)。
図20は、本実施形態における外力設定処理の流れを説明するためのフローチャートである。同図に示すように、ゲーム演算部210は、プレーヤキャラクタCPに接触する全ての他のオブジェクトについてループDの処理を実行する(ステップS180〜S190)。ループDでは、先ず処理対象となっている他のオブジェクトがヒットしている接触ノードを抽出し(ステップS182)、ヒット判定制御データ526を参照し、該当するノードに対応するヒットフラグ526cに「1(ヒット有り)」を格納する(ステップS184)。次いで、処理対象の他のオブジェクトから接触ノードへ作用する外力を設定する(ステップS186)。すなわち、処理対象の他のオブジェクトから接触ノードへ作用する外力を算出し、作用力データ530で接触ノードに対応する外力ベクトル530cに格納されているベクトルに、算出した外力を合成して更新する。尚、接触ノードが複数の場合には、他オブジェクトから受ける外力を複数のノードに分けて設定する。
次に、ゲーム演算部210は、接触ノードから連結順前後の他のノードについて、処理対象の他オブジェクトから受ける外力が接触ノードから他のノードに伝達する分力を求め、当該ノードの外力ベクトル530cに格納されているベクトルに、算出した分力を合成して更新し(ステップS188)、ループDの処理を終了する。
そして、プレーヤキャラクタCPに接触する全ての他のオブジェクトについてループDの処理を実行したら外力設定処理を終了する。
外力設定処理を終了したならば、図13の作用力設定処理のフローに戻り、ゲーム演算部210は次に、前端ノード、後端ノードに加えて他のオブジェクトと接触する接触ノードを端とする登録区間を設定する(ステップS84)。
ここで登録される区間は、プレーヤキャラクタCPが、外力によって強制的に引き伸ばされる状態を制御する単位となる。したがって、区間の両端は上記3種類のノードに限られ、その間には他の接触ノードが含まれない。具体的には、例えば、プレーヤキャラクタCPの胴CPbの複数のノードが他のオブジェクトと接触している状態では、先ず前端ノードを一端とし、ヒット判定制御データ526を連結順に参照して次にヒットフラグ526cが「1(ヒット有り)」の接触ノードを他端とする第1の区間を区間登録データ532に登録する。次いで、第1の区間の他端となったノードを一端とし、連結順で次の接触ノードを他端とする第2の区間を登録するといった制御を繰り返し、最後の接触ノードを一端とし後端ノードを他端とする最後の区間を登録して終わる。尚、接触ノードが無い場合には、前端ノードを一端、後端ノードを他端とする唯一つの区間が登録されることになる。
次に、ゲーム演算部210は、全ノードについて、操作力、外力および特定力の合力を求め、それぞれの作用力ベクトル530eとして作用力データ530に格納して(ステップS86)、作用力設定処理を終了する。
一方、ステップS78において、プレーヤキャラクタCPに接触する他のオブジェクトが無い場合には(ステップS78のNO)、ゲーム演算部210は、キャラクタ制御データ524のヒット判定制御データ526を参照し、全ノードのヒットフラグ526cを「0(未ヒット)」に変更した後(ステップS80)、登録区間の設定(ステップS84)と、作用力の算出を行って(ステップS86)、作用力設定処理を終了する。
作用力設定処理によって各ノードに作用する力が求められたことになるので、図9のフローに戻って強制伸長処理を実行する(ステップS10)。強制伸長処理は、プレーヤキャラクタCPに作用している力の合力が基準値以上に達している場合に、プレーヤの意志に関係なく強制的に伸長する制御である。
図21は、本実施形態における強制伸長処理の流れを説明するためのフローチャートである。同図に示すように、強制伸長処理では、ゲーム演算部210は、区間登録データ532に登録されている全ての登録区間についてループEの処理を実行する(ステップS200〜S218)。
具体的には、先ず区間登録データ532を参照し、処理対象の登録区間における両端のノードの直線距離LSを算出するとともに(ステップS202)、処理対象とされる登録区間の全ノード間の距離の総和に当る全長ΣLnを算出する(ステップS204)。そして、直線距離LSが全長ΣLnに満たない場合には(ステップS206のNO)、強制伸長はされずにループEの処理を終了する。
一方、直線距離LSが全長ΣLn以上の場合には(ステップS206のYES)、当該登録区間が外力によって伸ばされる条件を満たしているか否かを判定する(ステップS208)。例えば、両端のノードに作用する作用力ベクトル530eを参照し、両端のノードを結ぶ線分方向成分を求める。そして、求めた線分方向成分が互いに相反し、且つ基準値を超える大きさである場合に、条件を満たしていると判定する。換言すると、新たなノードを追加挿入する位置として適当か否かを判定する。
そしてゲーム演算部210は、条件を満たしていなければ(ステップS208のNO)、ループEの処理を終了する。一方、条件を満たしていれば(ステップS208のYES)、ノード増減許可タイマー550を参照する(ステップS210)。そして、ノード増減許可タイマーの値が「0」になって前回強制伸長してからの経過時間が所定基準に達していれば(ステップS210のYES)、両端のノードを各々に作用する力の方向に応じて連結子4の長さだけ移動制御する(ステップS212)。ここでいう移動には、作用力の関係によっては移動されずに動かない場合も含まれる。そして、両端ノードを移動させたならば、移動した両端ノードとそれらに対して区間内側で隣接するノードとの間に新しいノードを追加する(ステップS214)。つまり、任意伸長処理と同様に、骨格モデルBMに新たなノードが追加されることによって、プレーヤキャラクタCPが伸びることになる。
次いで、ゲーム演算部210は、強制伸長がなされたのでノード増減許可タイマーをリセットしてリスタートし(ステップS216)、当該処理対象の登録区間に対するループEの処理を終了する。
以上の強制伸長処理によって、基準値以上の引き伸ばす力が作用している場合に伸長させることでプレーヤキャラクタCPを簡単な処理で伸ばすことができる。これを図示すると、例えば図22および図23のように表現できる。
図22および図23は、本実施形態における強制伸長の概念を説明するための図であって、骨格モデルBMを俯瞰した図に相当する。
図22は、他のオブジェクトとの接触が無い状態で、プレーヤキャラクタCPを伸長する力が作用している場合を示している。このケースの場合、他のオブジェクトとの接触が無いので、全体が一つの登録区間と見なされる。図22(a)に示すように、骨格モデルBMの前端ノード2frと後端ノード2rr夫々に互いに反対方向に向いて働く操作力f1,f2が作用している。しかし、この段階では骨格モデルBMが湾曲した状態にあり、前端ノード2frから後端ノード2rrまでの直線距離LSは全長ΣLnに満たない。したがって、新たなノードは追加されない。しかし、両操作力によって骨格モデルBMが左右に引っ張られて、図22(b)〜(c)に示すように変化して骨格モデルBMが直線状態に至ると、前端ノード2frから後端ノード2rrまでの直線距離LSは全長ΣLn以上の条件を満たす。この状態で依然前端ノード2frと後端ノード2rrに相反する基準値以上の大きさの力(図中、F1及びF3)が作用していれば、ノード2frとノード2rrはそれぞれ図の左側及び右側に連結子4の長さだけ移動される。そして、これら両端ノードと隣接し連結するノード2m或いはノード2nとの間に新たなノード2adがそれぞれ追加されて、骨格モデルBMが伸ばされることとなる。
図23は、他のオブジェクトとの接触が有る状態で、プレーヤキャラクタCPを伸長する力が作用している場合を示している。図23(a)に示すように、プレーヤキャラクタCPが車のおもちゃ12を回避して左旋回しようとしたところ、おもちゃ12にノード2m、ノード2nおよび後端ノード2rrで接触し、ノード2mで謂わば「引っかかってしまった」状態になっている。尚、破線の円がヒット判定領域6を示している。
このケースでは、前端ノード2frとノード2mを端とする登録区間SC1と、ノード2mとノード2nを端とする登録区間SC2と、ノード2nと後端ノード2rrを端とする登録区間SC3とが登録されることになる。そして、この状態で左旋回を続けようとすると、図23(b)に示すように、ノード2mには前端ノード2frに作用する操作力F1の反力として外力F3が作用し、この操作力F1と外力F3との登録区間SC1の線分方向成分が基準以上の大きさに達していれば登録区間SC1が伸ばされる。換言すると、登録区間SC1の両端のノードには、複数の外力が作用しており、それら複数の外力の方向が離反方向で且つ離反力の大きさが所定の超過力条件を満たしているので、両端のノードの隣接位置に新たなノードが追加挿入される。
図23(a)の状態では、登録区間SC1は湾曲状態にあるので新たなノードが追加されることなく、図23(b)のように直線状態になった後、図23(c)のように登録区間SC1において区間両端部にそれぞれ新たなノード2adが追加される。この結果、プレーヤキャラクタCPはおもちゃ12に引っかかったところから前方部分のみが伸びるといった、伸縮自在なキャラクタのそれらしい動きを実現し、しかも簡単な処理で実現することができる。尚、同図の例ではノード2mが作用する力の関係で所定の基準値以上に動かない状態の場合には、図の右方向には伸びないと判断して、ノード2frとノード2kとの間に新たなノード2adを追加し、ノード2kとノード2mとの間には追加しない構成としても良い。
また、本実施形態における強制伸長処理では、ノード増減許可タイマーを用いて、伸長制御の実行タイミングを制限する構成を有している。例えば、ステップS214でノード増減許可タイマーをリセット後にリスタートすることによって、次の制御サイクルでステップS210に処理が移行しても、タイマーが基準値に達していなければノードの追加は実行されないことになり、やがて十分に時間が経過した時点でステップS210に処理が移行するとノードの追加が実行されることになる。つまり強制伸長もまた、任意伸長と同様にある一定時間間隔で行われることとなり、見かけ上短期間の間にズルズルと伸びるのではなくゆっくりと時間的な溜めを作りながら伸びるように表現される。結果、強く引っ張られるのに抵抗しつつ止む無く伸びてしまっているといった印象をプレーヤに与え、いかにもプレーヤキャラクタCPが伸ばされている感じを与えることができる。
さて、強制伸長処理を終了したならば、ゲーム演算部210は図9のフローに戻り、次いでノード移動処理を実行してプレーヤキャラクタCPを移動させる(ステップS12)。
図24は、本実施形態におけるノード移動処理の流れを説明するためのフローチャートである。本実施形態では、直列状の関節構造を成す骨格モデルBMの各ノードの移動を制御することによって、プレーヤキャラクタCPの移動を制御する。そして、骨格モデルBMには、前端ノードおよび後端ノードそれぞれに、右アナログレバー1236、左アナログレバー1238からの操作入力に応じた操作力が設定される。つまり、基本的に骨格モデルBMは二つの力影響を考慮して移動制御される。移動制御を正確に行うには、骨格モデルBMの各ノードに作用する作用力ベクトル530eについて運動方程式を解けば良いことが容易に分かる。しかし、プレーヤキャラクタCPは伸縮自在なキャラクタであり、状況によっては多数のノードを有することとなり、運動方程式を解く手法では多大な処理負荷となりゲームとしての応答性を損なう恐れがある。
そこで、本実施形態では、前端ノードを最初に動かし、それに引き続いて他のノードが移動した条件で求めた第1移動予定位置と、後端ノードを最初に動かし、それに引き続いて他のノードが移動した条件で求めた第2移動予定位置とに基づいて、真の移動予定位置を求めることで処理負荷の増加を軽減する。
つまり、図24に示すように、ゲーム演算部210は、先ず第1移動予定位置座標算出処理を実行して全ノードについての第1移動予定位置を求め(ステップS230)、次いで第2移動予定位置座標算出処理を実行して全ノードについての第2移動予定位置を求める(ステップS232)。
図25は、本実施形態における第1移動予定位置座標算出処理の流れを説明するためのフローチャートである。同図に示すように、第1移動予定位置座標算出処理では先ず、ゲーム演算部210は前端ノードから連結順に全てのノードについてループFの処理を実行する(ステップS250〜278)。
ループFでは先ず、処理対象のノードの連結順を判定する(ステップS272)。
処理対象ノードの前端から数えた連結順が「1」の場合(ステップS272の「1」)、つまり処理対象が前端ノードである場合には、前端ノードに作用している作用力ベクトル530eをもとに運動方程式を解いて、ゲーム画面の次の描画タイミングにおける位置座標を算出し、これを第1移動予定位置座標として記憶部500に第1移動予定位置データ534の移動予定位置座標534cに格納する(ステップS254)。
次いでゲーム演算部210は、処理対象ノードの第1定数k1を算出する(ステップS276)。第1定数k1は、処理対象ノードから前端ノードまでの距離に相当する。本実施形態では、連結子4が固定長Lなので「連結順−1」の値を、第1移動予定位置データ534の第1定数値534dに格納する。そして、前端ノードに対するループFの処理を終了する。
次に、図27(a)を参照しながら処理対象ノードの前端から数えた連結順が「2」の場合について説明する。尚、移動前の現在のノードをハッチング付きで表現している。
処理対象ノードの前端から数えた連結順が「2」の場合(ステップS252の「2」)、つまり処理対象が前端ノード2frの次に連結するノード2bである場合、ゲーム演算部210は、先に求めた前端ノード2frの第1移動予定位置座標P1を中心に、連結子4の固定長Lを半径とした当該処理対象ノードの移動先候補球面14を算出する(ステップS256)。
次いで、処理対象ノード2bに作用する作用力F4の作用方向直線と、算出した移動先候補球面との交点Pcを算出する(ステップS258)。更に、前端ノードの作用力ベクトルF1の作用方向逆向きを中心として、ノード2frに対する連結子4が取りうる拘束角度範囲θrを求める(ステップS260)。拘束角度範囲θrの角度の幅は、ノード2と連結子4との結合角度に設定された角度範囲θと同じである。そして、先に求めた移動先候補球面14から拘束角度範囲θrに含まれる移動候補領域16を算出する(ステップS268)。この移動候補領域16が、ノードと連結子との拘束条件に従った結果、連結順「2」のノードが移動し得る範囲ということになる。
そこで次に、ゲーム演算部210は、ステップS258で求めた交点Pcがこの移動候補領域16内に存在するか否かを判定する(ステップS270)。領域内に存在する場合には(ステップS270のYES)、交点Pcを処理対象ノードの第1移動予定位置座標とし(ステップS272)、連結順を第1定数k1として(ステップS276)、ループFの処理を終了する。図27(a)のケースでは、交点Pcは移動候補領域16内に存在するので、同点が第1移動予定位置座標となる。
一方、ステップS258で求めた交点Pcがこの移動候補領域内に存在しない場合には(ステップS270のNO)、交点Pcの最近接傍点(移動候補領域16の交点Pcよりの端の点)を移動候補領域16から算出して第1移動予定位置座標とし(ステップS274)、連結順を第1定数k1として(ステップS276)、ループFの処理を終了する。
次に、図27(b)を参照しながら処理対象ノードの前端から数えた連結順が「3」以上の場合について説明する。
処理対象ノードの前端から数えた連結順が「3」以上の場合(ステップS252の「3以上」)、ゲーム演算部210は、処理対象ノード2cより連結順が一つ前のノード2bの第1移動予定位置座標P2を中心に移動先候補球面14を算出し(ステップS262)、処理対象ノード2cに作用する作用力ベクトルF5の作用方向直線と移動先候補球面14との交点Pcを算出する(ステップS264)。次いで、連結順二つ前のノードの第1移動予定位置座標P1から連結順一つ前のノードの第1移動予定位置座標P2への方向を中心として拘束角度θrを設定する(ステップS266)。以下、処理対象ノードの連結順が「2」の場合と同様に処理して(ステップS268〜S276)、ループFの処理を終了する。
尚、図27(b)のケースでは、交点Pcが移動候補領域16内に存在しないので、移動候補領域16の交点Pcよりの端の点P3が、ノード2cの第1移動予定位置座標とされる。
そして、全てのノードについてループFの処理を実行したならば、ゲーム演算部210は、次いで第2移動予定位置座標算出処理を実行する。
図26は、本実施形態における第2移動予定位置座標算出処理の流れを説明するためのフローチャートである。第2移動予定位置座標算出処理は、基本的に第1移動予定位置座標算出処理と同様の処理であり説明は省略する。尚、異なる点は、連結順を後端側から数え、算出した位置座標を第2移動予定位置座標とすること、そして後端からの「連結順−1」の値を第2定数k2とする点である。
さて、第1移動予定位置座標と、第2移動予定位置座標を求めたならば、図24のノード移動処理のフローに戻り、ゲーム演算部210は次に実際に移動制御に適用される各ノードの移動先位置座標を算出し、各ノードの位置を更新して(ステップS234)、ノード移動処理を終了する。
具体的には、第1予定位置座標データ534および第2予定位置座標データ536を参照し、算出対象のノード毎に求められた第1移動予定位置座標、第1係数k1、第2移動予定位置座標k2に基づき、次の式(1)に従って座標を求め、骨格モデル制御データ525の位置座標525bを変更する。
移動先位置座標=(k2/(k1+k2)×第1移動予定位置座標+k1/(k1+k2)×第2移動予定位置座標) ・・・・・・・・式(1)
式(1)によれば、前端ノード2frに近いほど、第1移動予定位置座標に重みがおかれて移動先位置座標が求められ、後端ノード2rrに近いほど第2移動予定位置座標に重みがおかれて移動先位置座標が求められる。したがって、厳密に運動方程式を解かずともある程度運動方程式に沿った動きに近い移動先位置座標を求めることができる。
ノード移動処理を終了したならば、図9のフローに戻り、ゲーム演算部210はノード移動処理によって位置が更新された骨格モデルBMに基づいて外皮の形成処理を実行して、プレーヤキャラクタPCの表示モデルをゲーム空間内に形成する(ステップS14)。
次いで、ゲーム演算部210はゲームの終了条件を満たしているか否かを判定する(ステップS16)。本実施形態では、ワーム型のプレーヤキャラクタCPが、さまざまな障害を越えて所定位置に辿り着いている場合、あるいは障害で体力が失われて行動不能になった場合にゲーム終了条件を満たしていると判定する。
ゲーム終了条件を満たしていなければ(ステップS16のNO)、ステップS4に戻る。一方、終了条件を満たしていれば(ステップS16のYES)ゲーム終了となる。
以上の一連の処理によって、伸縮自在なプレーヤキャラクタを登場させるゲームを実現することができる。
[ハードウェア構成]
次に図28を参照して、本実施形態における家庭用ゲーム装置1200を実現するためのハードウェア構成の一例について説明する図である。家庭用ゲーム装置1200は、CPU1000、ROM1002、RAM1004、情報記憶媒体1006、画像生成IC1008、音生成IC1010、I/Oポート1012,1014がシステムバス1016により相互にデータ入出力可能に接続されている。I/Oポート1012にはコントロール装置1022が、I/Oポート1014には通信装置1024が、それぞれ接続されている。
CPU1000は、情報記憶媒体1006に格納されるプログラム、ROM1002に格納されるシステムプログラム(装置本体の初期化情報等)、コントロール装置1022によって入力される信号等に従って、装置全体の制御や各種データ処理を行う。
RAM1004は、CPU1000の作業領域等として用いられる記憶手段であり、情報記憶媒体1006やROM1002内の所与の内容、CPU1000の演算結果等が格納される。
情報記憶媒体1006は、プログラム、画像データ、音データ、プレーデータ等が主に格納されるものであり、情報記憶媒体として、ROM等のメモリやハードディスクや、CD−ROM、DVD、ICカード、磁気ディスク、光ディスク等が用いられる。尚、この情報記憶媒体1006は、図3に示す記憶部500に相当するものである。
また、この装置に設けられている画像生成IC1008と音生成IC1010により、音や画像の好適な出力が行えるようになっている。
画像生成IC1008は、CPU1000の命令によって、ROM1002、RAM1004、情報記憶媒体1006等から送られる情報に基づいて画素情報を生成する集積回路であり、生成される画像信号は、表示装置1018に出力される。表示装置1018は、CRTやLCD、ELD、プラズマディスプレイ、或いはプロジェクター等により実現され、図3に示す画像表示部360に相当する。
また、音生成IC1010は、CPU1000の命令によって、情報記憶媒体1006やROM1002に記憶される情報、RAM1004に格納される音データに応じた音信号を生成する集積回路であり、生成される音信号はスピーカ1020によって出力される。スピーカ1020は、図3に示す音出力部350に相当するものである。
コントロール装置1022は、プレーヤがゲームに係る操作を入力するための装置であり、その機能は、レバー、ボタン、筐体等のハードウェアにより実現される。尚、このコントロール装置1022は、図3に示す操作入力部100に相当するものである。
通信装置1024は装置内部で利用される情報を外部とやりとりするものであり、プログラムに応じた所与の情報を他の装置と送受すること等に利用される。尚、この通信装置1024は、図3に示す通信部370に相当するものである。
そして、ゲーム処理等の上記した処理は、図3のゲームプログラム502等を格納した情報記憶媒体1006と、これらプログラムに従って動作するCPU1000、画像生成IC1008、音生成IC1010等によって実現される。CPU1000、画像生成IC1008、及び音生成IC1010は、図3に示す処理部200に相当するものであり、主にCPU1000がゲーム演算部210、画像生成IC1008が画像生成部260に、音生成IC1010が音生成部250にそれぞれ相当する。
尚、画像生成IC1008、音生成IC1010等で行われる処理は、CPU1000或いは汎用のDSP等によりソフトウェア的に行ってもよい。この場合には、CPU1000が、図3に示す処理部200に相当することとなる。
以上、本発明を適用した第1実施形態について説明したが、本発明の適用可能な構成がこれらに限定されるものではなく、適宜構成要素の追加・削除・変更を行うことができる。
例えば、本実施形態では、プレーヤキャラクタCPの全身を関節構造のモデルとしたが、下半身や上半身といった一部のみを関節構造のモデルとしても良い。例えば、プレーヤキャラクタCPをカタツムリとし、殻の部分は形状・大きさが変化せず、体の部分をプレーヤキャラクタCPのような関節構造を有した伸縮自在なモデルとして設定する。そして、体の部分の制御については上述の第1実施形態を適用するならば、殻から出た体部分が自在に伸び縮みするカタツムリらしい様子を表現する事ができる。
また例えば、特定操作の入力方法は適宜設定することができる。
一例を挙げると、「立ち上がり」(又は「逆立ち」)姿勢の場合には、右アナログレバー1236又は左アナログレバー1238のうち、接地側に該当する一方のアナログレバーを中立状態から押し込み操作し、且つ他方のアナログレバーを上方向入力する(或いは他方のアナログレバーをゲームコントローラ1230外側から内側に向けて上向き半円を描くように操作入力する)としても良い。そして、「立ち上がり」姿勢の解除には、反対に一方のアナログレバーを中立状態から押し込み操作し、且つ他方のアナログレバーを下方向に入力する(或いは他方のアナログレバーをゲームコントローラ1230内側から外側に向けて上向き半円を描くように操作入力する)としても良い。
こうした入力方法は、胴長なプレーヤキャラクタCPの一方の端を固定して、他方の端を持ち上げる動作を連想させるので、操作を覚え易い上にプレーヤにいかにも「立ち上がる」といった印象を与えてキャラクタの操作感を向上させることができる。また、主たる操作入力手段となる右アナログレバー1236又は左アナログレバー1238から他のプッシュボタン等に指を動かす必要がないので操作性が向上するといった効果も生む。
また、本実施形態では、ノードの追加形成を前端ノードと連結順一つ後ろのノードとの間、および後端ノードと連結順一つ前のノードとの間の両方同時に行っているが、これを何れか一方ずつ交互に追加形成する構成としても良いし、何れか一方としても良い。
また、第1移動予定位置座標と第2移動予定位置座標の中間点を求めるステップS234の処理は、上記実施形態の式(1)に限らず適宜他の式を設定しても良い。
〔第2実施形態〕
次に、本発明を適用した第2実施形態について説明する。本実施形態は基本的に第1実施形態と同様の構成を有するが、操作入力部100の第1方向入力部102および第2方向入力部104として加速度センサを用いる点が異なる。尚、第1実施形態と同様の構成要素については同じ符号を付与しその説明は省略する。また符合の付与如何に係らず第1実施形態と同様の構成についての説明は省略し、特徴点についてのみ説明するものとする。
図29は、本実施形態における家庭用ゲーム装置1200Bの構成を示す図である。同図に示すように、本実施形態における家庭用ゲーム装置1200Bは、スティック状の2本のゲームコントローラ1230Rおよび1230Lを有する。
ゲームコントローラ1230Rおよび1230Lは、それぞれ第1実施形態における右アナログレバー1236および左アナログレバー1238に相当する方向入力デバイスとして十字方向キー1237を備え、親指を十字方向キー1237に添え、あたかも棒を持つ要領で左右両手に一本ずつ持って操作される。そして、内蔵する無線通信機1239によって制御ユニット1210に実装された無線通信機1214と無線通信を実現して、ゲーム装置本体1201に操作入力信号を出力する。また、ゲームコントローラ1230Rおよび1230Lは、それぞれ加速度センサ1240を内蔵しており、各コントローラの姿勢変化に伴う加速度を検出し操作入力信号として出力する。
尚、加速度センサ1240の代わりに傾斜センサを用いる構成としても良い。また、十字方向キー1237に代えてアナログレバーやタッチパッドを設ける構成としても良いのは勿論である。電源は図示しない内蔵バッテリーから供給されるものとする。
図30は、本実施形態における任意伸長操作の入力方法について説明する図である。図30(a)に示すように、本実施形態ではゲームコントローラ1230Rおよび1230Lから同時に、且つ互いに離反する方向に基準値以上の加速度が検出された場合に、任意伸長操作が入力されたと判定する。そして、任意伸長操作が入力されたと判定されたならば、図30(b)に示すように第1実施形態と同様にして骨格モデルBMに新たなノードが追加形成されてプレーヤキャラクタCPが伸ばされる。
また、任意短縮操作の判定も、ゲームコントローラ1230Rおよび1230Lの姿勢変化の検出に基づいてなされる。
図31は、本実施形態における任意短縮操作の入力方法について説明する図である。図31(a)に示すように、本実施形態ではゲームコントローラ1230Rおよび1230Lから同時に、且つ互いに近接する方向に基準値以上の加速度が検出された場合に、任意短縮操作が入力されたと判定する。そして、任意短縮操作が入力されたと判定されたならば、図31(b)に示すように第1実施形態と同様にして骨格モデルBMからノードが削除されてプレーヤキャラクタCPが縮められる。
本実施形態によれば、第1実施形態と同様の効果を奏するとともに、ゲームコントローラの姿勢変化によってプレーヤキャラクタCPの伸長・短縮を任意に操作できるようになる。したがって、プレーヤは十字方向キー1237等から指を離すことなく、任意伸長ならびに任意短縮の操作入力をする事が出来るので操作性が向上する。また、任意伸長操作および任意短縮操作の入力方法が、ゲームコントローラ1230Rおよび1230Lを引き離すような動作或いは縮めるような動作をイメージさせるので、幼年者でも操作を容易に覚える事が可能となる。
〔第3実施形態〕
次に、本発明を適用した第3実施形態について説明する。本実施形態は、基本的に第1及び第2実施形態と同様の構成を有するが、プレーヤキャラクタの伸縮に係る制御が異なる。尚、伸縮に係る制御の他は第1及び第2実施形態と同様にして実現できるので、ここでの説明は省略し、伸縮制御方法の違いについてのみ述べることとする。
図32は、本実施形態におけるプレーヤキャラクタのモデル構成を説明するための図である。同図に示すように、本実施形態におけるプレーヤキャラクタCPは、第1及び第2実施形態と同様に頭CPhおよび尾CPt方向を伸身前後方向として胴CPbの太さをそのままに伸縮自在なキャラクタとして設定されている。図32(a)に示すように、本実施形態における骨格モデルBM3は、基本的に第1実施形態における骨格モデルBMと同様であるが、連結子長さL3(L3a,L3b,L3c。=ノード2相互の距離。)が固定値ではなく増減可能な値とされる。連結子長さL3の値は、骨格モデル制御データ525に格納され、連結子4毎(=ノード間毎)に固有の値を持つように設定される
次に具体的な処理の流れについて説明する。
図33は、本実施形態における任意伸縮処理の流れを説明するためのフローチャートである。同図に示すように、任意伸縮処理Cでは先ず、ゲーム演算部210が第1実施形態におけるノード増減許可タイマー550に相当する伸縮許可カウントを所定数加算し(ステップS400)、加算した後の伸縮許可タイマーのカウント値が基準値に達しているか否かを判定する(ステップS402)。
伸縮許可タイマーのカウント値が基準値に達していなければ(ステップS402のNO)、任意伸縮処理はそのまま終了する。
伸縮許可タイマーのカウント値が基準値に達している場合(ステップS402のYES)、処理部200は更に所定の任意伸長操作が入力されているか否かを判定する(ステップS404)。第1実施形態と同様の構成とするならば、右アナログレバー1236から右方向入力され、同時に左アナログレバー1238から同時入力と見なせる程度の時間差で、左方向入力されたか否かを判定する。
そして、任意伸長操作が入力されたと判定された場合(ステップS404のYES)、ゲーム演算部210は、骨格モデルBM3の中心位置13を求め、この中心位置13から各ノードへの方向と相対距離を算出する(ステップS406)。中心位置13は、例えば骨格モデルBM3のノード2の総数が奇数ならば中間位置のノードの座標値とし、偶数の場合には中央の連結子4の中間位置とする。
次に、ゲーム演算部210は、各ノードの位置を、中心位置13を原点にして骨格モデルの中心位置13からの方向をそのままに、相対距離を所定比だけ拡大した位置に変更し(ステップS408)、伸縮許可タイマーをリセットしてリスタートする(ステップS416)。すなわち、ステップS406〜S408の処理によって、骨格モデルBM3の中心位置13をそのままに、相似条件を維持して所定比だけ拡大する。
この結果、図34に示すように、ゲームコントローラ1230で右アナログレバー1236と左アナログレバー1238の両レバーから同時入力で相反方向への操作入力が為されると、骨格モデルBM3は関節部位の数を維持したまま連結子4が伸ばされる。そして、この状態の骨格モデルBM3に基づいて、プレーヤキャラクタCPの表示モデルはポリゴンを形成することで、プレーヤキャラクタCPを胴CPbが伸びるように表示制御することが可能となる。
一方、任意伸長操作が入力されていない場合には(ステップS404のNO)、ゲーム演算部210は、任意短縮操作が入力されたか否かを判定する(ステップS410)。
任意短縮操作が入力されなければ(ステップS410のNO)、任意伸縮処理Cを終了する。任意短縮操作が入力されたと判定した場合には(ステップS410のYES)、ゲーム演算部210は、骨格モデルBM3の中心位置13を求め、この中心位置13から各ノードへの方向と相対距離を算出する(ステップS412)。そして、各ノードの位置を、骨格モデルの中心位置13からの方向をそのままにして、中心位置13を原点にして相対距離を所定比だけ縮小した位置に変更し(ステップS414)、伸縮許可タイマーをリセットしてリスタートする(ステップS416)。
すなわち、ステップS412〜S414の処理によって、骨格モデルBM3の中心位置13をそのままに、相似条件を維持して所定比だけ縮小する。この結果、骨格モデルBM3は関節部位の数は維持したまま全長が縮められ、この状態の骨格モデルBM3に基づいて表示モデルが形成されることによって、プレーヤキャラクタCP3が縮むように表示制御されることとなる。
したがって、少ない演算負荷でキャラクタを自在に伸縮することができる。しかも、伸縮のための操作入力は、通常、人がモノ(特に、紐状や棒状のモノ)を伸ばす感覚に似せられており、従来にない簡潔で直感的な操作でキャラクタの伸長を操作できる。
尚、ヒット判定モデルHMについては、第1実施形態のようにヒット判定領域6の大きさ(例えば、図2の半径R)を連結子長さL3に連動させるよりも、骨格モデルBM3の各連結子長さL3の増減にかかわらず初期値(例えば、図2の半径R)を維持し、連結子長さL3が所定の基準を上回った箇所を抽出し、当該ノード間の中間位置に新たにヒット判定領域6を増設する構成とするのが望ましい。
次に、本実施形態における強制伸長処理について説明する。
図35は、本実施形態における強制伸長処理Cの流れについて説明するためのフローチャートである。同図に示すように、基本的には第1実施形態における強制伸長処理と同様の流れを有する。具体的には、ゲーム演算部210は全ての登録区間についてループHを実行する(ステップS420〜S438)。
ループHでは、先ず区間登録データ532を参照し、処理対象の登録区間における両端のノードの直線距離LSを算出し(ステップS422)、当該登録区間の全ノード間の距離の総和に当る全長ΣLnを算出する(ステップS424)。そして、直線距離LSが全長ΣLnに満たない場合には(ステップS426のNO)、強制伸長はされずにループHの処理を終了する。
一方、直線距離LSが全長ΣLn以上の場合には(ステップS426のYES)、当該登録区間が外力によって伸ばされる条件を満たしているか否かを判定する(ステップS428)。
条件を満たしていなければ(ステップS428のNO)、現在の処理対象区間に関するループHの処理を終了する。
一方、条件を満たしていれば(ステップS428のYES)、第1実施形態のノード増減許可タイマー550に相当する伸縮許可タイマーの値が所定基準に達していれば(ステップS430のYES)、処理対象区間の両端ノードを作用する力に応じて所定距離だけ移動させる(ステップS432)。そして、両端ノードを除いて処理対象区間に含まれる他のノードを等間隔な位置に移動して当該登録区間に含まれる連結子4の長さを更新し(ステップS434)、伸縮許可タイマーをリセットしてリスタートして(ステップS436)、ループHを終了する。
図36は、本実施形態における他のオブジェクトとの接触が有る状態で、プレーヤキャラクタCPが伸長する例を示す概念図である。図36(a)に示すように、プレーヤキャラクタCPが車のおもちゃ12を回避して左旋回しようとしたところ、おもちゃ12にノード2m、ノード2nおよび後端ノード2rrで接触し、ノード2mで謂わば「引っかかってしまった」状態になっている。
このケースでは、前端ノード2frとノード2mを端とする登録区間SC1と、ノード2mとノード2nを端とする登録区間SC2と、ノード2nと後端ノード2rrを端とする登録区間SC3とが登録されることになる。そして、この状態で左旋回を続けようとすると、図36(b)に示すように、ノード2mには前端ノード2frに作用する操作力F1の反力として外力F3が作用し、この操作力F1と外力F3との登録区間SC1の線分方向成分が基準以上の大きさに達していれば登録区間SC1が伸ばされることになる。
図36(a)の状態では、登録区間SC1は湾曲状態にあるので連結子4a及び4bの連結子長は変化しない。しかし、図36(b)のように直線状態になった後更に作用力F1とF3が作用し続けている場合には、図36(c)のように、先ず作用力F1及びF3に応じて前端ノード2frとノード2mが移動される。そして、該当登録区間内に含まれるノード2kを、前端ノード2frとノード2mとを結ぶ直線状に等距離に配置する。結果、連結子4a及び4bが伸ばされ、プレーヤキャラクタCPはおもちゃ12に引っかかったところから前方部分(登録区間SC1)のみが伸びることとなる。よって、登録区間を単位にして、骨格モデルBM3の関節部位の数をそのままにプレーヤキャラクタCPの部分をより少ない演算負荷で伸長させることが可能となる。
尚、図36に示したように、強制伸長処理によって結果として連結子4の長さがバラバラになることが想定される。あまり連結子の長さに大きな違いが生じるとプレーヤキャラクタCPの見かけを損なう恐れがある。そこで、登録区間が一つしかない場合には連結子長さを平均化するように、両端ノードを除く中間のノードの位置を補正する処理を行うと好適である。
〔変形例〕
以上、本発明を適用した実施形態について説明したが、本発明の適用可能な構成がこれらに限定されるものではなく、適宜構成要素の追加・削除・変更を行うことができる。
例えば、第2実施形態において、左右のゲームコントローラを同時に、且つ基準値以上の大きさで上方向に持ち上げる動作をすることで、これを加速度センサ1240で検出し、「浮揚」の操作入力とすることもできる。この場合、ゲームコントローラ1230Rおよび1230Lの姿勢変化が、いかにもキャラクタを持ち上げるイメージを与え、操作性をより一層向上させることができる。
また、上記実施形態では、プレーヤキャラクタの伸長・短縮操作を例に挙げたがこれに限るものではない。例えば、プレーヤキャラクタが使用するアイテムの伸長・短縮制御に適用することもできる。また、固形のオブジェクトに限らず、シャボン玉などの不定形なオブジェクトの伸長・短縮制御にも適用できる。
また、上記実施形態で示された伸縮操作入力の方法を適用する場合、伸縮対象となるオブジェクトには必ずしも関節構造を設けなくとも良い。例えば、オブジェクトを大径パイプの中空部内に小径パイプを引き出し可能に挿入した2段式伸縮自在ストローといった構造としても良い。
そして、例えば第1実施形態と同様にゲームコントローラ1230で右アナログレバー1236と左アナログレバー1238の両レバーから同時入力と見なせる程度の時間差で互いに相反方向へ操作入力が為された場合に、大径パイプと小径パイプとの相対位置を離反させるようにして増加させて伸長する。反対に、右アナログレバー1236と左アナログレバー1238の両レバーから同時入力と見なせる程度の時間差で、互いに近接する方向へ操作入力が為された場合に、両パイプの相対位置を近接させるようにして減少させて伸縮する。よって、伸縮対象となるオブジェクトには必ずしも関節構造を設けなくとも簡潔で直感的な伸縮操作を実現できる。