説明

プログラム、情報記憶媒体及び画像生成装置

【課題】処理負荷の増大を招くことなく紐状キャラクタのおもしろみを生かしたアプリケーションを提供すること。紐状キャラクタを用いて接続表現を実現することができる。
【解決手段】本プログラムは、関節部位を直列に連結した関節構造を有する紐状部分を含むキャラクタオブジェクトを設定する設定手段と、操作入力情報又は所与のイベントに基づき前記キャラクタオブジェクトの前記関節に仮想力を作用させて前記関節を移動させることで前記キャラクタオブジェクトを動かすキャラクタオブジェクト制御手段と、複数のキャラクタオブジェクトが所与の接続条件を満たす場合には、これらのキャラクタオブジェクトの接続を行う接続手段と、してコンピュータを機能させ、前記接続手段は、所与のキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節と、他のキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節との位置関係が所与の接続条件を満たす場合に接続を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータに、キャラクタオブジェクトの登場する所与のアプリケーション画像やゲーム画像を生成させるためのプログラム、情報記憶媒体及び画像生成装置に関する。
【背景技術】
【0002】
近年のビデオゲームでは、ゲーム中に登場するキャラクタに、骨格モデルとその外観容姿を表す表示モデルとを予め用意しておき、骨格モデルを所定のモーションデータに従って動作制御し、動作制御された骨格モデルに基づいて表示モデルとしてポリゴンモデルをゲーム空間中に形成することによって動作制御するケースが多々見られる。
【0003】
しかし、ゲームに登場するキャラクタは、関節が可動するが基本的な大きさが変化しないものだけとは限らない。例えば、粘土やゴム、流体金属のように変形自在で、基本的な大きさが単なる拡大縮小の範疇を超えて変化するものもある。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2008−186325
【発明の概要】
【発明が解決しようとする課題】
【0005】
最近では伸縮自在な紐状キャラクタをのばしたり縮めたりして遊ぶビデオゲーム等も存在する。紐状キャラクタをのばしたり縮めたりして遊ぶのは、片手間で楽しめるため、情報機器に付属する様々なツールやゲームやユーティリティ等のアプリケーションに紐状キャラクタを登場させることで、ユーザの遊び心を満たすアプリケーションを提供することができる。
【0006】
しかし例えば携帯情報機器やゲーム装置等では処理能力の限られたハードウエアでユーザの操作入力に対して高い応答性を要求される。従って、処理負荷の増大を招くことなく、紐状キャラクタのおもしろみを生かしたアプリケーションの提供が望まれるところである。
【0007】
本発明はこうした事情を鑑みてなされたものである。本発明のいくつかの態様によれば、処理負荷の増大を招くことなく、紐状キャラクタのおもしろみを生かしたアプリケーションを実行するプログラム、情報記憶媒体及び画像生成装置を提供することができる。また紐状キャラクタを接続する画像を実現することができるプログラム、情報記憶媒体及び画像生成装置を提供することができる。
【課題を解決するための手段】
【0008】
(1)本発明は、
コンピュータに、キャラクタオブジェクトが移動動作する仮想空間の画像を生成させるためのプログラムであって、関節部位を直列に連結した関節構造を有する紐状部分を含むキャラクタオブジェクトを設定する設定手段と、操作入力情報又は所与のイベントに基づき前記キャラクタオブジェクトの前記関節に仮想力を作用させて前記関節を移動させることで前記キャラクタオブジェクトを動かすキャラクタオブジェクト制御手段と、複数のキャラクタオブジェクトが所与の接続条件を満たす場合には、これらのキャラクタオブジェクトの接続を行う接続手段と、してコンピュータを機能させ、前記接続手段は、所与のキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節と、他のキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節との位置関係が所与の接続条件を満たす場合に接続を行うプログラムに関する。
【0009】
また本発明は上記各手段を含む画像生成装置に関する。また本発明はコンピュータ読み取り可能な情報記憶媒体であって、上記各手段としてコンピュータを機能させるプログラムを記憶した情報記憶媒体に関する。
【0010】
所与の接続条件を満たすキャラクタオブジェクトの組み合わせを検索する処理をおこない、所与の接続条件を満たすキャラクタオブジェクトの組み合わせが存在する場合には、これらのキャラクタオブジェクトの接続を行うようにしてもよい。
【0011】
例えば所与のキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節と、他のキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節との距離が所定の閾値以下であるものを接続対象として抽出してもよい。
【0012】
このようにするとキャラクタオブジェクトの端同士が近づくと自動的に接続されるという自然な接続表現を実現することができる。
【0013】
(2)このプログラム、画像生成装置、情報記憶媒体において、
前記接続手段は、
キャラクタオブジェクトの直列に連結された関節構造の端に位置する関節同士を連結して、キャラクタオブジェクトの接続を行ってもよい。
【0014】
(3)このプログラム、画像生成装置、情報記憶媒体において、
前記キャラクタオブジェクトの紐状部分を切断して複数の切断されたキャラクタオブジェクトに分割する切断処理を行う切断手段と、してコンピュータを機能させ、前記切断手段は、複数の切断されたキャラクタオブジェクトが存在する状態で切断処理を行う場合には、切断対象となるキャラクタオブジェクトを選択する処理をおこない、選択されたキャラクタオブジェクトに対して切断処理を施し、切断されたキャラクタオブジェクトをさらに複数の切断されたキャラクタオブジェクトに分割し、前記接続手段は、所与の切断されたキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節と、他の切断されたキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節との位置関係が所与の接続条件を満たす場合に接続を行ってもよい。
【0015】
切断処理により切断対象のキャラクタオブジェクトを2つのキャラクタオブジェクトに分割してもよい。なお切断されたキャラクタオブジェクトは、完全な形態のキャラクタオブジェクトではなく、1つのキャラクタオブジェクトの切断された部分を示すキャラクタオブジェクトでもよい。
【0016】
例えばキャラクタオブジェクトの長さ基づき切断対象となるキャラクタオブジェクトを選択してもよい。例えば最も長いキャラクタオブジェクトを切断対象としてもよい。
【0017】
また関節間の距離に応じて変化する仮想的なバネ力等が関節に設定されている場合には、キャラクタオブジェクトに作用するバネ力の大きさに基づき切断対象となるキャラクタオブジェクトを選択してもよい。例えば複数のキャラクタオブジェクトの中でバネ力が最も大きいキャラクタオブジェクトを切断対象として選択してもよい。
【0018】
またキャラクタオブジェクト又はこれを構成する関節に優先順位を設定し、前記優先順位に基づきキャラクタオブジェクトを選択してもよい。例えば優先順位の高いキャラクタオブジェクトや優先順位の高い関節を含むキャラクタオブジェクトを切断対象として選択してもよい。
【0019】
又例えば長さに基づき切断対象となるキャラクタオブジェクトを選択して、長さが同じキャラクタオブジェクトが複数ある場合には、優先順位に従って切断対象となるキャラクタオブジェクトを選択してもよい。
【0020】
またキャラクタオブジェクトを構成する関節に設定されているパラメータ(例えば作用する力に関するパラメータ等)の値に基づき切断対象となるキャラクタオブジェクトを選択してもよい。例えば設定されているパラメータの値が最も大きいキャラクタオブジェクトを切断対象として選択してもよい。
【0021】
この様にキャラクタオブジェクトを切断する処理を繰り返すことで、キャラクタオブジェクトを細かく裁断する画像を生成することができる。
【0022】
(4)このプログラム、画像生成装置、情報記憶媒体において、
前記接続条件は、前記切断処理が行われた後の所定時間内は切断されたキャラクタオブジェクト同士についての接続は行わないようにしてもよい。
【0023】
切断処理の直後には切断されたキャラクタオブジェクトの切断点の関節同士は近くに位置していることが多く、せっかく分割してもすぐに接続されしまう可能性が高い。しかしこのようにすることで、分割後すぐに接続されることを防止することができる。
【0024】
(5)このプログラム、画像生成装置、情報記憶媒体において、
前記接続手段は、一括接続イベントが発生した場合には、1つのキャラクタオブジェクトから切断により分割されたすべてのキャラクタオブジェクトを接続してもよい。
【0025】
一括接続イベントは例えばユーザの操作入力により発生させるようにしてもよい。分割により多数のキャラクタオブジェクトが発生すると、ユーザの操作入力で接続させるのは、手間がかかり面倒である。しかし一括接続イベントを発生させることにより、自動的に切断前に戻すことができるので、ユーザは簡単に繰り返し切断操作を楽しむことができる。
【0026】
(6)このプログラム、画像生成装置、情報記憶媒体において、
前記仮想空間に前記キャラクタオブジェクトとは異なる他のオブジェクトを配置する処理又は移動させる処理を行う障害物設定手段と、
前記キャラクタオブジェクトと前記他のオブジェクトとの接触検出を行う接触検出手段と、してさらにコンピュータを機能させ、
前記キャラクタオブジェクト制御手段は、
前記キャラクタオブジェクトと前記他のオブジェクトとの接触検出結果に基づき、前記キャラクタオブジェクトの関節に仮想力を作用させて、前記関節部位を移動させることで前記キャラクタオブジェクトを動かしてもよい。
【0027】
この様にすると障害物に移動を制限されながら、キャラクタオブジェクトが接続される画像を生成することができる。
【0028】
(7)このプログラム、画像生成装置、情報記憶媒体において、
前記キャラクタオブジェクト制御手段は、前記操作入力情報として、前記仮想空間の画像が表示された表示部における接触位置の移動履歴情報を含む操作入力情報を取得し、前記接触位置の移動履歴情報に基づき、関節部位に作用させる仮想力の方向を決定してもよい。
【0029】
前記仮想空間の画像を表示する表示部をタッチパネルディスプレイ等で構成することにより、接触位置の移動履歴情報を含む操作入力情報を取得してもよい。
【0030】
この様にするとタッチ操作でダイレクトにキャラクタオブジェクトを動かす感覚が味わえるアプリケーションを提供することができる。
【0031】
(8)このプログラム、画像生成装置、情報記憶媒体において、
前記キャラクタオブジェクト制御手段は、前記キャラクタオブジェクトの関節に作用する仮想力に基づき、前記キャラクタオブジェクトの紐状部分を伸縮させてもよい。
【0032】
紐状部分の関節構造に新たな関節を追加することで伸長させてもよいし、関節間の距離を増大させることで伸長させてもよい。
【0033】
(9)このプログラム、画像生成装置、情報記憶媒体において、
前記キャラクタオブジェクト制御手段は、前記仮想力による関節の移動位置を演算して、演算結果に基づき隣り合う関節間の連結子の長さを可変に制御し、連結子の長さが所与の閾値を超えると、当該連結子で連結された関節間に新たな関節を追加してもよい。
【0034】
(10)このプログラム、画像生成装置、情報記憶媒体において、
前記キャラクタオブジェクト制御手段は、前記仮想力による関節の移動位置を演算して、演算結果に基づき隣り合う関節間の連結子の長さを可変に制御し、連結子の長さが所与の閾値を下回ると、当該連結子で連結された関節のいずれかを削除して、削除された関節に接続されていた2つの関節を新たに連結させてもよい。
【0035】
所与の閾値を下回った連結子で連結された関節のいずれを削除するかは、例えば関節に接続されている他方の連結子が短い方の関節を削除してもよい。また予め関節に割り付けられている所定の優先順に従って優先順位の低い方の関節を削除するようにしてもよい。
【0036】
(11)このプログラム、画像生成装置、情報記憶媒体において、
前記キャラクタオブジェクト制御手段は、前記仮想空間の画像が表示される表示部を含む装置に設けられた加速度センサからの加速度情報を取得し、取得した前記加速度情報に基づき、前記キャラクタオブジェクトの前記関節部位に仮想力を作用させて前記関節部位を移動させることで前記キャラクタオブジェクトを動かしてもよい。
【0037】
加速度センサで装置に働く重力や加速度を検出し、検出された加速度情報に基づき作用ベクトルを生成することで装置に働く重力や加速度を表現することができる。
【図面の簡単な説明】
【0038】
【図1】本実施形態における携帯情報機器の構成例を説明するための図。
【図2】本実施形態における機能構成の一例を示す機能ブロック図。
【図3】図3(A)(B)は、本実施形態におけるキャラクタオブジェクトの概要を説明するための図。
【図4】図4(A)(B)は、本実施形態におけるキャラクタオブジェクトのモデル構成を説明するための図。
【図5】キャラクタ制御データのデータ構成例を示す図。
【図6】作用力データのデータ構成例を示す図。
【図7】図7(A)〜(C)はタッチ操作に基づく操作力ベクトルの設定例を説明するための図。
【図8】図8(A)(B)は、キャラクタオブジェクトの各関節に作用する仮想力とキャラクタオブジェクトの動きについて説明するための図。
【図9】図9(A)(B)は誘導ベクトルについて説明するための図。
【図10】図10は、誘導制御によりキャラクタオブジェクトが目標配置状態に誘導される様子を示した図である。
【図11】アプリケーション画像の一例。
【図12】アプリケーション画像の一例。
【図13】図13(A)〜(C)は、キャラクタオブジェクトが切断されるアプリケーション画像。
【図14】キャラクタオブジェクトが細かく裁断されたアプリケーション画像。
【図15】図15(A)〜(D)は切断処理に伴う関節の連結制御処理について説明するための図。
【図16】図16(A)〜(C)は、障害オブジェクトと遭遇した場合のキャラクタオブジェクトの動きについて説明するための図。
【図17】図17(A)〜(C)は、障害オブジェクトと遭遇した場合のキャラクタオブジェクトの動きについて説明するための図。
【図18】図18(A)〜(D)は、切断処理に伴う関節の連結制御処理について説明するための図。
【図19】図19(A)、(B)は、本実施の形態の接続制御について説明するための図。
【図20】図20(A)(B)は操作力ベクトルが隣り合う関節間の距離を広げる方向に加わる例を示す図。
【図21】図21(A)(B)は操作力ベクトルが隣り合う関節間の距離を縮める方向に加わる例を示す図。
【図22】図22(A)は、関節の追加処理、図22(B)は、関節の削除処理について説明するための図である。
【図23】図23(A)(B)は、接続処理に伴う関節の連結制御処理について説明するための図。
【図24】タッチ操作に基づく操作力ベクトルの設定例を説明するための図。
【図25】本実施の形態の全体処理の流れを示すフローチャート。
【図26】本実施の形態の分割処理の流れを示すフローチャート。
【図27】本実施の形態の接続処理の流れを示すフローチャート。
【図28】本実施の形態の動作制御処理の流れを示すフローチャート。
【図29】図29(A)(B)はキャラクタオブジェクトの接続されるアプリケーション画像の例。
【発明を実施するための形態】
【0039】
以下、図面を参照しながら、本発明を適用した実施形態として、伸縮自在なキャラクタが登場するユーティリティが搭載された携帯情報機器を例に挙げて説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
【0040】
1. 構成
図1は、本実施形態の画像生成装置の一例である携帯情報機器の構成例を説明するための図である。
【0041】
本実施の形態の携帯情報機器10は、表示部12上でのタッチ操作により操作入力を行うことが可能なタッチパネルディスプレイ(タッチパネル、タッチディスプレイ、タッチスクリーンともいう)を備えた携帯電話である。なお表示部12は複数の指による同時操作が検出可能なマルチタッチパネルディスプレイで構成されていてもよい。また携帯情報機器10に加速度センサを内蔵していてもよい。また携帯情報機器10は、携帯型デジタル音楽プレーヤとしての機能やカメラ機能やインターネット閲覧機能やメール機能を有していてもよい。
【0042】
携帯情報機器10の本体は、例えばCPUや画像処理用LSI、ICメモリ等が実装された制御ユニット14、通信装置16を内蔵し、USBケーブル用のコネクタ18を備えていてもよい。
【0043】
携帯情報機器10は、内蔵されたメモリからシステムプログラムやアプリケーションプログラム及び各種設定データを読み出して、タッチパネルディスプレイから入力される操作入力に基づいて各種のアプリケーション演算を実行し、所与のアプリケーションを実行する。
【0044】
携帯情報機器10の制御ユニット14で生成されたアプリケーション画像は、表示部(タッチパネルディスプレイ)12上に出力される。ユーザは携帯情報機器10の表示部12に表示されるアプリケーション画像を見つつ、タッチパネルディスプレイで構成された表示部12をタッチ操作することで各種操作入力を行いアプリケーション画像を楽しむことができる。
【0045】
尚、アプリケーション実行に必要なアプリケーションプログラムおよび各種設定データは、通信装置16を介して通信回線1に接続し、外部装置からダウンロードして取得する構成であっても良い。ここで言う、通信回線とは、データ授受が可能な通信路を意味する。すなわち、通信回線とは、直接接続のための専用線(専用ケーブル)やイーサネット(登録商標)等によるLAN(Local Area Network)の他、電話通信網やケーブル網、インターネット等の通信網を含む意味であり、また、通信方法については有線/無線を問わない。
【0046】
図2は、本実施形態における機能構成の一例を示す機能ブロック図である。
【0047】
なお同図において本実施形態は、少なくとも処理部100を含めばよく(或いは処理部100と記憶部170を含めばよく)、それ以外の各部(機能ブロック)については任意の構成要素とすることができる。
【0048】
同図に示すように本実施形態では、操作入力部160と、処理部100と、音出力部132と、画像表示部122と、通信部142と、記憶部170を含む。
【0049】
操作入力部160は、プレーヤによってなされた各種の操作入力に応じて操作入力信号を生成し、処理部100に出力する。操作入力部160の機能は、レバー、ボタン、ステアリング、シフトレバー、マイク、センサ、タッチパネル等のハードウエアにより実現できる。図1では、タッチパネルディスプレイ12が操作入力部100として機能する。
【0050】
処理部100は、操作入力部160からの操作入力情報やプログラムなどに基づいて、アプリケーション実行処理、画像生成処理、或いは音生成処理などの各種の処理を行うもので、例えば各種プロセッサ(マイクロプロセッサ、メインプロセッサ、描画プロセッサ、DSP等)又はASIC(ゲートアレイ等)などのハードウエアや、プログラム(ゲームプログラム)により実現できる。図1では、ゲーム装置本体10に内蔵された制御ユニット14が処理部100として機能する。
【0051】
処理部100は、アプリケーション演算部110と、音生成部130と、画像生成部120と、通信制御部140とを含む。
【0052】
アプリケーション演算部110は、アプリケーションの実行処理を行う。例えば、アプリケーション空間を仮想空間中に形成する処理や、仮想空間中に配置されたキャラクタオブジェクトWC以外のキャラクタの動作制御処理、ヒット判定処理、物理演算処理等を実行する。
【0053】
また本実施形態のアプリケーション演算部110は、キャラクタオブジェクト制御部112、切断処理部114、接続処理部116を含む。
【0054】
アプリケーション演算部110は、関節を直列に連結した関節構造を有する紐状部分を含むキャラクタオブジェクトを設定する設定手段として機能する。キャラクタオブジェクト制御部112は、操作入力情報又は所与のイベントに基づきキャラクタオブジェクトの前記関節に仮想力を作用させて前記関節を移動させることで前記キャラクタオブジェクトを動かす。
【0055】
切断処理部114は、前記キャラクタオブジェクトの紐状部分を切断して複数の切断されたキャラクタオブジェクトに分割する切断処理を行うもので、複数の切断されたキャラクタオブジェクトが存在する状態で切断処理を行う場合には、切断対象となるキャラクタオブジェクトを選択する処理をおこない、選択されたキャラクタオブジェクトに対して切断処理を施し、切断されたキャラクタオブジェクトをさらに複数の切断されたキャラクタオブジェクトに分割する。
【0056】
また切断処理部114は、切断指示入力が行われた場合に、前記切断処理を行ってもよい。また切断処理部114は、前記キャラクタオブジェクトの長さに基づき切断対象となるキャラクタオブジェクトを選択してもよい。また切断処理部114は、前記切断処理として、直列に連結された関節構造の隣り合わせた第1の関節と第2の関節の関節間の連結を解消し、第1の関節を含むキャラクタオブジェクトと第2の関節を含むキャラクタオブジェクトに分割してもよい。また切断処理部114は、キャラクタオブジェクトに含まれる関節の数に基づき当該キャラクタオブジェクトが切断可能状態にあるか否か判断し、切断可能状態にあるキャラクタオブジェクトを切断対象としてもよい。また切断処理部114は、切断指示入力が行われた場合に、切断可能状態にあるキャラクタオブジェクトが1つも存在しない場合には、切断を行わないようにしてもよい。
【0057】
接続処理部116は、所与のキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節と、他のキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節との位置関係(距離を含む)が所与の接続条件を満たす場合にこれらのキャラクタオブジェクトの接続を行う。接続処理部116は、キャラクタオブジェクトの直列に連結された関節構造の端に位置する関節同士を連結して、キャラクタオブジェクトの接続を行ってもよい。接続処理部116は、前記切断処理が行われた後の所定時間内は切断されたキャラクタオブジェクト同士についての接続は行わないようにしてもよい。
【0058】
接続処理部116は、接続イベントが発生した場合には、1つのキャラクタオブジェクトから切断により分割されたすべてのキャラクタオブジェクトを接続してもよい。
【0059】
アプリケーション演算部110は前記仮想空間に前記キャラクタオブジェクトとは異なる他のオブジェクトを配置する処理又は移動させる処理を行う障害物設定手段と、前記キャラクタオブジェクトと前記他のオブジェクトとの接触検出を行う接触検出手段として機能させてもよい。
【0060】
キャラクタオブジェクト制御部112は、前記キャラクタオブジェクトと前記他のオブジェクトとの接触検出結果に基づき、前記キャラクタオブジェクトの関節に仮想力を作用させて、前記関節を移動させることで前記キャラクタオブジェクトを動かしてもよい。またキャラクタオブジェクト制御部112は、前記キャラクタオブジェクトの関節に作用する仮想力に基づき、前記キャラクタオブジェクトの紐状部分を伸縮させてもよい。またキャラクタオブジェクト制御部112は、前記仮想力による関節の移動位置を演算して、演算結果に基づき隣り合う関節間の連結子の長さを可変に制御し、連結子の長さが所与の閾値を超えると、当該連結子で連結された関節間に新たな関節を追加してもよい。またキャラクタオブジェクト制御部112は、前記仮想力による関節の移動位置を演算して、演算結果に基づき隣り合う関節間の連結子の長さを可変に制御し、連結子の長さが所与の閾値を下回ると、当該連結子で連結された関節のいずれかを削除して、削除された関節に接続されていた2つの関節を新たに連結させてもよい。またキャラクタオブジェクト制御部112は、前記仮想空間の画像が表示される表示部を含む装置に設けられた加速度センサからの加速度情報を取得し、取得した前記加速度情報に基づき、前記キャラクタオブジェクトの前記関節に仮想力を作用させて前記関節を移動させることで前記キャラクタオブジェクトをうごかしてもよい。
【0061】
音生成部130は、例えばデジタルシグナルプロセッサ(DSP)などのプロセッサやその制御プログラムによって実現され、アプリケーション演算部110による処理結果に基づいてアプリケーションに係る効果音やBGM、各種操作音の音信号を生成し、音出力部132に出力する。
【0062】
音出力部132は、音生成部130から入力される音信号に基づいて効果音やBGM等を音出力するための装置である。図1では携帯情報機器のスピーカ(図示せず)がこれに該当する。
【0063】
画像生成部120は、例えば、デジタルシグナルプロセッサ(DSP)などのプロセッサ、その制御プログラム、フレームバッファ等の描画フレーム用ICメモリ等によって実現される。画像生成部120は、アプリケーション演算部110による演算結果に基づいて1フレーム時間(1/60秒)で1枚のアプリケーション画像を生成し、生成したアプリケーション画像の画像信号を画像表示部122に出力する。
【0064】
画像表示部122は、画像生成部120から入力される画像信号に基づいて各種アプリケーション画像を表示する。例えば、タッチパネルディスプレイ、フラットパネルディスプレイ、ブラウン管(CRT)、プロジェクター、ヘッドマウントディスプレイといった画像表示装置によって実現できる。図1では携帯情報機器10の表示部(タッチパネルディスプレイ)12が該当する。
【0065】
通信制御部140は、データ通信に係るデータ処理を実行し、通信部142を介して外部装置とのデータのやりとりを実現する。
【0066】
通信制御部140は、通信回線と物理レベルで接続して通信を実現する。例えば、無線通信機、モデム、TA(ターミナルアダプタ)、有線用の通信ケーブルのジャックや制御回路等によって実現され、図1では通信装置16がこれに該当する。
【0067】
記憶部170は、処理部100に携帯情報機器を統合的に制御させるための諸機能を実現するためのシステムプログラムや、アプリケーションを実行させるために必要なアプリケーションプログラム、各種データ等を記憶する。また、処理部100の作業領域として用いられ、処理部100が各種プログラムに従って実行した演算結果や操作入力部160から入力される入力データ等を一時的に記憶する。この機能は、例えばRAMやROMなどのICメモリ、ハードディスク等の磁気ディスク、CD−ROMやDVDなどの光学ディスクなどによって実現される。
【0068】
本実施形態では、記憶部170はアプリケーションプログラム174を記憶している。処理部100がアプリケーションプログラムを読み出して実行することによって、処理部100にアプリケーション演算部110としての機能を実現させることができる。
【0069】
また、記憶部170には、予め用意されるデータとしてキャラクタ初期設定データ176やゲーム空間設定データ等が記憶されている。また、ゲームの進行に伴って随時書き換えられるデータとして、キャラクタ制御データ(図示せず)、作用力データ(図示せず)、アプリケーション空間設定データ(図示せず)等が記憶される。
【0070】
アプリケーション空間設定データは、仮想空間にアプリケーション空間を形成するための各種データが格納されている。例えば、キャラクタオブジェクトWCが移動する地表や建物を含む配置物に関するモデルデータ、テクスチャデータおよびモーションデータが含まれる。また、アプリケーション実行中にキャラクタオブジェクトWC以外にコンピュータによって自動制御されるノンプレーヤキャラクタ(NPC)が登場する場合には、NPCのモデルデータやテクスチャデータおよびモーションデータなどが含まれる。
【0071】
キャラクタ初期設定データ176は、キャラクタオブジェクトWCの初期設定データが格納されている。本実施形態では、ゲームスタート時におけるキャラクタオブジェクトWCはある一定の長さの胴WCbを有するように設定されている(図3(A)参照)。すなわち、所定数のノード202が配列された骨格モデルBMおよびそのヒット判定モデルHMに関するデータが格納されている(図4(A)(B)参照)。また、キャラクタオブジェクトWCの頭WChや尾WCtのモデルデータ、胴WCbの部分に外皮を形成する際のテクスチャデータなどが格納されていてもよい。
【0072】
そして、キャラクタオブジェクトWCをゲーム実行中に制御するためのデータが、キャラクタ制御データとして格納されている。
【0073】
2.キャラクタオブジェクトの説明
図3(A)(B)は、本実施形態におけるキャラクタオブジェクトの概要を説明するための図である。キャラクタオブジェクトWCは、一頭一尾の想像上のワーム(worm:細長く足のない動物。)としてデザインされており、紐のように柔軟であるとともに図3(A)に示すように伸縮自在、また図3(B)に示すように湾曲自在な胴WCbを有する。キャラクタオブジェクトWCは、頭WChおよび尾WCt方向を前後方向として胴WCbの太さをそのままに伸縮自在なキャラクタオブジェクトとして設定されている。尚、本実施形態では胴WCbが伸び縮みする形態として説明するが、頭WChおよび尾WCtを含む全身が自在に伸び縮みする設定としても良いのは勿論である。
【0074】
この様に本実施の形態ではキャラクタオブジェクトの胴WCb部分が関節を直列に連結した関節構造を有する紐状部分として構成されている。
【0075】
図4(A)(B)は、本実施形態におけるキャラクタオブジェクトのモデル構成を説明するための図である。
【0076】
キャラクタオブジェクトWCは、基本状態(伸縮する前)においては、図4(A)に示すように、複数のノード202が、互いに前後の距離l1、l2、l3を一定にした直列状の関節構造を成す骨格モデルBMを有する。別の言い方をするならば、関節に相当するノード202(=制御点)が連結子204によって関節構造として連結されており、伸長前の状態の連結子204は全て同じ初期値kl(l1=l2=l3=kl)を有している。従ってノード202を関節と見なすと、骨格モデルBMは、複数の関節が直列状に連結されていることになる。
【0077】
図4(B)に示すように、基本状態(伸縮する前)においてはキャラクタオブジェクトWCにはヒット判定モデルHMが設定されている。ここではキャラクタオブジェクトWCが移動、動作する仮想空間が2次元平面である場合を例にとり説明する。本実施形態におけるヒット判定モデルHMでは、各ノードにヒット判定領域206が設定されている。本実施形態におけるヒット判定領域206は、対応するノード202の位置座標を中心にして、半径R(=連結子204の長さl1、l2、l3)の円状領域として設定されている。
【0078】
なお連結子204が伸縮後のヒット判定モデルHMについては、ヒット判定領域206の大きさ(例えば、図4の半径R)を連結子204の長さl1,l2,l3に連動させずに、骨格モデルBMの各連結子204の長さl1,l2,l3の増減にかかわらず初期値klを維持してもよい。また連結子204の長さl1,l2,l3がヒットチェック領域増設判定用の閾値hslを上回った箇所を抽出し、当該ノード間の中間位置に新たにヒット判定領域206を増設する構成としてもよい。
【0079】
なお本実施の形態では、後述するように各連結子長が関節増設判定用の閾値bslを超えた場合には新たな関節(ノード)を増設するので、ヒットチェック領域増設判定用の閾値hslを関節増設の判定用閾値bslにあわせるようにすると、関節(ノード)とヒットチェック領域の中心点が常に1対1で対応することになり制御が複雑になるのを防ぐことができる。
【0080】
3.キャラクタ制御データ
図5は、本実施形態におけるキャラクタ制御データ300のデータ構成例を示す図である。同図に示すように、キャラクタ制御データ300は、その時点におけるキャラクタオブジェクトWCの関節制御データ310と、ヒット判定制御データ320とを含む。
【0081】
関節制御データ310は、キャラクタオブジェクトの関節(ノード)の位置座表と関節の連結状態に関するデータである。各関節に対応するノードのノード識別情報312に対応づけて、該ノードの仮想空間座標系における位置座標314(仮想空間が2次元平面である場合の座標例)と、頭側連結ノード識別情報316と、尾側連結ノード識別情報318が格納されている。
【0082】
頭側連結ノード識別情報316および尾側連結ノード識別情報318は、当該ノードの配列順前後(頭側/尾側)に連結されているノードの識別情報を格納している。すなわち、前者は当該ノードの頭側(前方側)に連結されているノードの識別情報を格納し、後者は当該ノードの尾側(後方側)に連結されているノードの識別情報を格納する。先端のノードである場合には、連結先が無いことになるので、例えば同図に示すように「NULL」が格納される。
【0083】
ヒット判定制御データ320には、ヒットチェックに使用するデータである。各関節に対応するノードのノード識別情報322に対応づけて、ヒット判定領域情報324と、ヒットフラグ326とが格納されている。
【0084】
ヒット判定領域情報326は、当該ノードに対応付けられるヒット判定領域206を定義するデータとして、例えば仮想空間座標系における位置座標と判定領域の半径Rの値を格納する。本実施形態では、対応するノードを中心に半径Rの円形判定領域が設定されるので、同図のように各領域半径R(R1、R2・・・)が格納されている。また、本実施形態では半径Rは一定であるが、例えばゲーム中にキャラクタオブジェクトWCが太ったり痩せたりする設定やノード間の距離が可変な設定とするならば適宜半径Rを可変することによって、適切なヒット判定を維持することができる。
【0085】
そして、当該ノードに対応付けられているヒット判定領域で、他のオブジェクトと衝突していると判定された場合には、対応づけられたヒットフラグ326を「0(未ヒット)」から「1(ヒット)」に変更して、ヒット状態を記憶する。
【0086】
本実施の形態では、キャラクタオブジェクトの前記関節に仮想力を作用させて前記関節を移動させることで前記キャラクタオブジェクトを動かす。作用力データ330は、各ノードに作用している仮想力に関する情報を格納している。
【0087】
図6は、本実施形態における作用力データ(仮想力)330のデータ構成例を示す図である。同図に示すように、各関節に対応するノードのノード識別情報332に対応づけて、操作力ベクトル334、外力ベクトル336、誘導ベクトル338、およびこれらの力の合力に当る作用力ベクトル340が格納されている。その他、慣性力ベクトルや重力ベクトルなどゲーム中にキャラクタオブジェクトWCの動作制御に影響を与える力を適宜設定することができる。
【0088】
操作力ベクトル334は、各関節(ノード)に作用するベクトルであり、操作入力に応じて設定される仮想力(=操作力)である。
【0089】
外力ベクトル336は、各関節(ノード)に作用するベクトルであり、仮想空間自体や、仮想空間に配置されている他のオブジェクトの影響によって作用する仮想力である。例えば、重力、他のオブジェクトとの衝突や接触によって生じる力や、環境風を受けることによって生じる力がこれに含まれる。その他、電磁力や、好物に惹きつけられる様子を表す仮想力など適宜含めることができる。
【0090】
誘導ベクトル338は、各関節(ノード)に作用するベクトルであり、目標配置状態への誘導制御するための仮想力である。
【0091】
キャラクタオブジェクトの動きは、操作力ベクトルや外力ベクトルや誘導ベクトルの合力である作用力ベクトルによって制御されることになる。
【0092】
4.操作入力と操作力ベクトル
ユーザの操作入力(タッチ入力)により発生する操作力ベクトルについて説明する。 例えば本実施の形態では、図1に示すようなタッチパネルディスプレイに表示されたキャラクタオブジェクトにタッチして、タッチしたまま指を所与の方向に動かすことにより、キャラクタオブジェクトを動かすことができる。これはキャラクタオブジェクトにタッチした箇所と関節の位置、及び動かした方向に基づき演算される操作力ベクトル(仮想力)をキャラクタオブジェクトの各関節に作用させることで実現している。
【0093】
図7(A)〜(C)、図24はタッチ操作に基づく操作力ベクトルの設定例を説明するための図である。
【0094】
図7(A)は、図7(B)に示すような関節K1〜K6が直列に接続されたキャラクタオブジェクトWCがタッチパネルディスプレイ12に表示されている様子を示している。ここでユーザの指350がタッチパネルディスプレイ12上の点P1をタッチして点P2まで指を移動させると、タッチパネルディスプレイ12は点P1から点P2までユーザの指350が接触移動したことを検出し操作入力情報(例えば接触移動軌跡、始点と終点、移動時間、移動開始時刻と移動終了時刻、接触圧力等の少なくとも1つの情報)を出力する。
【0095】
この様な操作入力が行われた場合、例えば図7(C)に示すように接触移動の始点P1と終点P2に基づき操作力ベクトル360の方向を決定してもよい。ここでタッチ操作により各関節に作用する操作力ベクトルの大きさは、タッチ位置と各関節の大きさによっても異なってくる。従って最も近い関節に作用させる操作力ベクトルの大きさ(最大値)をタッチ操作の接触圧力や移動時間に基づき求めて、当該最大値に基づき他の関節に作用させる操作ベクトルの大きさを求めてもよい。
【0096】
図24は、タッチ操作によりキャラクタオブジェクトの各関節に作用力ベクトルが作用している様子を示している。ここでタッチ操作に基づき演算した操作力ベクトル(大きさが最大値をとるもの)svを接触位置P1の近傍の関節(例えばK3やK4)に直接作用させてもよい。すなわち図24において関節K3に作用する操作力ベクトルSV3=sv、関節K4に作用する操作力ベクトルSV4=svとしてもよい。また近傍以外の関節SV1,SV2,SV5,SV6には操作力ベクトルsvの大きさを減衰させた操作力ベクトルsv’、sv”を作用させてもよい。すなわち図24において関節K2に作用する操作力ベクトルSV2=sv’、関節K5に作用する操作力ベクトルSV5=sv’としてもよい。また図24において関節K1に作用する操作力ベクトルSV1=sv”、関節K6に作用する操作力ベクトルSV6=sv”としてもよい。この様に操作入力情報に基づき各関節(ノード)に作用させる操作力ベクトルを演算する。演算された操作力ベクトルは、作用力データとして各関節(ノード)に対応するノード識別情報332に対応づけて記憶される(図6参照)。
【0097】
5.キャラクタの移動制御
図8(A)(B)は、キャラクタオブジェクトの各関節に作用する作用力ベクトルとキャラクタオブジェクトの動きについて説明するための図である。
【0098】
図8(A)は、キャラクタオブジェクトの各関節に作用力ベクトルが作用している様子を示しており、図8(B)は、キャラクタオブジェクトの各関節に作用する作用力ベクトルによってキャラクタオブジェクトが移動する様子を示している。
【0099】
各関節に作用する作用力ベクトルは、作用力データのテーブル(図6参照)から読み出して設定してもよい。
【0100】
そしてこれらの作用力ベクトルがキャラクタオブジェクトWCの各関節K1からK6に作用することにより、各関節K1〜K6の位置は、図8(B)に示すようにK1p〜K6p→K1p’〜K6p’に移動する。関節位置の移動により、キャラクタオブオブジェクトWCの位置と形状が変化する。
【0101】
なお関節位置の移動により各関節間の距離(連結子の長さ)が変化することになる。すなわちキャラクタオブジェクトWCが伸縮することになる。各関節間の距離が変化して、連結子の長さが所定の閾値を超えると、後述するように新たな関節が生成されるようにしてもよい。
【0102】
6.キャラクタオブジェクトの誘導制御
図9(A)(B)は誘導ベクトルについて説明するための図である。図9(A)に示すように時刻t0(フレーム0)においてキャラクタオブジェクトWCが380のような状態にあるとする。ここでキャラクタオブジェクトWCを390に示すような配置状態に移動させたい場合、配置状態390に対応する目標配置状態情報を設定して、誘導制御を行う。
【0103】
キャラクタオブジェクトWCの各関節K1〜K6に対応する目標配置状態情報として、配置状態390にあるキャラクタオブジェクトMWCの関節MK1〜MK6の位置座標を設定してもよい。そして目標配置状態情報に基づき、キャラクタオブジェクトWCの各関節K1〜K6を、関節MK1〜MK6の位置に移動させるための誘導ベクトルUV1〜UV6を生成し、各関節K1〜K6に作用させる。
【0104】
ここで、誘導ベクトルUV1〜UV6は、各フレームにおけるキャラクタオブジェクトの各関節K1〜K6の位置座標と目標配置状態にあるキャラクタオブジェクトMWCの対応する関節MK1〜MK6の位置座標(目標配置状態情報)に基づき求めてもよい。
【0105】
例えば図9(A)に示すように関節K1〜K6と対応する目標配置状態の関節MK1〜MK6を結ぶ方向に基づき誘導ベクトルUV1〜UV6の方向を設定し、関節K1〜K6と対応する目標配置状態の関節MK1〜MK6との距離に基づき誘導ベクトルUV1〜UV6の大きさを決定してもよい。
【0106】
この様にして時刻t0において関節K1〜K6に作用させる誘導ベクトルUV1〜UV6を求め、時刻t0における関節K1〜K6に作用させると、キャラクタオブジェクトWCは時刻t1において図9(B)に示すような配置状態382に変化する。
【0107】
そして図9(B)に示すように、時刻t1において関節K1〜K6に作用させる誘導ベクトルUV1〜UV6を求め、時刻t1おける関節K1〜K6に作用させる。この様な処理をフレーム毎に行うことで、キャラクタオブジェクトWCを目標配置状態390に誘導することができる。
【0108】
図10は、誘導制御によりキャラクタオブジェクトが目標配置状態に誘導させる様子を示した図である。図9(A)(B)で説明したようにキャラクタオブジェクトの関節に誘導ベクトルを作用させることにより、キャラクタオブジェクトWCは目標配置状態MWCに近づいて行く。時刻t0において配置状態380にあるキャラクタオブジェクトWCは、時刻t1において配置状態382になり、時刻t2において配置状態384になり、時刻t3において配置状態386になり、時刻t4において配置状態388になる。
【0109】
7.キャラクタオブジェクトの伸縮制御
本実施の形態では、前記キャラクタオブジェクトの関節に作用する仮想力に基づき、前記キャラクタオブジェクトの紐状部分を伸縮させる制御を行う。
【0110】
本実施の形態では画面上(表示部)に表示されたキャラクタオブジェクトへのタッチ操作によりキャラクタオブジェクトを伸ばしたり縮めたりすることができる。例えば画面上のキャラクタオブジェクトの1カ所を引っ張るタッチ操作(例えば画面上のキャラクタオブジェクトの1カ所をタッチしてタッチ箇所を移動させる操作)や2カ所を引き延ばす操作(例えば画面上のキャラクタオブジェクトの2カ所をタッチしてタッチ箇所間の距離を広げる操作)を行うと、操作力ベクトルが隣り合う関節間の距離を広げる方向に加わる。
【0111】
図20(A)(B)は操作力ベクトルが隣り合う関節間の距離を広げる方向に加わる例を示している。
【0112】
図20(A)では、隣り合う関節K1,K2に逆向きの作用力ベクトル530、532(いずれも外向き)が働いている。この様な場合作用ベクトル530と532により関節K1とK2は離れる方向に引っ張られ、関節K1の位置はK1p→K1p’に移動し、関節K2の位置はK2p→K2p’に移動する。これにより関節間の距離はl→l’に変化する(離れる)。
【0113】
図20(B)では、隣り合う関節K1,K2に同方向だが大きさの異なる作用力ベクトル540、542(外向きの作用ベクトル540>内向きの作用ベクトル542)が働いている。この様な場合作用ベクトル540と542により関節K1K2は離れる方向に引っ張られ、関節K1の位置はK1p→K1p”に移動し、関節K2の位置はK2p→K2p”に移動する。これにより関節間の距離はl→l”に変化する。
【0114】
また例えば画面上のキャラクタオブジェクトの2カ所を縮める操作(例えば画面上のキャラクタオブジェクトの2カ所をタッチしてタッチ箇所間の距離を縮める操作)を行うと、操作力ベクトルが隣り合う関節間の距離を縮める方向に加わる。
【0115】
図21(A)(B)は操作力ベクトルが隣り合う関節間の距離を縮める方向に加わる例を示している。
【0116】
図21(A)では、隣り合う関節K1,K2に逆向きの作用力ベクトル550、552(いずれも内向き)が働いている。この様な場合作用ベクトル550と552により関節K1、K2は近づく方向に引っ張られ、関節K1の位置はK1p→K1p’に移動し、関節K2の位置はK2p→K2p’に移動する。これにより関節間の距離はl→l’に変化する(近づく)。
【0117】
図21(B)では、隣り合う関節K1,K2に同方向だが大きさの異なる作用力ベクトル560、562(外向きの作用ベクトル560<内向きの作用ベクトル562)が働いている。この様な場合作用ベクトル560と562により関節K1K2は近づく方向に引っ張られ、関節K1の位置はK1p→K1p”に移動し、関節K2の位置はK2p→K2p”に移動する。これにより関節間の距離はl→l”に変化する(近づく)。
【0118】
このように本実施の形態では関節の位置の変化により隣り合う関節間の連結子の長さを可変に制御する。そして連結子の長さが所与の閾値を超えると、当該連結子で連結された関節間に新たな関節を追加する処理を行う。また連結子の長さが所与の閾値を下回ると、当該連結子で連結された関節のいずれかを削除して、削除された関節に接続されていた2つの関節を新たに連結させる処理を行う。
【0119】
図22(A)は、関節の追加処理、図22(B)は、関節の削除処理について説明するための図である。
【0120】
図22(A)は、関節K1、K2、K3、K4が直列に連結された連結構造を有するキャラクタオブジェクトの紐状部分が伸長して新たな関節が追加される様子を示している。L1,L2、L3は関節間を接続する連結子である。510は関節間の距離(連結子の長さ)が初期状態(L1=L2=L3=l)にある状態を示している。
【0121】
ここで関節K2、K3を引き離す力が加わり、関節K1〜K4の位置が変化し、512に示すように関節K2と関節K3の距離が増大すると、連結子L2の長さも増大し、結果としてキャラクタオブジェクトの紐状部分は伸長することになる。
【0122】
しかし514に示すように関節K2と関節K3の距離がさらに増大して連結子L2の長さが第1の閾値を超えると、516に示すように、関節K2と関節K3の間に新たな関節K2.5を追加し、関節K2と新たな関節K2.5を連結子L2で接続し、新たな関節K2.5と関節K3とを新たに追加した連結子L2.5で接続する。
【0123】
ここで関節を追加するか否か判定する際の第1の閾値は、例えば初期状態の関節間の距離(連結子の長さ)lに基づき設定してもよい。例えば2lとしてもよい。この様にすると関節追加時に追加している関節の連結子が初期状態と同じ長さlに設定することができる。
【0124】
図22(B)は、関節K1、K2、K3、K4、K5が直列に連結された連結構造を有するキャラクタオブジェクトの紐状部分が減縮して関節が削除される様子を示している。L1,L2、L3、L4は関節間を接続する連結子である。520は関節間の距離(連結子の長さ)が初期状態(L1=L2=L3=L4=l)にある状態を示している。
【0125】
ここで関節K2、K3を近づける力が加わり、関節K1〜K5の位置が変化し、522に示すように関節K2と関節K3の距離が減少すると、連結子L2の長さも減少し、結果としてキャラクタオブジェクトの紐状部分は減縮することになる。
【0126】
しかし524に示すように関節K2と関節K3の距離がさらに減少して連結子L2の長さが第2の閾値を下回ると、526に示すように、関節K3を削除し、関節K2と関節K4を連結子L4で接続する。
【0127】
ここで関節を削除するか否か判定する際の第2の閾値は、例えば初期状態の関節間の距離(連結子の長さ)lに基づき設定してもよい。例えば0.5lとしてもよい。この様にすると関節削除時に削除された関節に隣り合う関節をつなぐ連結子が初期状態より短くなることはないようにすることができる。
【0128】
ここでは第2の閾値を下回った連結子L2で接続されている関節K2、K3関節のいずれを削除するかについては、関節K2と関節K3に接続されている他方の連結子が短い方の関節としているが、例えば予め関節に割り付けられている所定の優先順に従って優先順位の低い方の関節を削除するようにしてもよいし、ランダムにいずれかを選択して削除してもよい。
【0129】
この様にして関節の追加や削除が行われるとキャラクタ制御データの関節制御データ(図5の312)が更新される。そして更新された関節制御データを用いて以降の演算が行われる。
【0130】
8.障害物オブジェクト
本実施の形態では、キャラクタオブジェクト以外にもオブジェクトが登場し、キャラクタオブジェクトと接触すると、キャラクタオブジェクトの移動を妨げたり、キャラクタオブジェクトに衝突を与えたりするオブジェクトが登場する。以下この様なオブジェクトを障害物オブジェクトと呼ぶ。
【0131】
本実施の形態では、ランダムに又は所与のアルゴリズムに従って仮想空間に障害物オブジェクトを配置したり、仮想空間内で障害物オブジェクトを移動動作(移動のみでもよいし、移動せずに関節を動かす動作でもよいし、移動及び動作を両方行う場合でもよい)させる制御を行う。
【0132】
図16(A)〜(C)、図17(A)〜(C)は、障害オブジェクトと遭遇した場合のキャラクタオブジェクトの動きについて説明するための図である。
【0133】
図16(A)〜(C)は、移動中のキャラクタオブジェクト(第1のキャラクタオブジェクトや第2のキャラクタオブジェクトでもよい)の移動経路に障害物オブジェクトが存在した場合を示す。
【0134】
図16(A)に示すようにキャラクタオブジェクトWCに作用力ベクトル410(プレーヤの操作入力により発生した操作力ベクトルでもよいし、誘導ベクトルでもよいし、これらの合力でもよい)が作用し、キャラクタオブジェクトWCが移動している場合、移動経路に障害物オブジェクト400が存在したとする。本システムでは、障害物オブジェクト400とキャラクタオブジェクトWCのヒットチェックをとっているので、図16(B)のように障害物オブジェクト400とキャラクタオブジェクトWCが所定距離内に近づくとヒットが検出される。このような場合、障害物オブジェクト400に設定されている移動開始閾値とキャラクタオブジェクトWCが障害物オブジェクト400に加える力(例えば作用力ベクトルの大きさとキャラクタオブジェクトに設定された仮想的な重さ等により求まる力)を比較して、比較結果に基づき、例えばキャラクタオブジェクトWCが障害物オブジェクト400に加える力が移動開始閾値より小さい場合には、キャラクタオブジェクトWCが障害物オブジェクト400に邪魔されて動けないようにキャラクタオブジェクトWCの移動動作に制限を加えてもよい。また図16(C)に示すようにキャラクタオブジェクトWCが障害物オブジェクト400にぶつかった反動による生じる力を外力ベクトル412として、キャラクタオブジェクトWCに加え、キャラクタオブジェクトWCが障害物オブジェクト400にはじき返されるような移動制御を行ってもよい。
【0135】
図17(A)〜(C)は、移動中の障害物オブジェクトの移動経路にキャラクタオブジェクト(第1のキャラクタオブジェクトや第2のキャラクタオブジェクトでもよい)が存在した場合を示す。
【0136】
図17(A)に示すよう障害物オブジェクト400が、所与の力420により移動している場合、キャラクタオブジェクトWCが存在したとする。本システムでは、障害物オブジェクト400とキャラクタオブジェクトWCのヒットチェックをとっているので、図17(B)のように障害物オブジェクト400とキャラクタオブジェクトWCが所定距離内に近づくとヒットが検出される。このような場合、図16(C)に示すように、キャラクタオブジェクトWCが障害物オブジェクトに押されて障害物オブジェクトと共に移動するような移動制御を行ってもよい。
【0137】
9.キャラクタ画像
図11、図12は、アプリケーション画像410の一例である。本実施の形態では、タッチパネルディスプレイにキャラクタオブジェクトWCが表示され、ユーザはタッチパネルディスプレイでのタッチ操作(例えば指等をキャラクタオブジェクトの表示位置にタッチして接触移動させること)によりキャラクタオブジェクトWCを自由に動かすことができる。
【0138】
またタッチパネルディスプレイはマルチタッチ可能に構成されているので、タッチパネルディスプレイにおいてキャラクタオブジェクトを引き延ばすようなタッチ操作(例えば指2本でキャラクタオブジェクトの2カ所をタッチして、タッチ位置を遠ざける操作等でもよいし、キャラクタオブジェクトの一カ所にタッチして引っ張るように指を移動させる操作でもよい)を行うことにより、図12に示すようにキャラクタオブジェクトを伸ばすことができる。またキャラクタオブジェクトの二カ所にタッチして縮めるように指を移動させることでキャラクタオブジェクトを短縮させることができる。
【0139】
10.切断処理
本実施の形態では、タッチパネル上の切断ボタン(図12の432)をタッチすることでキャラクタオブジェクトWCを切断することができる。
【0140】
図13(A)〜(C)は、キャラクタオブジェクトが切断されるアプリケーション画像の例である。図12に示すアプリケーション画像において、切断ボタン432がタッチ操作されると、キャラクタオブジェクトWCは切断されて、図13(A)に示すように、2つの切断されたキャラクタオブジェクトWCb1、WCb2に分割される。
【0141】
切断されたキャラクタオブジェクトWCb1、WCb2は、完全な形態のキャラクタオブジェクト(例えば頭と胴体と尾を有するキャラクタオブジェクト)ではなく、1つのキャラクタオブジェクトの切断された部分からなるキャラクタオブジェクト(例えば頭と胴体の半分からなるキャラクタオブジェクトと胴体の残り半分と尾からなるキャラクタオブジェクト)でもよい。
【0142】
図13(A)の状態で、切断ボタン432がタッチ操作されると、仮想空間に存在するキャラクタオブジェクトWCb1、WCb2から1の切断対象となるキャラクタオブジェクトが選択されて、さらに切断されることになる。ここでは切断されたキャラクタオブジェクトWCb1が切断対象として選択されて、さらに切断されて、図13(B)に示すように、2つの切断されたキャラクタオブジェクトWCb1、WCb3に分割されている。
【0143】
図13(A)に示すように、仮想空間に複数の切断されたキャラクタオブジェクトWCb1、WCb2が存在する状態で切断処理を行う場合には、切断対象となるキャラクタオブジェクトを選択する処理をおこなう。切断対象は、例えばキャラクタオブジェクトの長さや予め設定された優先順位等によって決定することができる。例えば仮想空間に存在する複数のキャラクタオブジェクトの長さに基づき切断対象となるキャラクタオブジェクトを選択してもよい。そして長さが同じキャラクタオブジェクトが複数ある場合には、予め設定されている優先順位に従って切断対象となるキャラクタオブジェクトを選択してもよい。
【0144】
図13(A)では、後述するようにキャラクタオブジェクトWCb1の長さ>キャラクタオブジェクトWCb2の長さなので、キャラクタオブジェクトWCb1が切断対象として選択されている。もしキャラクタオブジェクトWCb1の長さ=キャラクタオブジェクトWCb2である場合には、例えばキャラクタオブジェクトを構成する関節(直列に連結された関節)の頭又は尾に近い方の関節を含むキャラクタオブジェクトを選択するようにしてもよい。例えば直列に連結された関節に頭又は尾から昇順に順番に番号をふっておき、番号が低いほうが高い優先順位で選択されるようにすることで、頭又は尾に近い方の関節を含むキャラクタオブジェクトを選択することができる。
【0145】
ここでキャラクタオブジェクトの長さとして、キャラクタオブジェクトに含まれる関節(直列に連結された関節)間の距離の総和をもちいてもよい。関節間の距離が変化しない構成の場合には、直列に連結された関節の数を用いてもよい。
【0146】
図13(B)の状態で、切断ボタン432がタッチ操作されると、仮想空間に存在するキャラクタオブジェクトWCb1、WCb2、WCb3から1の切断対象となるキャラクタオブジェクトが選択されて、さらに切断されることになる。ここでは切断されたキャラクタオブジェクトWCb2が切断対象として選択されて、さらに切断されて、図13(C)に示すように、2つの切断されたキャラクタオブジェクトWCb2、WCb4に分割されている。
【0147】
この様な切断処理が繰り返し行われることにより、図14に示すように、キャラクタオブジェクトCWを細かく裁断することができる。
【0148】
図15(A)〜(D)、図18(A)〜(D)は、切断処理に伴う関節の連結制御処理について説明するための図である。図15(A)〜(D)は、図12、図13(A)〜(C)の各状態のキャラクタオブジェクトに対応する関節の連結構造を模式的に示した図である。(図15(A)〜(D)では、説明を簡単にするために関節の接続構造のみ図示しているので、湾曲しているキャラクタオブジェクトについても関節を直線上に並べて図示している。)
図18(A)〜(D)は、本実施の形態の関節の連結制御データの一例である。本実施の形態では、キャラクタオブジェクトが切断されたり、接続されたりすることにより、関節の連結状態が変化するため、キャラクタオブジェクトの切断や接続に伴い関節の連結制御データ610も変化する。 図15(A)〜(D)に示すようにキャラクタオブジェクトの連結状態が変化した場合には連結制御データも図18(A)〜(D)に示すように変化する。
【0149】
連結制御データ610は、直列に接続された関節の連結状態を示す関節連結情報614を仮想空間に存在するオブジェクトのオブジェクト識別情報612に関連づけて、記憶させたデータである。例えば図18(A)〜(D)に示すように、構造体構造を有し、関節連結情報614として、連結されている関節の関節識別情報を接続順に配列として並べたものでもよい。
【0150】
図12に示すキャラクタオブジェクトWCは、図15(A)に示すように関節K1〜K9が直列に連結した関節構造を有しているとする。この様な場合、仮想空間にはキャラクタオブジェクトWCの1体が存在しているので、図18(A)に示すような連結制御データが生成される。すなわちキャラクタオブジェクトWCのオブジェクト識別情報612が「OB1」であり、オブジェクト識別情報「OB1」に対応する関節連結情報614として、関節K1〜K9に対応する関節識別情報K1〜K9が連結順に配列されている。
【0151】
当該キャラクタオブジェクトの関節連結情報を参照してキャラクタオブジェクトWCを構成する関節を特定し、図5に示す関節制御データを参照して、特定した関節(図5ではノード)の位置を求めることができる。
【0152】
図13(A)に示すキャラクタオブジェクトWCb1とキャラクタオブジェクトWCb2は、図15(B)に示すようにそれぞれ、関節K1〜K5が直列に連結した関節構造(WCb1)と、関節K6〜K9が直列に連結した関節構造(WCb2)とを有している。
【0153】
すなわち、関節K1〜K9が直列に連結された関節構造を有するキャラクタオブジェクトWC(図15(A)参照)において、隣り合わせた第1の関節K5と第2の関節K6の関節間の連結L5が解消され、キャラクタオブジェクトWCは、第1の関節K5を含むキャラクタオブジェクトWCb1と第2の関節K6を含むキャラクタオブジェクトWCb2に分割されている。
【0154】
この様な場合、仮想空間にはキャラクタオブジェクトWCb1とキャラクタオブジェクトWCbの2体が存在しているので、図18(B)に示すような連結制御データが生成される。すなわちキャラクタオブジェクトWCb1のオブジェクト識別情報612が「OB1」であり、オブジェクト識別情報「OB1」に対応する関節連結情報614として、関節K1〜K5に対応する関節識別情報K1〜K5が連結順に配列され、キャラクタオブジェクトWCb2のオブジェクト識別情報612が「OB2」であり、オブジェクト識別情報「OB2」に対応する関節連結情報614として、関節K6〜K9に対応する関節識別情報K6〜K9が連結順に配列されている。
【0155】
図13(B)に示すキャラクタオブジェクトWCb1とキャラクタオブジェクトWCb2とキャラクタオブジェクトWCb3は、図15(C)に示すようにそれぞれ、関節K1〜K3が直列に連結した関節構造(WCb1)と、関節K6〜K9が直列に連結した関節構造(WCb2)と、関節K4、K5が直列に連結した関節構造(WCb3)とを有している。
【0156】
すなわち、関節K1〜K5が直列に連結された関節構造を有するキャラクタオブジェクトWCb1(図15(B)参照)において、隣り合わせた第1の関節K3と第2の関節K4の関節間の連結L3が解消され、キャラクタオブジェクトWCb1は、第1の関節K3を含むキャラクタオブジェクトWCb1と第2の関節K4を含むキャラクタオブジェクトWCb3に分割されている。
【0157】
この様な場合、仮想空間にはキャラクタオブジェクトWCb1とキャラクタオブジェクトWCb2とキャラクタオブジェクトWCb3の3体が存在しているので、図18(C)に示すような連結制御データが生成される。すなわちキャラクタオブジェクトWCb1のオブジェクト識別情報612が「OB1」であり、オブジェクト識別情報「OB1」に対応する関節連結情報614として、関節K1〜K3に対応する関節識別情報K1〜K3が連結順に配列され、キャラクタオブジェクトWCb2のオブジェクト識別情報612が「OB2」であり、オブジェクト識別情報「OB2」に対応する関節連結情報614として、関節K6〜K9に対応する関節識別情報K6〜K9が連結順に配列され、キャラクタオブジェクトWCb3のオブジェクト識別情報612が「OB3」であり、オブジェクト識別情報「OB3」に対応する関節連結情報614として、関節K4、K5に対応する関節識別情報K4、K5が連結順に配列されている。
【0158】
図13(C)に示すキャラクタオブジェクトWCb1とキャラクタオブジェクトWCb2とキャラクタオブジェクトWCb3とキャラクタオブジェクトWCb4は、図15(D)に示すようにそれぞれ、関節K1〜K3が直列に連結した関節構造(WCb1)と、関節K6、K7が直列に連結した関節構造(WCb2)と、関節K4、K5が直列に連結した関節構造(WCb3)と、関節K8、K9が直列に連結した関節構造(WCb4)とを有している。
【0159】
すなわち、関節K6〜K9が直列に連結された関節構造を有するキャラクタオブジェクトWCb2(図15(C)参照)において、隣り合わせた第1の関節K7と第2の関節K8の関節間の連結L7が解消され、キャラクタオブジェクトWCb2は、第1の関節K7を含むキャラクタオブジェクトWCb2と第2の関節K8を含むキャラクタオブジェクトWCb4に分割されている。
【0160】
この様な場合、仮想空間にはキャラクタオブジェクトWCb1とキャラクタオブジェクトWCb2とキャラクタオブジェクトWCb3とキャラクタオブジェクトWCb4の4体が存在しているので、図18(D)に示すような連結制御データが生成される。すなわちキャラクタオブジェクトWCb1のオブジェクト識別情報612が「OB1」であり、オブジェクト識別情報「OB1」に対応する関節連結情報614として、関節K1〜K3に対応する関節識別情報K1〜K3が連結順に配列され、キャラクタオブジェクトWCb2のオブジェクト識別情報612が「OB2」であり、オブジェクト識別情報「OB2」に対応する関節連結情報614として、関節K6、K7に対応する関節識別情報K6、K7が連結順に配列され、キャラクタオブジェクトWCb3のオブジェクト識別情報612が「OB3」であり、オブジェクト識別情報「OB3」に対応する関節連結情報614として、関節K4、K5に対応する関節識別情報K4、K5が連結順に配列され、キャラクタオブジェクトWCb4のオブジェクト識別情報612が「OB4」であり、オブジェクト識別情報「OB4」に対応する関節連結情報614として、関節K8、K9に対応する関節識別情報K8、K9が連結順に配列されている。
【0161】
ここでキャラクタオブジェクトに含まれる関節の数に基づき当該キャラクタオブジェクトが切断可能状態にあるか否か判断し、切断可能状態にあるキャラクタオブジェクトを切断対象としてもよい。すなわち図15(A)〜(D)に示すように関節間の連結を切断する形式で切断処理を行う場合には、切断後にも関節が直列に接続された関節構造を保つためには、少なくとも4個の関節を含んでいる必要がある。すなわち図15(D)に示すようにキャラクタオブジェクト関節が2個又は3個しかない場合には、切断すると切断後のオブジェクトには関節が1個しか含まれないものができるので、この様なものは切断可能状態にないと判断してもよい。
【0162】
切断ボタン432がタッチ操作された場合に、図15(D)に示すように、切断可能状態にあるキャラクタオブジェクトが1つも存在しない場合には、切断を行わないようにしてもよい。
【0163】
11.接続処理
本実施の形態では、仮想空間内の複数のキャラクタオブジェクトが所定の位置関係になると、複数のキャラクタオブジェクトが自動的に接続される。
【0164】
図29(A)(B)はキャラクタオブジェクトの接続されるアプリケーション画像の例である。図29(A)は、仮想空間内に複数のキャラクタオブジェクトWC1、WC2、WC3・・が存在する様子を示しており、キャラクタオブジェクトWC1とキャラクタオブジェクトWC2のそれぞれの端が所定の距離内に存在する状態となっている。この様な場合、キャラクタオブジェクトWC1とキャラクタオブジェクトWC2が自動的に接続されて図29(B)に示すように、一体として動く1つのキャラクタオブジェクトWC1となる。
【0165】
ここで例えばキャラクタオブジェクトWC1とキャラクタオブジェクトWC3のそれぞれの端は所定の距離内に存在する状態となっていないので、この状態では自動接続はおこなわれないが、例えばユーザがタッチ操作によりいずれかのキャラクタオブジェクトを動かして、キャラクタオブジェクトWC1とキャラクタオブジェクトWC3のそれぞれの端が所定の距離内に存在する状態とすると、キャラクタオブジェクトWC1とキャラクタオブジェクトWC3を接続させることができる。
【0166】
図19(A)、(B)は、本実施の形態の接続制御について説明するための図である。
【0167】
図19(A)では、キャラクタオブジェクトWC1の直列に連結された関節構造(関節K1〜K4が直列に連結)の端に位置する関節K4と、キャラクタオブジェクトWC2の直列に連結された関節構造(関節K5〜K7が直列に連結)の端に位置する関節K5との距離(位置関係の一例)が所定の閾値以下となっているので、所与の接続条件を満たすとしてこれらのキャラクタオブジェクトの接続を行う。
【0168】
図19(B)は、キャラクタオブジェクトWC1の関節K4と、キャラクタオブジェクトWC2の関節K5とが接続される様子を示している。このようにキャラクタオブジェクトの端に位置する関節同士K4、K5を新たな連結子L4で連結して、キャラクタオブジェクトの接続を行うようにしてもよい。このようにすることで図29(B)に示すような接続画像を生成することができる。
【0169】
図23(A)(B)は、接続処理に伴う関節の連結制御処理について説明するための図である。図19(A)(B)に示すようにキャラクタオブジェクトの連結状態が変化した場合には連結制御データも図23(A)(B)に示すように変化する。
【0170】
図19(A)に示すキャラクタオブジェクトWC1とキャラクタオブジェクトWC2とキャラクタオブジェクトWC3はそれぞれ、関節K1〜K4が直列に連結した関節構造(WC1)と、関節K5〜K7が直列に連結した関節構造(WC2)と、関節K8〜K10が直列に連結した関節構造(WC3)とを有している。
【0171】
この様な場合、仮想空間にはキャラクタオブジェクトWC1とキャラクタオブジェクトWC2とキャラクタオブジェクトWC3の3体が存在しているので、図23(A)に示すような連結制御データが生成される。すなわちキャラクタオブジェクトWC1のオブジェクト識別情報612が「OB1」であり、オブジェクト識別情報「OB1」に対応する関節連結情報614として、関節K1〜K4に対応する関節識別情報K1〜K4が連結順に配列され、キャラクタオブジェクトWC2のオブジェクト識別情報612が「OB2」であり、オブジェクト識別情報「OB2」に対応する関節連結情報614として、関節K5〜K7に対応する関節識別情報K5〜K7が連結順に配列され、キャラクタオブジェクトWC3のオブジェクト識別情報612が「OB3」であり、オブジェクト識別情報「OB3」に対応する関節連結情報614として、関節K8〜K10に対応する関節識別情報K8〜K10が連結順に配列されている。
【0172】
接続がおこなわれて、図19(B)の状態になると、キャラクタオブジェクトWC1とキャラクタオブジェクトWC3はそれぞれ、関節K1〜K7が直列に連結した関節構造(WC1)と、関節K8〜K10が直列に連結した関節構造(WC3)になる。
【0173】
この様な場合、仮想空間にはキャラクタオブジェクトWC1とキャラクタオブジェクトWC3の2体が存在しているので、図23(B)に示すような連結制御データが生成される。すなわちキャラクタオブジェクトWC1のオブジェクト識別情報612が「OB1」であり、オブジェクト識別情報「OB1」に対応する関節連結情報614として、関節K1〜K7に対応する関節識別情報K1〜K7が連結順に配列され、キャラクタオブジェクトWC3のオブジェクト識別情報612が「OB3」であり、オブジェクト識別情報「OB3」に対応する関節連結情報614として、関節K8〜K10に対応する関節識別情報K8〜K10が連結順に配列されている。
【0174】
なお図13(A)〜(C)で説明した分割処理が行われた後の所定時間内は切断されたキャラクタオブジェクト同士についての接続は行わないようにしてもよい。図13(A)に示すように、分割直後には切断されたキャラクタオブジェクトWCb1,WCb2の切断点の関節同士は近くに位置していることが多く、せっかく分割してもすぐに接続されしまう可能性が高い。しかしこのようにすることで、分割後すぐに接続されることを防止することができる。
【0175】
この様な切断処理が繰り返し行われることにより、図14に示すように、キャラクタオブジェクトCWを細かく裁断することができる。
【0176】
また例えば図14に示す状態で、画面上の一括接続ボタン434がタッチ操作されると(一括接続イベントに発生)、1つのキャラクタオブジェクトから切断により分割されたすべてのキャラクタオブジェクトが接続され、図12に示すような1つのキャラクタオブジェクトになる。分割により図14に示すように多数のキャラクタオブジェクトが発生すると、ユーザのタッチ操作で接続させるのは、手間かかり面倒である。しかし一括接続ボタン434を操作することにより、簡単に切断前に戻すことができるので、ユーザは簡単に繰り返し切断操作を楽しむことができる。
【0177】
12.処理の説明
次に本実施形態の処理の流れについて説明する。ここで説明する処理は、処理部100が、記憶部170に記憶されているシステムプログラム(不図示)やアプリケーションプログラム174を読み出して実行することによって実現され、所定サイクルで繰り返し実行される。
【0178】
図25は、本実施の形態の全体処理の流れを示すフローチャートである。
【0179】
先ずアプリケーション演算部110は、仮想空間中に背景、NPCなどを配置してアプリケーション空間を形成し、形成したアプリケーション空間に、キャラクタ初期設定データ176を参照して初期状態のキャラクタオブジェクトWCを初期位置に配置する(ステップS10)。
【0180】
このとき、キャラクタオブジェクトWCの配置にともなって、キャラクタ制御データ300の関節制御データ310に初期状態の関節モデルが登録され、登録された関節モデルに従って外皮を形成してキャラクタオブジェクトWCの表示オブジェクトをアプリケーション空間に配置する。
【0181】
次に分割処理を行う(ステップS20)。分割処理の詳細については図26で説明する。次に接続処理を行う(ステップS30)。接続処理の詳細については図27で説明する。次に動作制御処理を行う(ステップS40)。動作制御処理の詳細については図28で説明する。
【0182】
次に、処理部100は更新された関節制御データや関節制御データに基づいてキャラクタオブジェクトの外皮の形成処理を実行して、キャラクタオブジェクトWCの表示オブジェクトをアプリケーション空間に配置する(ステップS50)。
【0183】
次いで、処理部100はアプリケーションの終了条件を満たしているか否かを判定する(ステップS60)。本実施形態では、アプリケーション終了入力が行われたら終了条件を満たしていると判定する。
【0184】
アプリケーション終了条件を満たしていなければ(ステップS60のNO)、ステップS20に戻る。一方、終了条件を満たしていれば(ステップS60のYES)ゲーム終了となる。
【0185】
図26は、本実施の形態の分割処理の流れを示すフローチャートである。
【0186】
分割イベントが発生したか否か判断し(ステップS110)、分割イベントが発生した場合には、以下の処理を行う。画面上の分割ボタンがタッチ操作された場合に分割イベントが発生したと判断してもよい。
【0187】
次に連結制御データ及び関節制御データに基づき切断対象オブジェクトを決定する(ステップS120)。例えば最も長いキャラクタオブジェクトを切断対象とするなど、キャラクタオブジェクトの長さ基づき切断対象となるキャラクタオブジェクトを選択してもよい。
【0188】
切断対象オブジェクトが存在する場合には(ステップS130)、以下の処理を行う。
【0189】
まず切断対象オブジェクトの切断対象連結子を決定し(ステップS140)、切断対象連結子で接続された第1の関節と第2の関節の関節間の連結を解消し、第1の関節を含む分割オブジェクトと第2の関節を含む分割オブジェクトに分割する(ステップS150)。
【0190】
そして、分割よって生じたオブジェクト数の変更とオブジェクトの連結の変更に基づき連結制御データを更新する(ステップS160)。
【0191】
図27は、本実施の形態の接続処理の流れを示すフローチャートである。
【0192】
一括接続イベントが発生したか否か判断し(ステップS210)、発生した場合には、すべての分割オブジェクトを元オブジェクトの連結制御データに基づき接続して1つのオブジェクトにする(ステップS220)。画面上の一括接続ボタンがタッチ操作された場合に一括接続イベントが発生したと判断してもよい。
【0193】
接続イベントが発生したか否か判断し(ステップS230)、発生していない場合にはステップS280にいく。発生した場合には、各オブジェクトの端の関節(頭と尻尾以外)について、他のオブジェクトの端の関節(頭と尻尾以外)との距離を求め、当該関節との距離が接続条件を満たす場合には、接続対象関節候補として抽出する(ステップS240)。
【0194】
次に所定時間内に分割イベントがあったか判断し(ステップS250)、ない場合にはステップS270にいく。あった場合には、接続対象関節組み合わせ候補の中に所定時間内の分割イベントにより切断された関節の組み合わせが含まれている場合には、それを接続対象関節組み合わせ候補から除外する(ステップS260)。
【0195】
次に接続対象関節組み合わせ候補の関節間を連結子で接続し、2つのオブジェクトを接続して1つのオブジェクトにする(ステップS270)
そして、接続よって生じたオブジェクト数の変更とオブジェクトの連結の変更に基づき連結制御データを更新する(ステップS280)。
【0196】
図28は、本実施の形態の動作制御処理の流れを示すフローチャートである。
【0197】
処理部100は、予め動作が設定されているオブジェクト(例えば、NPCなどの障害物オブジェクト)の動作を制御する(ステップS310)。例えば、キャラクタオブジェクトWCの移動を邪魔する障害物オブジェクトなどを設定し、所定のルールに基づいて移動制御する。
【0198】
次に、処理部100は、プレーヤの操作入力に従ってキャラクタオブジェクトWCの各関節に作用させる操作力ベクトルを演算する(ステップS320)。
【0199】
次に、処理部100は、ヒット判定制御データに基づきキャラクタオブジェクトWCと他のオブジェクトのヒットチェック処理を行い、ヒットチェック結果に従って、キャラクタオブジェクトの関節に作用させる外力ベクトルを演算する(ステップS330)。
【0200】
次に、処理部100は、キャラクタオブジェクトWCの関節に作用する力の合力である作用力ベクトルを求め、作用力ベクトルに基づきキャラクタオブジェクトの関節の移動位置を演算する(ステップS340)。
【0201】
次に、処理部100は、キャラクタオブジェクトWCの関節の移動位置に基づき、関節の追加、削減処理を行い、移動後の関節位置を決定する(ステップS350)。
【0202】
次に、処理部100は、移動後の関節位置に基づき関節制御データの更新やヒット判定制御データの更新を行う(ステップS360)。
【0203】
以上、本発明を適用した第1実施形態について説明したが、本発明の適用可能な構成がこれらに限定されるものではなく、適宜構成要素の追加・削除・変更を行うことができる。
【0204】
例えば、本実施形態では、キャラクタオブジェクトWCの全身を関節構造のモデルとしたが、下半身や上半身といった一部のみを関節構造のモデルとしても良い。例えば、プレーヤキャラクタWCをカタツムリとし、殻の部分は形状・大きさが変化せず、体の部分をプレーヤキャラクタWCのような関節構造を有した伸縮自在なモデルとして設定する。そして、体の部分の制御については上述の実施形態を適用するならば、殻から出た体部分が自在に伸び縮みするカタツムリらしい様子を表現する事ができる。
【0205】
また上記実施の形態では、タッチパネルディスプレイを用いてタッチ操作により操作入力を行う場合を例にとり説明したが、これに限られない。例えばボタンやレバーやキーボード等の操作部から操作入力を行ってもよい。
【0206】
また上記実施の形態ではアプリケーション空間(仮想空間)が2次元平面である場合を例にとり説明したが、これに限られない。例えば3次元空間でもよい。
【符号の説明】
【0207】
202 ノード、204 連結子、100 処理部、110 アプリケーション演算部、112 キャラクタオブジェクト制御部、114 切断制御部、116 接続制御部、120 画像生成部、122 画像表示部、130 音生成部、132 音出力部、140 通信制御部、142 通信部、160 操作入力部、170 記憶部、172 システムプログラム、174 アプリケーションプログラム、176 キャラクタ初期設定データ、300 キャラクタ制御データ、310 関節制御データ、330 作用力データ、 連結制御データ、BM 骨格モデル、WC キャラクタオブジェクト、WCh 頭、WCb 胴、WCt 尾、UV1〜UV6 誘導ベクトル、K1〜K6 関節

【特許請求の範囲】
【請求項1】
コンピュータに、キャラクタオブジェクトが移動動作する仮想空間の画像を生成させるためのプログラムであって、
関節部位を直列に連結した関節構造を有する紐状部分を含むキャラクタオブジェクトを設定する設定手段と、
操作入力情報又は所与のイベントに基づき前記キャラクタオブジェクトの前記関節に仮想力を作用させて前記関節を移動させることで前記キャラクタオブジェクトを動かすキャラクタオブジェクト制御手段と、
複数のキャラクタオブジェクトが所与の接続条件を満たす場合には、これらのキャラクタオブジェクトの接続を行う接続手段と、してコンピュータを機能させ、
前記接続手段は、
所与のキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節と、他のキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節との位置関係が所与の接続条件を満たす場合に接続を行うことを特徴とするプログラム。
【請求項2】
請求項1において、
前記接続手段は、
キャラクタオブジェクトの直列に連結された関節構造の端に位置する関節同士を連結して、キャラクタオブジェクトの接続を行うことを特徴とするプログラム。
【請求項3】
請求項1又は2において、
前記キャラクタオブジェクトの紐状部分を切断して複数の切断されたキャラクタオブジェクトに分割する切断処理を行う切断手段と、してコンピュータを機能させ、
前記切断手段は、
複数の切断されたキャラクタオブジェクトが存在する状態で切断処理を行う場合には、切断対象となるキャラクタオブジェクトを選択する処理をおこない、選択されたキャラクタオブジェクトに対して切断処理を施し、切断されたキャラクタオブジェクトをさらに複数の切断されたキャラクタオブジェクトに分割し、
前記接続手段は、
所与の切断されたキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節と、他の切断されたキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節との位置関係が所与の接続条件を満たす場合に接続を行うことを特徴とするプログラム。
【請求項4】
請求項1乃至3のいずれかにおいて、
前記接続条件は、
前記切断処理が行われた後の所定時間内は切断されたキャラクタオブジェクト同士についての接続は行わないことを特徴とするプログラム。
【請求項5】
請求項1乃至4のいずれかにおいて、
前記接続手段は、
一括接続イベントが発生した場合には、1つのキャラクタオブジェクトから切断により分割されたすべてのキャラクタオブジェクトを接続することを特徴とするプログラム。
【請求項6】
請求項1乃至5のいずれかにおいて、
前記仮想空間に前記キャラクタオブジェクトとは異なる他のオブジェクトを配置する処理又は移動させる処理を行う障害物設定手段と、
前記キャラクタオブジェクトと前記他のオブジェクトとの接触検出を行う接触検出手段と、してさらにコンピュータを機能させ、
前記キャラクタオブジェクト制御手段は、
前記キャラクタオブジェクトと前記他のオブジェクトとの接触検出結果に基づき、前記キャラクタオブジェクトの関節に仮想力を作用させて、前記関節部位を移動させることで前記キャラクタオブジェクトを動かすことを特徴とするプログラム。
【請求項7】
請求項1乃至6のいずれかにおいて、
前記キャラクタオブジェクト制御手段は、
前記操作入力情報として、前記仮想空間の画像が表示された表示部における接触位置の移動履歴情報を含む操作入力情報を取得し、前記接触位置の移動履歴情報に基づき、関節部位に作用させる仮想力の方向を決定することを特徴とするプログラム。
【請求項8】
請求項1乃至7のいずれかにおいて、
前記キャラクタオブジェクト制御手段は、
前記キャラクタオブジェクトの関節に作用する仮想力に基づき、前記キャラクタオブジェクトの紐状部分を伸縮させることを特徴とするプログラム。
【請求項9】
請求項1乃至8のいずれかにおいて、
前記キャラクタオブジェクト制御手段は、
前記仮想力による関節の移動位置を演算して、演算結果に基づき隣り合う関節間の連結子の長さを可変に制御し、連結子の長さが所与の閾値を超えると、当該連結子で連結された関節間に新たな関節を追加することを特徴とするプログラム。
【請求項10】
請求項1乃至9のいずれかにおいて、
前記キャラクタオブジェクト制御手段は、
前記仮想力による関節の移動位置を演算して、演算結果に基づき隣り合う関節間の連結子の長さを可変に制御し、連結子の長さが所与の閾値を下回ると、当該連結子で連結された関節のいずれかを削除して、削除された関節に接続されていた2つの関節を新たに連結させることを特徴とするプログラム。
【請求項11】
請求項1乃至10のいずれかにおいて、
前記キャラクタオブジェクト制御手段は、
前記仮想空間の画像が表示される表示部を含む装置に設けられた加速度センサからの加速度情報を取得し、取得した前記加速度情報に基づき、前記キャラクタオブジェクトの前記関節部位に仮想力を作用させて前記関節部位を移動させることで前記キャラクタオブジェクトを動かすことを特徴とするプログラム。
【請求項12】
請求項1乃至11のいずれかに記載のプログラムが記憶されたコンピュータ読み取り可能な情報記憶媒体。
【請求項13】
キャラクタオブジェクトが移動動作する仮想空間の画像を生成する画像生成装置であって、
関節部位を直列に連結した関節構造を有する紐状部分を含むキャラクタオブジェクトを設定する設定手段と、
操作入力情報又は所与のイベントに基づき前記キャラクタオブジェクトの前記関節に仮想力を作用させて前記関節を移動させることで前記キャラクタオブジェクトを動かすキャラクタオブジェクト制御手段と、
複数のキャラクタオブジェクトが所与の接続条件を満たす場合には、これらのキャラクタオブジェクトの接続を行う接続手段と、を含み、
前記接続手段は、
所与のキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節と、他のキャラクタオブジェクトの直列に連結された関節構造の端に位置する関節との位置関係が所与の接続条件を満たす場合に接続を行うことを特徴とする画像生成装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate