(57)【要約】【課題】  オブジェクト同士が衝突した場合におけるオブジェクトの動作をリアルに表現することができる画像処理プログラムおよび画像処理装置を提供する。【解決手段】  ゲーム装置３は、仮想空間において矢オブジェクト７２を移動させる。そして、矢オブジェクト７２に設定される当たり判定領域７４がプレイヤキャラクタ７１に設定される当たり判定領域７３に接触しているか否かを判定する。接触していると判定される場合、ゲーム装置３は、矢オブジェクト７２の移動方向を算出する。さらに、矢オブジェクト７２の移動方向の逆方向を指定方向としてプレイヤキャラクタ７１の少なくとも一部が当該指定方向を向くように当該プレイヤキャラクタ７１を動作させる。プレイヤキャラクタ７１が動作する様子が表示装置に表示される。【選択図】  図３
2006318136.tif 000002
【特許請求の範囲】
【請求項１】
複数のオブジェクトが登場する３次元の仮想空間を表示装置に表示させる画像処理装置のコンピュータに実行させる画像処理プログラムであって、
前記仮想空間において第１オブジェクトを移動させる第１移動制御ステップと、
前記第１オブジェクトが第２オブジェクトに衝突したか否かを判定する判定ステップと、
前記判定ステップにおいて衝突したと判定される場合、前記第１オブジェクトの移動方向を算出する方向算出ステップと、
前記第１オブジェクトの移動方向の逆方向を指定方向として前記第２オブジェクトの少なくとも一部が当該指定方向を向くように当該第２オブジェクトを動作させる第１動作制御ステップと、
前記第１動作制御ステップによって前記第２オブジェクトが動作する様子を前記表示装置に表示させる表示ステップとを前記コンピュータに実行させる、画像処理プログラム。
【請求項２】
複数のオブジェクトが登場する３次元の仮想空間を表示装置に表示させる画像処理装置のコンピュータに実行させる画像処理プログラムであって、
単位時間当たりの前記仮想空間における第１オブジェクトの移動方向と距離を示す速度ベクトルを記憶する速度ベクトル記憶ステップと、
前記速度ベクトルに基づいて前記仮想空間における前記第１オブジェクトの配置位置を更新して、当該第１オブジェクトを移動させる第１移動制御ステップと、
前記第１オブジェクトが第２オブジェクトに衝突したか否かを判定する判定ステップと、
前記判定ステップにおいて衝突したと判定される場合、前記前記第１オブジェクトの速度ベクトルを参照する速度ベクトル参照ステップと、
前記速度ベクトルの逆方向を指定方向として前記第２オブジェクトの少なくとも一部が当該指定方向を向くように当該第２オブジェクトを動作させる第１動作制御ステップと、
前記第１動作制御ステップによって前記第２オブジェクトが動作する様子を前記表示装置に表示させる表示ステップとを前記コンピュータに実行させる、画像処理プログラム。
【請求項３】
複数のオブジェクトが登場する３次元の仮想空間を表示装置に表示させる画像処理装置のコンピュータに実行させる画像処理プログラムであって、
第１オブジェクトに設定される当たり判定領域を変形させる変形ステップと、
前記第１オブジェクトに設定される当たり判定領域が第２オブジェクトに設定される当たり判定領域に接触しているか否かを判定する判定ステップと、
前記判定ステップにおいて接触していると判定される場合、各当たり判定領域の接触位置を算出する位置算出ステップと、
前記第２オブジェクトの位置から前記接触位置への方向を指定方向として前記第２オブジェクトの少なくとも一部が当該指定方向を向くように当該第２オブジェクトを動作させる第１動作制御ステップと、
前記第１動作制御ステップによって前記第２オブジェクトが動作する様子を前記表示装置に表示させる表示ステップとを前記コンピュータに実行させる、画像処理プログラム。
【請求項４】
前記第２オブジェクトは、所定の第１条件が満たされたとき、移動動作とは異なる所定の動作を行うことが可能であり、
前記第１動作制御ステップにおいては、前記第２オブジェクトの一部が前記指定方向を向くように制御され、
前記第１条件が満たされたことに応じて、前記指定方向に向かって前記所定の動作を行うように前記第２オブジェクトを動作させる第２動作制御ステップを前記コンピュータにさらに実行させる、請求項１から３のいずれかに記載の画像処理プログラム。
【請求項５】
前記第２オブジェクトは、ユーザによって操作される操作対象オブジェクトであり、
前記第１条件は、前記第２オブジェクトに対するユーザの操作が行われたことであり、
前記第１動作制御ステップにおいては、前記第２オブジェクトの動作がプレイヤによる操作とは無関係に実行される、請求項４に記載の画像処理プログラム。
【請求項６】
前記第２オブジェクトの一部が前記指定方向を向くとき、当該一部以外の部分が向く方向に当該第２オブジェクトを移動させる第２移動制御ステップを前記コンピュータにさらに実行させる、請求項４に記載の画像処理プログラム。
【請求項７】
前記第１動作制御ステップにおいては、前記第２オブジェクトの一部が前記指定方向を向くように制御され、
前記第２オブジェクトの一部が前記指定方向を向いた後、所定の第２条件が満たされたことに応じて当該一部を元の向きに戻すように前記第２オブジェクトを動作させる第３動作制御ステップを前記コンピュータにさらに実行させる、請求項１から３のいずれかに記載の画像処理プログラム。
【請求項８】
前記判定ステップにおいては、前記第１オブジェクトに設定される当たり判定領域が前記第２オブジェクトに設定される当たり判定領域に接触しているか否かによって、前記第１オブジェクトが前記第２オブジェクトに衝突したか否かが判定される、請求項１に記載の画像処理プログラム。
【請求項９】
前記方向算出ステップにおいては、前記第１オブジェクトの移動方向を示すベクトルについて前記仮想空間の所定面に平行な成分を示す２次元ベクトルが算出され、
前記第１動作制御ステップにおいては、前記方向算出ステップで算出された２次元ベクトルの逆方向が前記指定方向とされ、前記第２オブジェクトが前記所定面に垂直な軸を中心とした回転動作を行う、請求項１に記載の画像処理プログラム。
【請求項１０】
前記第１制御ステップにおいては、前記接触位置から前記第２オブジェクトの位置への方向を示すベクトルについて前記仮想空間の所定面に平行な成分を示す２次元ベクトルが算出され、前記第２オブジェクトは、当該２次元ベクトルの逆方向を前記指定方向として前記所定面に垂直な軸を中心とした回転動作を行う、請求項３に記載の画像処理プログラム。
【請求項１１】
複数のオブジェクトが登場する３次元の仮想空間を表示装置に表示させる画像処理装置であって、
前記仮想空間において第１オブジェクトを移動させる第１移動制御手段と、
前記第１オブジェクトが第２オブジェクトに衝突したかか否かを判定する判定手段と、
前記判定手段によって衝突したと判定される場合、前記第１オブジェクトの移動方向を算出する方向算出手段と、
前記第１オブジェクトの移動方向の逆方向を指定方向として前記第２オブジェクトの少なくとも一部が当該指定方向を向くように当該第２オブジェクトを動作させる第１動作制御手段と、
前記第１動作制御手段によって前記第２オブジェクトが動作する様子を前記表示装置に表示させる表示制御手段とを備える、画像処理装置。
【請求項１２】
複数のオブジェクトが登場する３次元の仮想空間を表示装置に表示させる画像処理装置であって、
単位時間当たりの前記仮想空間における第１オブジェクトの移動方向と距離を示す速度ベクトルを記憶する速度ベクトル記憶手段と、
前記速度ベクトルに基づいて前記仮想空間における前記第１オブジェクトの配置位置を更新して、当該第１オブジェクトを移動させる第１移動制御手段と、
前記第１オブジェクトが第２オブジェクトに衝突したか否かを判定する判定手段と、
前記判定手段によって衝突したと判定される場合、前記前記第１オブジェクトの速度ベクトルを参照する速度ベクトル参照手段と、
前記速度ベクトルの逆方向を指定方向として前記第２オブジェクトの少なくとも一部が当該指定方向を向くように当該第２オブジェクトを動作させる第１動作制御手段と、
前記第１動作制御手段によって前記第２オブジェクトが動作する様子を前記表示装置に表示させる表示制御手段とを備える、画像処理装置。
【請求項１３】
複数のオブジェクトが登場する３次元の仮想空間を表示装置に表示させる画像処理装置のコンピュータに実行させる画像処理プログラムであって、
第１オブジェクトに設定される当たり判定領域を変形させる変形手段と、
前記第１オブジェクトに設定される当たり判定領域が第２オブジェクトに設定される当たり判定領域に接触しているか否かを判定する判定手段と、
前記判定手段によって接触していると判定される場合、各当たり判定領域の接触位置を算出する位置算出手段と、
前記第２オブジェクトの位置から前記接触位置への方向を指定方向として前記第２オブジェクトの少なくとも一部が当該指定方向を向くように当該第２オブジェクトを動作させる第１動作制御手段と、
前記第１動作制御手段によって前記第２オブジェクトが動作する様子を前記表示装置に表示させる表示制御手段とを備える、画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理プログラムおよび画像処理装置に関し、より特定的には、３次元の仮想空間に登場する２つのオブジェクトが衝突したときの様子を表す画像を表示するための画像処理プログラムおよび画像処理装置に関する。
【背景技術】
【０００２】
従来、オブジェクト（キャラクタ）が登場する仮想空間を構築し、当該オブジェクトを動作させてその様子を表す動画を表示する技術において、当該オブジェクトをリアルに動作させるように動作を制御することが行われている。例えば、プレイヤによって操作されるプレイヤキャラクタに自然な動作を行わせるビデオゲーム装置がある（例えば、特許文献１参照。）。このビデオゲーム装置では、ゲーム空間内に検知可能オブジェクトが配置される。そして、プレイヤキャラクタが検知可能オブジェクトから所定距離以内に存在する場合には、検知可能オブジェクトの方向へ顔を向ける動作を行うようにプレイヤキャラクタの動作を制御する。なお、この動作は、検知可能オブジェクトが画面に表示されているか否かとは無関係に行われるので、この動作によって、プレイヤは、画面に表示されていないオブジェクトの存在を知ることができる。また、「オブジェクトの存在に気づいてそのオブジェクトの方向を向く」という自然な動作をプレイヤキャラクタに行わせることによって、プレイヤキャラクタの動作をよりリアルに表現することができる。
【特許文献１】特開２００２−２５３８４８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ここで、オブジェクトがプレイヤキャラクタに衝突する場合を考える。この場合、プレイヤキャラクタの動作をリアルに表現する方法としては、オブジェクトが衝突してきた方向を向く動作をプレイヤキャラクタに行わせる方法が考えられる。
【０００４】
上述した従来の技術では、検知可能オブジェクトの所定距離内にプレイヤキャラクタが進入すると、プレイヤキャラクタは検知可能オブジェクトの方向を向く動作を行う。しかし、オブジェクトがプレイヤキャラクタに衝突する際には、プレイヤキャラクタの後ろからオブジェクトが衝突することもある。また、例えば、プレイヤキャラクタが敵キャラクタに後ろから攻撃されることもある。ここで、オブジェクトがプレイヤキャラクタに衝突する場合に従来の技術をそのまま用いると、プレイヤキャラクタは、後ろから接近してくるオブジェクトがある場合には後ろを向く動作を行ってしまう。つまり、プレイヤキャラクタは、接近してくるあらゆるオブジェクトの方を向く（接近してくるあらゆるオブジェクトに気づく）動作を行うという、非現実的であり不自然な動作を行ってしまうことになる。以上のように、オブジェクトがプレイヤキャラクタに衝突する場合に従来の技術を用いても、プレイヤキャラクタの動作をリアルに表現することができない。
【０００５】
なお、オブジェクトが衝突してきた方向を向く動作をプレイヤキャラクタに行わせる場合には、オブジェクトとプレイヤキャラクタとが実際に衝突したか否かを判定すべきであるが、上述した従来の技術では、オブジェクトとプレイヤキャラクタとの距離を検出するだけである。したがって、オブジェクトとプレイヤキャラクタとが衝突したか否かを正確に検知することができない。
【０００６】
それ故、本発明の目的は、オブジェクト同士が衝突した場合におけるオブジェクトの動作をリアルに表現することができる画像処理プログラムおよび画像処理装置を提供することである。
【課題を解決するための手段】
【０００７】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【０００８】
第１の発明は、複数のオブジェクト（プレイヤキャラクタ７１、敵キャラクタ、矢オブジェクト７２等）が登場する３次元の仮想空間を表示装置（テレビ２）に表示させる画像処理装置（ゲーム装置３）のコンピュータ（ＣＰＵ３１等）に実行させる画像処理プログラム（ゲームプログラム）である。画像処理プログラムは、第１移動制御ステップ（ステップＳ３）と、判定ステップ（ステップＳ４４およびＳ４５）と、方向算出ステップ（ステップＳ５４〜Ｓ５６）と、第１動作制御ステップ（ステップＳ６０またはＳ６１）と、表示ステップ（ステップＳ１２）とをコンピュータに実行させる。第１移動制御ステップにおいては、コンピュータは、仮想空間において第１オブジェクト（矢オブジェクト７２）を移動させる。判定ステップにおいては、第１オブジェクトに設定される当たり判定領域（７４）が第２オブジェクト（プレイヤキャラクタ７１）に設定される当たり判定領域（７３）に接触しているか否かを判定する。方向算出ステップにおいては、判定ステップにおいて接触していると判定される場合、第１オブジェクトの移動方向（ベクトルＶ１またはＶ２）を算出する。第１動作制御ステップにおいては、第１オブジェクトの移動方向の逆方向を指定方向（第１方向または第２方向）として第２オブジェクトの少なくとも一部が当該指定方向を向くように当該第２オブジェクトを動作させる。表示ステップにおいては、第１動作制御ステップによって第２オブジェクトが動作する様子を表示装置に表示させる。
【０００９】
また、第２の発明は、複数のオブジェクト（プレイヤキャラクタ７１、敵キャラクタ、矢オブジェクト７２等）が登場する３次元の仮想空間を表示装置（テレビ２）に表示させる画像処理装置（ゲーム装置３）のコンピュータ（ＣＰＵ３１等）に実行させる画像処理プログラム（ゲームプログラム）である。画像処理プログラムは、速度ベクトル記憶ステップ（ステップＳ３）と、第１移動制御ステップ（ステップＳ３）と、判定ステップ（ステップＳ４４およびＳ４５）と、速度ベクトル参照ステップ（ステップＳ５４）と、第１動作制御ステップ（ステップＳ６０またはＳ６１）と、表示ステップ（ステップＳ１２）とをコンピュータに実行させる。速度ベクトル記憶ステップにおいては、コンピュータは、単位時間当たりの仮想空間における第１オブジェクトの移動方向と距離を示す速度ベクトルを記憶する。第１移動制御ステップにおいては、速度ベクトルに基づいて仮想空間における第１オブジェクトの配置位置を更新して、当該第１オブジェクトを移動させる。判定ステップにおいては、第１オブジェクトが第２オブジェクトに衝突したか否かを判定する。速度ベクトル参照ステップにおいては、判定ステップにおいて衝突したと判定される場合、第１オブジェクトの速度ベクトルを参照する。第１動作制御ステップにおいては、速度ベクトルの逆方向を指定方向として第２オブジェクトの少なくとも一部が当該指定方向を向くように当該第２オブジェクトを動作させる。表示ステップにおいては、第１動作制御ステップによって第２オブジェクトが動作する様子を表示装置に表示させる。
【００１０】
また、第３の発明は、複数のオブジェクト（プレイヤキャラクタ７１、敵キャラクタ、爆弾オブジェクト７５等）が登場する３次元の仮想空間を表示装置（テレビ２）に表示させる画像処理装置（ゲーム装置３）のコンピュータ（ＣＰＵ３１）に実行させる画像処理プログラム（ゲームプログラム）である。画像処理プログラムは、変形ステップ（ステップＳ３）と、判定ステップ（ステップＳ４４およびＳ４５）と、位置算出ステップ（ステップＳ５３，Ｓ５５およびＳ５６）と、第１動作制御ステップ（ステップＳ６０またはＳ６１）と、表示ステップ（ステップＳ１２）とをコンピュータに実行させる。変形ステップにおいては、コンピュータは、第１オブジェクト（爆弾オブジェクト７５）に設定される当たり判定領域（７６）を変形させる。判定ステップにおいては、第１オブジェクトが第２オブジェクト（プレイヤキャラクタ７１）に衝突したか否かを判定する。位置算出ステップにおいては、判定ステップにおいて衝突したと判定される場合、各当たり判定領域の接触位置（図８等に示す点Ｐ）を算出する。第１動作制御ステップにおいては、第２オブジェクトの位置から接触位置への方向を指定方向として第２オブジェクトの少なくとも一部が当該指定方向を向くように当該第２オブジェクトを動作させる。表示ステップにおいては、第１動作制御ステップによって第２オブジェクトが動作する様子を表示装置に表示させる。
【００１１】
また、第４の発明においては、第２オブジェクトは、所定の第１条件が満たされたとき、移動動作とは異なる所定の動作（攻撃動作）を行うことが可能であってもよい。このとき、第１動作制御ステップにおいては、第２オブジェクトの一部（プレイヤキャラクタ７１の上半身）が指定方向を向くように制御される（図１４参照）。画像処理プログラムは、第２動作制御ステップをコンピュータにさらに実行させる。第２動作制御ステップにおいては、コンピュータは、第１条件が満たされたことに応じて、指定方向に向かって所定の動作を行うように第２オブジェクトを動作させる。
【００１２】
また、第５の発明においては、第２オブジェクトは、ユーザによって操作される操作対象オブジェクト（プレイヤキャラクタ）であってもよい。このとき、第１条件は、第２オブジェクトに対するユーザの操作が行われたことである。第１動作制御ステップにおいては、第２オブジェクトの動作がプレイヤによる操作とは無関係に実行される。
【００１３】
また、第６の発明においては、画像処理プログラムは、第２移動制御ステップをコンピュータにさらに実行させてもよい。第２移動制御ステップにおいては、コンピュータは、第２オブジェクトの一部が指定方向を向くとき、当該一部以外の部分が向く方向に当該第２オブジェクトを移動させる。
【００１４】
また、第７の発明においては、第１動作制御ステップにおいて、第２オブジェクトの一部（プレイヤキャラクタの上半身）が指定方向を向くように制御されてもよい（図１４参照）。このとき、画像処理プログラムは、第３動作制御ステップをコンピュータにさらに実行させる。第３動作制御ステップにおいては、コンピュータは、第２オブジェクトの一部が指定方向を向いた後、所定の第２条件が満たされたことに応じて当該一部を元の向きに戻すように第２オブジェクトを動作させる。
【００１５】
また、第８の発明においては、判定ステップにおいて、第１オブジェクトに設定される当たり判定領域（７４）が第２オブジェクトに設定される当たり判定領域（７３）に接触しているか否かによって、第１オブジェクトが第２オブジェクトに衝突したか否かが判定されるようにしてもよい。
【００１６】
また、第９の発明においては、方向算出ステップにおいて、第１オブジェクトの移動方向を示すベクトル（速度ベクトル）について仮想空間の所定面に平行な成分を示す２次元ベクトル（図５に示すベクトルＶ１）が算出されてもよい。このとき、第１動作制御ステップにおいては、コンピュータは、方向算出ステップで算出された２次元ベクトルの逆方向が指定方向とされ、第２オブジェクトが所定面に垂直な軸（ｙ軸）を中心とした回転動作を行う。
【００１７】
また、第１０の発明においては、第１制御ステップにおいて、接触位置から第２オブジェクトの位置への方向を示すベクトルについて仮想空間の所定面に平行な成分を示す２次元ベクトル（図９に示すベクトルＶ３）が算出されてもよい。このとき、第２オブジェクトは、当該２次元ベクトルの逆方向を指定方向として所定面に垂直な軸（ｙ軸）を中心とした回転動作を行う。
【００１８】
また、本発明は、上記画像処理プログラムを実行することによって実現される機能と同等の機能を有する画像処理装置の形態で提供されてもよい。
【発明の効果】
【００１９】
第１の発明によれば、第２オブジェクトは、第１オブジェクトが移動してきた方向を向くように動作する。これによって、第１オブジェクトと衝突したときの第２オブジェクトの動作をリアルに表現することができる。さらに、第１の発明によれば、第２オブジェクトが動作を行う向きは、２つのオブジェクトが衝突した位置ではなく、第１オブジェクトの移動方向に基づいて決定される。これによって、２つのオブジェクトが衝突した位置に基づいて第２オブジェクトの動作の向きを決定する場合に比べて、より自然でリアルな動作を行わせることができる。
【００２０】
第２の発明によれば、第１の発明と同様の効果を得ることができる。さらに、第２の発明によれば、速度ベクトルを用いることによって第１オブジェクトの移動方向を正確に算出することができる。また、速度ベクトルは、第１オブジェクトを移動させる処理において算出され、当該ベクトルの逆方向が指定方向に決定される。したがって、本発明では、例えば第２オブジェクトの位置から接触位置までのベクトルを算出する計算等の特別な計算を行わずに、オブジェクトの移動方向を容易に算出することができる。
【００２１】
第３の発明によれば、第２オブジェクトは、第１オブジェクトの当たり判定領域と第２オブジェクトの当たり判定領域との接触位置の方向を向くように動作する。これによって、第１オブジェクトと衝突したときの第２オブジェクトの動作をリアルに表現することができる。また、第２の発明によれば、第１オブジェクトが移動しないオブジェクトであり、第１オブジェクトの移動方向に基づいて第２オブジェクトの動作の向きを決定することできない場合でも、第２オブジェクトの挙動をリアルに表現することができる。
【００２２】
第４の発明によれば、第２オブジェクトが指定方向を向いたときにさらに所定の動作を行うという、複雑でリアルな動作を第２オブジェクトに行わせることができる。
【００２３】
第５の発明によれば、指定方向に向けた所定の動作を第２オブジェクトに行わせる場合、ユーザは、第２オブジェクトを指定方向に向ける動作を行わせる操作を行う必要はなく、所定の動作を行わせる操作を行うだけでよい。これによって、指定方向に向けた所定の動作を第２オブジェクトに行わせるためのユーザの操作を簡易化することができる。
【００２４】
第６の発明によれば、第２オブジェクトは、第２オブジェクトが移動する方向と、所定の動作を行う方向とを別々に行うことができるので、より複雑でリアルな動作を第２オブジェクトに行わせることができる。
【００２５】
第７の発明によれば、第２オブジェクトは、その一部のみが指定方向を向いている状態から自動的に元の状態に戻される。ここで、第２オブジェクトの一部のみが指定方向を向いている状態とは、例えば第２オブジェクトが人型のオブジェクトである場合、上半身と下半身とが別々の方向を向いている状態である（図１４参照）。このような状態が無制限に継続されると、プレイヤに対して不自然な印象を与え、第２オブジェクトの動作は自然でリアルな動作とは言えなくなる。これに対して、本発明によれば、第２オブジェクトの一部のみが指定方向を向いている状態が自然に元の状態に戻されるので、第２オブジェクトの自然な動作を表現することができる。
【００２６】
第８の発明によれば、当たり判定領域を用いることによって２つのオブジェクトの衝突判定を容易に行うことができる。また例えば、当たり判定領域を球や円柱等の領域にすれば、衝突判定の処理を高速に行うことができ、コンピュータの処理負担を軽減することができる。
【００２７】
第９および第１０の発明によれば、１つの軸を中心とした単純な回転動作によって第２オブジェクトの動作を実現することができるので、第２オブジェクトを動作させるための処理が簡易になる。すなわち、コンピュータの処理負担を軽減することができる。
【発明を実施するための最良の形態】
【００２８】
以下、本発明の一実施形態に係るゲーム装置およびゲームプログラム、並びに当該ゲーム装置を含むゲームシステムについて説明する。図１は、当該ゲームシステム１の外観図である。なお、本実施形態では、本発明に係る画像処理装置の一例として据置型ゲーム装置を例に挙げて説明するが、画像処理装置はこれに限定されるものではない。例えば携帯型ゲーム装置、アーケードゲーム装置、携帯端末、携帯電話またはパーソナルコンピュータなどのように、ゲームプログラム（画像処理プログラム）を実行するコンピュータを搭載する機器に適用することができる。
【００２９】
図１において、ゲームシステム１は、据置型ゲーム装置（以下、単にゲーム装置と記載する）３と、当該ゲーム装置３に接続コードを介して接続される表示装置の一例であるテレビジョン受像機（以下、単にテレビと記載する）２とを含む。ゲーム装置３には、プレイヤによって操作可能な複数の操作スイッチを有するコントローラ６が接続される。また、ゲーム装置３には、本発明に係るゲームプログラムを記憶した情報記憶媒体の一例である光ディスク４が着脱自在に装着される。さらに、ゲーム装置３には、ゲームのセーブデータ等を記憶するフラッシュメモリ等を搭載するカートリッジ５が必要に応じて着脱自在に装着される。ゲーム装置３は、光ディスク４に記憶されたゲームプログラムを実行することによって得られるゲーム画像をテレビ２に表示する。さらに、ゲーム装置３は、カートリッジ５に記憶されたセーブデータを用いて、過去に実行されたゲームの続きを実行したり、過去に実行されたゲーム状態を再現して、ゲーム画像をテレビ２に表示することもできる。そして、ゲーム装置３のプレイヤは、テレビ２に表示されたゲーム画像を見ながらコントローラ６を操作することによってゲームを楽しむことができる。
【００３０】
コントローラ６は、上述したように接続コードを介してゲーム装置３に着脱自在に接続される。コントローラ６は、テレビ２に表示されるゲーム空間に登場するプレイヤオブジェクト（プレイヤの操作対象であるオブジェクト（キャラクタ））を主に操作するための操作手段であり、複数の操作スイッチとして、操作ボタン、キー、およびスティック等の入力部を備えている。具体的には、コントローラ６には、プレイヤによって把持されるグリップ部が形成される。また、コントローラ６は、プレイヤの左手の親指等によって操作可能なメインスティック６１および十字キー６２と、右手の親指等によって操作可能なＣスティック６７およびＡボタン６３等を含む。なお、コントローラ６は、上記ボタンの他、Ｂボタン６４、Ｘボタン６５、Ｙボタン６６、およびスタート−ポーズボタンや、プレイヤの右手の人差し指等によって操作可能なＲボタンおよびＺボタン、プレイヤの左手の人差し指等によって操作可能なＬボタンを含む。また、ゲームシステム１は、ゲーム装置３に複数のコントローラ６を接続することによって、複数のプレイヤが同時にゲームをプレイすることができる。
【００３１】
次に、図２を参照して、本発明に係るゲーム装置３の構成について説明する。図２は、ゲームシステム１の機能ブロック図である。図２において、ゲーム装置３は、各種プログラムを実行するＣＰＵ（セントラルプロセッシングユニット）３１を備える。ＣＰＵ３１は、図示しないブートＲＯＭに記憶された起動プログラムを実行し、ワークメモリ３２等のメモリの初期化等を行った後、光ディスク４に記憶されているゲームプログラムをワークメモリ３２に一旦読み込んだ後に当該ゲームプログラムを実行し、そのゲームプログラムに応じたゲーム処理を行うものである。ＣＰＵ３１には、ワークメモリ３２、ビデオＲＡＭ（ＶＲＡＭ）３３、外部メモリインターフェース（Ｉ／Ｆ）３４、コントローラインターフェース（Ｉ／Ｆ）３５、ＧＰＵ（Ｇｒａｐｈｉｃｓ  ＰｒｏｃｅＳｉｎｇ  Ｕｎｉｔ）３６、および光ディスクドライブ３７がバスを介して接続される。
【００３２】
ワークメモリ３２は、ＣＰＵ３１で使用される記憶領域であって、ＣＰＵ３１の処理に必要なゲームプログラム等を適宜記憶する。例えば、ワークメモリ３２は、ＣＰＵ３１によって光ディスク４から読み出されたゲームプログラムや各種データ等を記憶する。このワークメモリ３２に記憶されたゲームプログラムや各種データ等がＣＰＵ３１によって実行される。ＶＲＡＭ３３は、テレビ２にゲーム画像を表示するためのゲーム画像データを格納する。外部メモリＩ／Ｆ３４は、図示しないコネクタにカートリッジ５を嵌合させることによってゲーム装置３とカートリッジ５とを通信可能に接続する。ＣＰＵ３１は、カートリッジ５に設けられたバックアップメモリに外部メモリＩ／Ｆ３４を介してアクセスする。コントローラＩ／Ｆ３５は、図示しないコネクタによって外部機器とゲーム装置３とを通信可能に接続する。例えば、コントローラ６は、接続コードを介して当該コネクタと嵌合し、コントローラＩ／Ｆ３５を介してゲーム装置３と接続される。コントローラ６は、プレイヤによるメインスティック６１およびＣスティック６７の操作や各操作ボタン６２〜６６等の押圧操作に応じて、操作内容を示す操作データをゲーム装置３に出力する。ＧＰＵ３６は、例えば、３Ｄグラフィックスの表示に必要なベクトル演算やレンダリング処理等の処理をＣＰＵ３１からの指示に応じて行う半導体チップで構成され、当該ＧＰＵ３６によってレンダリングされたゲーム画像はテレビ２に表示される。光ディスクドライブ３７は、ＣＰＵ３１からの指示に応じて、光ディスク４に記憶されたゲームプログラム、画像データ、サウンドデータなどの各種のデータを読み出す。
【００３３】
以下、光ディスク４に格納されたゲームプログラムによってゲーム装置３において実行されるゲーム処理について説明する。まず、本実施形態におけるゲームの概要を説明する。本ゲームは、３次元の仮想のゲーム空間において、プレイヤによって操作されるプレイヤキャラクタ（操作対象オブジェクト）、および、ゲーム装置３によって動作が制御される敵キャラクタが登場するアクションゲームである。プレイヤキャラクタおよび敵キャラクタは、剣や弓等の武器で互いに攻撃し合う。プレイヤキャラクタは、敵キャラクタによる攻撃を受けると体力が減っていき、体力が０になるとゲームオーバーとなる。本ゲームは、プレイヤキャラクタを操作して敵キャラクタを倒すことを目的とする。
【００３４】
本実施形態では、攻撃を受けたときのプレイヤキャラクタの動作をリアルに表現すべく、ゲーム装置３はプレイヤキャラクタの動作を制御する。具体的には、プレイヤキャラクタは、攻撃を受けた場合、攻撃を受けた方向を向くように動作が制御される。なお、この動作は、プレイヤによる操作とは無関係に行われる。つまり、プレイヤキャラクタの向きを変える操作をプレイヤが行わなくても、ゲーム装置３は、攻撃を受けた方向を向くようにプレイヤキャラクタの動作を制御する。以下、図３〜図７を用いて、プレイヤキャラクタに矢が当たる場合を例として説明する。
【００３５】
図３は、プレイヤキャラクタに矢（矢オブジェクト）が当たる直前のゲーム空間を示す図である。以下では、ゲーム空間における位置を表すためのワールド座標系として、ｘｚ平面が地面と平行になるように設定された座標系を考える。図３において、矢オブジェクト７２は、プレイヤキャラクタ７１の方に向かって飛んでくる（移動する）。プレイヤキャラクタ７１には円柱形状の当たり判定領域７３が設定される。当たり判定領域７３は、円柱の中心軸がプレイヤキャラクタの位置を通ってｙ軸に平行となるように設定される。プレイヤキャラクタ７１をその内部にほぼ含むように設定される。一方、矢オブジェクト７２には球形の当たり判定領域７４が設定される。当たり判定領域７４は、矢オブジェクト７２の鏃の部分に設定される。これらの当たり判定領域７３および７４は、ゲーム空間において仮想的に設定され、ゲーム画面には表示されない。なお、プレイヤキャラクタ７１や矢オブジェクト７２に設定される当たり判定領域はどのような形状であってもよい。例えば、プレイヤキャラクタ７１の当たり判定領域は球であってもよい。また、１つのキャラクタに対して複数の立体からなる当たり判定領域を設定してもよい。例えば、プレイヤキャラクタの手や足や頭等の部分毎に当たり判定領域を設定してもよい。
【００３６】
ゲーム装置３は、２つの当たり判定領域７３および７４が接触したか否かによって、プレイヤキャラクタ７１および矢オブジェクト７２が接触したか否かを判断する。そして、プレイヤキャラクタ７１および矢オブジェクト７２が接触したと判断した場合、矢オブジェクト７２の方向を向く動作（振り向き動作）をプレイヤキャラクタ７１に行わせる。本実施形態では、振り向き動作は、ｙ軸を中心とした回転動作（第１回転動作）と、ｙ軸に垂直な軸を中心とした回転動作（第２回転動作）という２つの回転動作を組み合わせた動作である。以下、第１および第２回転動作について説明する。
【００３７】
まず、第１回転動作について図４および図５を用いて説明する。図４は、プレイヤキャラクタに矢が当たったときのゲーム空間を示す図である。図４は、３次元のゲーム空間を上方（ｙ軸正方向）から見た図である。本実施形態においては、ｘｚ平面に関するプレイヤキャラクタの向き、すなわち、第１回転動作に関するプレイヤキャラクタの向きは、ワールド座標系において定められるｘｚ平面に平行な所定方向（第１基準方向）を基準として表現される。図４では第１基準方向はｚ軸正方向である。ｙ軸を中心とした回転に関するプレイヤキャラクタの向きは、当該第１基準方向と現在の方向とのなす角度θｈとして表現される。
【００３８】
図４に示すようにプレイヤキャラクタ７１に矢オブジェクト７２が接触した場合、ゲーム装置３は、第１回転動作に関してプレイヤキャラクタが向くべき方向（第１方向）を算出する。この第１方向は、矢オブジェクト７２の速度ベクトルに基づいて算出される。矢オブジェクト７２の速度ベクトルとは、矢オブジェクト７２の単位時間当たりの（例えば１フレーム毎の）移動（移動方向および移動量）を表す３次元のベクトルである。各オブジェクトの速度ベクトルは、物理計算等を考慮した所定のアルゴリズムに従って例えば１フレーム毎に計算される。具体的には、第１方向は、速度ベクトルのｘ成分およびｚ成分からなる２次元のベクトル（図５に示すベクトルＶ１）の逆方向として算出される。図５は、図４に示す状態から振り向き動作を行った後のプレイヤキャラクタを示す図である。ゲーム装置３は、算出された第１方向を向くようにプレイヤキャラクタ７１に第１回転動作を行わせる。図５に示すように、プレイヤキャラクタ７１は、算出された第１方向を全身で向く動作を第１回転動作として行う。
【００３９】
次に、第２回転動作について図６および図７を用いて説明する。図６は、プレイヤキャラクタに矢が当たったときのゲーム空間を示す図である。図６は、３次元のゲーム空間をｘ軸正方向から見た図である。本実施形態においては、ｙ軸に垂直な軸を中心とした回転動作（第２回転動作）に関するプレイヤキャラクタの向きは、ｘｚ平面に平行な方向（第２基準方向）を基準として表現される。ｙ軸に垂直な軸を中心とした回転に関するプレイヤキャラクタの向きは、当該第２基準方向と現在の方向とのなす角度θｖとして表現される。
【００４０】
図７は、図６に示す状態から振り向き動作を行った後のプレイヤキャラクタを示す図である。プレイヤキャラクタ７１に矢オブジェクト７２が接触した場合、ゲーム装置３は、第２回転動作に関してプレイヤキャラクタが向くべき方向（第２方向）を算出する。この第２方向は、矢オブジェクト７２の上記速度ベクトルに基づいて算出される。具体的には、第２方向は、速度ベクトルのｙ成分と、上記第１方向に関する速度ベクトルの成分とからなる２次元のベクトル（図７に示すベクトルＶ２）の逆方向となる。なお、図７においては第１方向をｚ軸正方向としているので、ベクトルＶ２は、速度ベクトルのｙ成分とｚ成分とを各成分とする２次元のベクトルとなる。ゲーム装置３は、図７に示すように、算出した第２方向を向くようにプレイヤキャラクタ７１に第２回転動作を行わせる。つまり、プレイヤキャラクタ７１は、第２方向に向かって頭を向ける動作を第２回転動作として行う。
【００４１】
本実施形態では、矢オブジェクトに限らず、オブジェクトが移動した結果として当該オブジェクトがプレイヤキャラクタに接触した場合、プレイヤキャラクタは、図３〜図７に示した方法で振り向き動作を行う。また、オブジェクトが停止していてプレイヤキャラクタが移動した結果として当該オブジェクトとプレイヤキャラクタとが接触した場合も、プレイヤキャラクタは、図３〜図７に示した方法で振り向き動作を行う。
【００４２】
以上のように、本実施形態によれば、オブジェクトに接触した場合におけるプレイヤキャラクタの動作をリアルに表現することができる。本実施形態では、プレイヤキャラクタが振り向き動作を行う方向（上記第１および第２方向）を、オブジェクトの速度ベクトルの逆方向としている。これは、移動してきたオブジェクトがプレイヤキャラクタに衝突した場合の動作をよりリアルに表現するためである。ここで、第１および第２方向を決定する他の方法としては、オブジェクトとプレイヤキャラクタとの接触位置に基づいて決定する方法が考えられる。この方法では、具体的には、プレイヤキャラクタの位置（例えば中心位置）から当該接触位置への方向を第１および第２方向とするのである。しかし、この方法では、プレイヤキャラクタの振り向く方向が、オブジェクトが移動してきた方向に対して不自然になることがある。例えば図４に示す場合において、プレイヤキャラクタ７１の中心位置から接触位置への方向を第１方向とすると、矢オブジェクト７２が飛んできた方向と第１方向とが一致しない。その結果、プレイヤは、プレイヤキャラクタが振り向く方向が不自然であると感じるおそれがある。これに対して、本実施形態では、第１方向とオブジェクトが移動してきた方向とが一致するので、上述のような不自然さが生じることがない。
【００４３】
次に、オブジェクトの当たり判定領域が変形することによって当該オブジェクトがプレイヤキャラクタと接触したと判定される場合について説明する。本実施形態では、オブジェクトが移動してプレイヤキャラクタに当たる場合の他、オブジェクトの当たり判定領域が変形することによってプレイヤキャラクタに当たったと判定される場合がある。この場合のオブジェクトは、例えば爆弾のオブジェクトであり、オブジェクトの位置は変化せずに当たり判定領域が変形する。以下では、上記矢オブジェクトのように、ゲーム空間内を移動する結果プレイヤキャラクタに衝突するオブジェクトを移動オブジェクトと呼ぶ。また、爆弾オブジェクトのように、当たり判定領域が変形する結果プレイヤキャラクタに衝突するオブジェクトを領域変形オブジェクトと呼ぶ。
【００４４】
領域変形オブジェクトは、何らかの条件が満たされたことによって当たり判定領域が変形する。その結果、領域変形オブジェクトとプレイヤキャラクタとが接触することがある。本実施形態では、当たり判定領域が変形した結果として衝突が生じたときも、オブジェクトが移動した結果として衝突が生じたときと同様、プレイヤキャラクタに振り向き動作を行わせる。以下、図８〜図１２を用いて、プレイヤが爆弾による攻撃を受けた場合を例として説明する。
【００４５】
図８は、プレイヤキャラクタが爆弾による攻撃を受けた時のゲーム空間を示す図である。爆弾オブジェクト７５は、何らかの条件（例えば、制限時間が経過したこと）が満たされたことに応じて爆発する。すなわち、爆弾オブジェクト７５の当たり判定領域７６が拡大する。ここでは、当たり判定領域７６は、爆弾オブジェクト７５の位置を中心に配置される球形の形状を有する。当たり判定領域７６は、爆弾オブジェクト７５の爆発によって半径が増加していくように変形する。当たり判定領域７６の拡大は、爆発から所定時間が経過した時点で停止し、当たり判定領域７６は消滅する（ゲーム空間に配置されなくなる）。なお、爆弾オブジェクト７５が爆発する際、爆発に応じて爆弾オブジェクト７５を消去するようにしてもよいし、さらに、爆発による光や爆風を表すオブジェクトを表示するようにしてもよい。このとき、当たり判定領域７６は、爆風オブジェクトの当たり判定領域であると考えてもよい。
【００４６】
ゲーム装置３は、２つの当たり判定領域７３および７６が接触したか否かによって、プレイヤキャラクタ７１が爆発の影響を受けたかどうかを判断する。そして、各当たり判定領域７３および７６が接触したと判断した場合、爆発が起こった方向を向く振り向き動作をプレイヤキャラクタ７１に行わせる。爆発の場合における振り向き動作は、上記矢オブジェクトの場合と同様、ｙ軸を中心とした第１回転動作と、ｙ軸に垂直な軸を中心とした第２回転動作という２つの回転動作を組み合わせた動作である。
【００４７】
まず、第１回転動作について図９および図１０を用いて説明する。図９は、プレイヤキャラクタが爆発の影響を受けたときのゲーム空間を示す図である。図９は、３次元のゲーム空間を上方（ｙ軸正方向）から見た図である。上述したように、ｙ軸を中心とした回転に関するプレイヤキャラクタの向きは、上記第１基準方向と現在の方向とのなす角度θｈとして表現される。
【００４８】
当たり判定領域７６が拡大していった結果、プレイヤキャラクタ７１の当たり判定領域７３に接触した場合、ゲーム装置３は上記第１方向を算出する。ここで、当たり判定領域７６が拡大して接触が生じた場合は、オブジェクトの速度ベクトルに基づいて第１および第２方向を算出することができない。そこで、この場合、第１方向は、２つの当たり判定領域７３および７６の接触位置（点Ｐ）に基づいて算出される。具体的には、ゲーム装置３は、当該接触位置を始点としプレイヤキャラクタ７１の位置（例えば、中心位置）を終点とするベクトルを算出し、このベクトルを速度ベクトルとして用いる。すなわち、当該速度ベクトルのｘ成分およびｚ成分を各成分とする２次元ベクトル（図９に示すベクトルＶ３）の逆方向を第１方向とする。図１０は、図９に示す状態から振り向き動作を行った後のプレイヤキャラクタを示す図である。ゲーム装置３は、算出された第１方向を向くようにプレイヤキャラクタ７１に第１回転動作を行わせる。図１０に示すように、プレイヤキャラクタ７１は、算出された第１方向を全身で向く動作を第１回転動作として行う。
【００４９】
次に、第２回転動作について図１１および図１２を用いて説明する。図１１は、プレイヤキャラクタが爆発の影響を受けたときのゲーム空間を示す図である。図１１は、３次元のゲーム空間をｘ軸正方向から見た図である。上述したように、ｙ軸に垂直な軸を中心とした回転に関するプレイヤキャラクタの向きは、上記第２基準方向と現在の方向とのなす角度θｖとして表現される。
【００５０】
図１２は、図１１に示す状態から振り向き動作を行った後のプレイヤキャラクタを示す図である。当たり判定領域７６が拡大していった結果、プレイヤキャラクタ７１の当たり判定領域７３に接触した場合、ゲーム装置３は上記第２方向を算出する。ここでは、第２方向は、第１方向と同様、２つの当たり判定領域７３および７６の接触位置（点Ｐ）に基づいて算出される。具体的には、ゲーム装置３は、当該接触位置を始点としプレイヤキャラクタ７１の位置を終点とするベクトルを算出し、このベクトルを速度ベクトルとして用いる。そして、当該速度ベクトルのｙ成分と、当該速度ベクトルの上記第１方向に関する成分とを各成分とする２次元ベクトルの逆向きのベクトル（図１２に示すベクトルＶ４’）を第２方向とする。
【００５１】
ここで、第２回転動作に関しては、プレイヤキャラクタ７１が動作可能な範囲（動作範囲）が予め設定される。ゲーム装置３は、当該動作範囲内でプレイヤキャラクタ７１に第２回転動作を行わせる。このような動作範囲を設定する理由は、上記第２基準方向を基準として例えば１８０°の方向にプレイヤキャラクタ７１が頭を回転させるのは不自然だからである。ここでは、動作範囲は、プレイヤキャラクタ７１が動作可能な第２方向の角度をθｖとすると、−θａ°≦θｖ≦θａの範囲であるとする。図１１および図１２に示す場合おいては、算出された第２方向を示すベクトルＶ’４の角度は、動作範囲の下限である−θａ°を下回っている。したがって、ゲーム装置３は、接触位置に基づいて算出された第２方向を補正し、−θａ°の方向を第２方向とする。図１２に示すように、プレイヤキャラクタ７１は、−θａ°の方向に向かって頭を向ける動作を第２回転動作として行う。
【００５２】
なお、動作範囲は、領域変形オブジェクトの場合であっても移動オブジェクトの場合であっても同じ範囲が設定される。したがって、矢オブジェクトがプレイヤキャラクタに当たった場合であっても、図１１および図１２に示した場合と同様、第２方向が補正されることがある。
【００５３】
以上のように、本実施形態によれば、速度ベクトルを算出することができない場合であっても、オブジェクトに接触した際におけるプレイヤキャラクタの動作をリアルに表現することができる。
【００５４】
なお、上記においては、第１回転動作に関して、プレイヤキャラクタ７１は、第１方向を全身で向く動作を行うものとしたが、その一部のみの向きを変えるようにしてもよい。プレイヤキャラクタ７１は、例えば上半身のみを向けるようにしてもよい。図１３および図１４は、プレイヤキャラクタが上半身を第１方向に向ける動作を示す図である。プレイヤキャラクタ７１の左側から飛んできた矢オブジェクト７２がプレイヤキャラクタ７１に当たった場合（図１３）、ゲーム装置３は、上半身のみを左側に向ける動作をプレイヤキャラクタ７１に行わせるようにしてもよい（図１４）。このとき、さらに、第１方向に関しても第２方向と同様に上記動作範囲を設定するようにしてもよい。
【００５５】
ここで、本実施形態では、プレイヤキャラクタ７１は、自分で歩行してゲーム空間内を移動することができるとともに、馬に乗って移動することができるものとする。つまり、プレイヤキャラクタ７１は、自分で立っている状態と、馬に乗っている状態という２つの状態をとり得る。本実施形態では、プレイヤキャラクタ７１は、自分で立っている状態のとき、全身を回転する動作を第１回転動作として行い、馬に乗っている状態のとき、上半身を回転する動作を第１回転動作として行う。すなわち、馬に乗っている状態のときに振り向き動作が行われると、馬の方向は変わらずに、プレイヤキャラクタの上半身のみの向きが変わる。
【００５６】
また、本実施形態では、プレイヤキャラクタ７１は、自分で立っている状態および馬に乗っている状態の両方において、敵キャラクタへの攻撃が可能である。ここでは、弓による攻撃を行うことが可能であるとする。さらに、プレイヤキャラクタ７１は、馬に乗っている状態において振り向き動作を行った場合、振り向き動作を行った後の上半身の方向に向かって攻撃を行うことが可能である。したがって、この場合、馬が進む方向は変わらずに、プレイヤキャラクタ７１が弓を射る方向が変わることになり、移動方向と攻撃方向とが異なることになる。なお、馬に乗っている状態においては、振り向き動作を行ってから所定時間が経過すると、プレイヤキャラクタ７１は、振り向き動作を行う前の状態に戻る動作（回復動作と呼ぶ）を行う。すなわち、馬が進む正面方向に上半身を向ける動作を行う。
【００５７】
本実施形態では、プレイヤキャラクタは、プレイヤの操作とは無関係に振り向き動作を行う。また、振り向き動作が行われた後、プレイヤキャラクタは敵キャラクタに対する攻撃を行うことができる。したがって、プレイヤキャラクタが攻撃を受けた場合、プレイヤは、攻撃された方向にプレイヤキャラクタを向ける操作を行わずに単に攻撃の操作を行うだけで、攻撃を受けた方向に攻撃を行うことができる。このように、本実施形態によれば、攻撃を受けた後の反撃を行う操作がプレイヤにとって容易になるという利点がある。
【００５８】
次に、ゲームプログラムを実行することによってゲーム装置３において行われるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる主なデータについて図１５を用いて説明する。図１５は、ゲーム装置３のワークメモリ３２に記憶される主なデータを示す図である。図１５に示すように、ワークメモリ３２には、プレイヤキャラクタデータとして、キャラクタ位置データ８０、移動方向データ８１、攻撃方向データ８２、および判定領域データ８３等が記憶される。また、ワークメモリ３２には、オブジェクトデータとして、オブジェクト位置データ８４、速度ベクトルデータ８５、判定領域データ８６、および衝突フラグ８７等が記憶される。また、ワークメモリ３２には、ゲーム処理に用いられるその他のデータとして、第１フラグ８８、第２フラグ８９、および衝突位置データ９０等が記憶される。
【００５９】
プレイヤキャラクタデータは、プレイヤキャラクタに関して設定される各種パラメータを示すデータである。プレイヤキャラクタデータには、キャラクタ位置データ８０、移動方向データ８１、および攻撃方向データ８２が含まれる。キャラクタ位置データ８０は、プレイヤキャラクタのゲーム空間における位置を示すデータである。キャラクタ位置データ８０としては、ワールド座標系により表される座標のデータが記憶される。
【００６０】
移動方向データ８１は、プレイヤキャラクタが移動する向きを示すデータである。移動方向データ８１としては、上記第１基準方向を基準として０°から３６０°の範囲で表される角度のデータが記憶される（図９参照）。移動方向データ８１が示す向きは、プレイヤキャラクタが実際に移動している向きではなく、プレイヤキャラクタが移動可能な向きである。移動方向データ８１が示す向きは、プレイヤキャラクタが自分で立っている状態のときはプレイヤキャラクタの向きであり、プレイヤキャラクタが馬に乗っている状態のときは馬の向きである。
【００６１】
攻撃方向データ８２は、プレイヤキャラクタが攻撃を行う向きを示すデータである。攻撃方向データ８２としては、移動方向データ８１と同様、上記第１基準方向を基準として０°から３６０°の範囲で表される角度のデータが記憶される。攻撃方向データ８２が示す向きは、プレイヤキャラクタが自分で立っている状態のときはプレイヤキャラクタの向き（すなわち、移動方向データ８１が示す向きと同じ向き）であり、プレイヤキャラクタが馬に乗っている状態のときはプレイヤキャラクタの上半身の向きである。
【００６２】
判定領域データ８３は、プレイヤキャラクタに設定される当たり判定領域を示すデータである。本実施形態では、プレイヤキャラクタの当たり判定領域は、プレイヤキャラクタの位置を中心とした円柱形の領域である（図３参照）。したがって、判定領域データ８３としては、当該円柱の半径を示すデータ、および、当該円柱の高さを示すデータがワークメモリ３２に記憶される。
【００６３】
なお、プレイヤキャラクタデータとしては、図１５に示すデータの他、プレイヤキャラクタが実際に移動しているときの１フレーム毎の移動量を示すデータや、プレイヤキャラクタの体力値や能力値を示すデータ等が含まれる。また、図１５には示していないが、ゲーム空間に登場する各敵キャラクタについてもプレイヤキャラクタデータと同様のデータが敵キャラクタ毎にワークメモリ３２に記憶される。
【００６４】
オブジェクトデータは、矢や爆弾等のオブジェクトに関して設定される各種パラメータを示すデータである。オブジェクトデータには、オブジェクト位置データ８４、速度ベクトルデータ８５、判定領域データ８６、衝突フラグ８７が含まれる。オブジェクト位置データ８４は、オブジェクトのゲーム空間における位置を示すデータである。オブジェクト位置データ８４としては、上記キャラクタ位置データ８０と同様、ワールド座標系により表される座標のデータが記憶される。また、速度ベクトルデータ８５は、オブジェクトの１フレーム毎の移動方向および移動量を表す３次元のベクトル（速度ベクトル）を示す。速度ベクトルの具体的な算出方法としては、例えば次の方法が考えられる。すなわち、オブジェクトの位置が１フレーム毎に更新される場合、前回（１フレーム前）のオブジェクトの位置と、現在のオブジェクトの位置とをワークメモリ３２に記憶する。そして、前回のオブジェクトの位置を始点とし、現在のオブジェクトの位置を終点とするベクトルを速度ベクトルとして算出する。
【００６５】
判定領域データ８６は、オブジェクトに設定される当たり判定領域を示すデータである。本実施形態では、オブジェクトの当たり判定領域は、オブジェクトの位置を中心とした球形の領域である（図３参照）。したがって、判定領域データ８６としては、当該球の半径を示すデータがワークメモリ３２に記憶される。なお、図１５においてはオブジェクトデータを１つのみ示しているが、オブジェクト毎に個別のオブジェクトデータがワークメモリ３２に記憶される。
【００６６】
衝突フラグ８７は、プレイヤキャラクタと衝突しているか否かを示すフラグである。すなわち、オブジェクトがプレイヤキャラクタと衝突している場合、衝突フラグ８７は“１”に設定され、オブジェクトがプレイヤキャラクタと衝突していない場合、衝突フラグ８７は“０”に設定される。
【００６７】
第１フラグ８８は、プレイヤキャラクタが振り向き動作を行っている最中であるか否かを示す。ここで、本実施形態では、振り向き動作および回復動作は、複数のフレームにわたって行われる。プレイヤキャラクタが振り向き動作を行っている最中であるとき、第１フラグ８８は“１”に設定され、プレイヤキャラクタが振り向き動作を行っている最中でないとき、第１フラグ８８は“０”に設定される。
【００６８】
第２フラグ８９は、プレイヤキャラクタの移動方向と攻撃方向とが異なっているか否かを示す。プレイヤキャラクタが馬に乗っている状態において、プレイヤキャラクタが振り向き動作を行った場合、移動方向（馬の向き）と攻撃方向（プレイヤキャラクタの上半身の向き）とが異なることとなる。第２フラグ８９は、馬の向きとプレイヤキャラクタの上半身の向きとが異なっているか否かを示すフラグである。すなわち、移動方向と攻撃方向とが異なっているとき、第２フラグ８９は“１”に設定され、移動方向と攻撃方向とが同じとき、第２フラグ８９は“０”に設定される。
【００６９】
衝突位置データ９０は、プレイヤキャラクタとオブジェクトとの衝突位置を示すデータである。具体的には、衝突位置データ９０は、プレイヤキャラクタの当たり判定領域とオブジェクトの当たり判定領域とが接する位置を示す。なお、プレイヤキャラクタに設定される当たり判定領域とオブジェクトに設定される当たり判定領域とが接触する場合とは、２つの当たり判定領域が接する場合、および、一方の当たり判定領域が他方にめり込む場合である。なお、めり込んだ状態における接触位置は、例えば次のように算出することができる。例えばプレイヤキャラクタの当たり判定領域（円柱）の底面の半径をｒ１とし、オブジェクトの当たり判定領域（球）の半径をｒ２とするとき、プレイヤキャラクタの位置とオブジェクトの位置とを結ぶ線分をｒ１：ｒ２の比に分割する位置を接触位置としてもよい。接触位置の算出方法は、プレイヤキャラクタに設定される当たり判定領域とオブジェクトに設定される当たり判定領域とに基づいて算出される方法であれば、どのような方法であってもよい。
【００７０】
次に、ゲームプログラムを実行することによってゲーム装置３において行われるゲーム処理の詳細を、図１６〜図２０を用いて説明する。図１６は、ゲーム装置３において実行されるゲーム処理の流れを示すフローチャートである。ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ３１は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、ワークメモリ３２等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがワークメモリ３２に読み込まれ、ＣＰＵ３１によって当該ゲームプログラムの実行が開始される。図１６に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【００７１】
図１６のステップＳ１において、まず、ゲーム空間が構築され、プレイヤキャラクタや敵キャラクタ等が初期位置に配置される。そして、プレイヤキャラクタとその周囲のゲーム空間を撮影する位置に仮想カメラが設定され、仮想カメラから見たゲーム空間の画像がテレビ２に表示される。このステップＳ１以降の処理において、コントローラ６を用いたゲーム操作が受け付けられ、ゲームが進行する。ステップＳ１の次にステップＳ２の処理が実行される。なお、以降のステップＳ２〜Ｓ１３の一連の処理ループは、１フレームの間に実行される。
【００７２】
ステップＳ２において、各敵キャラクタの動作が制御される。すなわち、ＣＰＵ３１は、ゲームプログラムにおいて予め定められているアルゴリズムに従って各敵キャラクタを動作させる。これによって各敵キャラクタは、ゲーム空間内を移動したり、プレイヤキャラクタに対する攻撃を行ったりする。敵キャラクタによる攻撃が行われた場合、ゲーム空間には新たに矢オブジェクトや爆弾オブジェクト等が配置される。ステップＳ２の次にステップＳ３の処理が実行される。
【００７３】
ステップＳ３において、ゲーム空間に配置されている各オブジェクトの動作が制御される。具体的には、ＣＰＵ３１は、ゲーム空間を移動するオブジェクト（上記矢オブジェクト）については、物理法則等を考慮した所定のアルゴリズムに従って速度ベクトルを算出して、当該オブジェクトを次のフレームで配置すべき位置を算出する。このとき、ワークメモリ３２に記憶されているオブジェクト位置データ８４および速度ベクトルデータ８５の内容は、新たに算出された位置および速度ベクトルの内容に更新される。また、ＣＰＵ３１は、当たり判定領域が変化するオブジェクト（上記爆弾オブジェクト）については、次のフレームにおける当たり判定領域を設定する。このとき、ワークメモリ３２に記憶されている判定領域データ８６の内容は、新たに算出された判定領域の内容に更新される。ステップＳ３の次にステップＳ４の処理が実行される。
【００７４】
ステップＳ４において、プレイヤキャラクタの動作を制御する処理（プレイヤキャラクタ動作制御処理）が実行される。図１７は、図１６に示すステップＳ４（プレイヤキャラクタ動作制御処理）の詳細な処理の流れを示すフローチャートである。プレイヤキャラクタ動作制御処理においてはまずステップＳ２１において、プレイヤキャラクタが振り向き動作の動作中であるか否かが判定される。具体的には、ワークメモリ３２に記憶されている第１フラグ８８が“１”に設定されている場合、振り向き動作の動作中であると判定され、第１フラグ８８が“０”に設定されている場合、振り向き動作の動作中でないと判定される。ステップＳ２１の判定において振り向き動作の動作中であると判定される場合、ステップＳ２２の処理が実行される。一方、振り向き動作の動作中でないと判定される場合、ステップＳ２７の処理が実行される。
【００７５】
ステップＳ２２においては、振り向き動作が継続される。すなわち、ＣＰＵ３１は、複数のフレームにわたって行われる一連の振り向き動作のうち、１フレーム分に相当する動作をプレイヤキャラクタに行わせる。このステップＳ２２が数フレームにおいて繰り返されることによって、振り向き動作のアニメーションが複数のフレームにわたって表示されることになる。続くステップＳ２３において、振り向き動作が完了したか否かが判定される。すなわち、直前のステップＳ２２で行われる動作によって振り向き動作が完了するか否かが判定される。振り向き動作が完了していないと判定される場合、ＣＰＵ３１はプレイヤキャラクタ動作制御処理を終了する。一方、振り向き動作が完了したと判定される場合、ステップＳ２４の処理が実行される。
【００７６】
ステップＳ２４において、ワークメモリ３２に記憶されている第１フラグ８８の値が“０”に設定される。続くステップＳ２５において、プレイヤキャラクタが騎乗状態（馬に乗っている状態）であるか否かが判定される。騎乗状態でないと判定される場合、ＣＰＵ３１はプレイヤキャラクタ動作制御処理を終了する。一方、騎乗状態であると判定される場合、ステップＳ２６の処理が実行される。すなわち、ステップＳ２６において、後述するステップＳ１０で用いられる経過時間の計測が開始される。ステップＳ２６の処理が完了すると、ＣＰＵ３１はプレイヤキャラクタ動作制御処理を終了する。
【００７７】
一方、ステップＳ２７においては、プレイヤキャラクタが騎乗状態であるか否かが判定される。騎乗状態であると判定される場合、ステップＳ２８の処理が実行される。一方、騎乗状態でないと判定される場合、ステップＳ２８の処理がスキップされてステップＳ３２の処理が実行される。
【００７８】
ステップＳ２８においては、プレイヤキャラクタが回復動作（振り向き動作を行う前の状態に戻る動作）の動作中であるか否かが判定される。具体的には、ワークメモリ３２に記憶されている第２フラグ８９が“１”に設定されている場合、回復動作の動作中であると判定され、第２フラグ８９が“０”に設定されている場合、回復動作の動作中でないと判定される。ステップＳ２８の判定において回復動作の動作中であると判定される場合、ステップＳ２９の処理が実行される。一方、回復動作の動作中でないと判定される場合、ステップＳ３２の処理が実行される。
【００７９】
ステップＳ２９においては、回復動作が継続される。すなわち、ＣＰＵ３１は、複数のフレームにわたって行われる一連の回復動作のうち、１フレーム分に相当する動作をプレイヤキャラクタに行わせる。このステップＳ２９が数フレームにおいて繰り返されることによって、回復動作のアニメーションが複数のフレームにわたって表示されることになる。続くステップＳ３０において、回復動作が完了したか否かが判定される。すなわち、直前のステップＳ２９で行われる動作によって回復動作が完了するか否かが判定される。回復動作が完了していないと判定される場合、ＣＰＵ３１はプレイヤキャラクタ動作制御処理を終了する。一方、回復動作が完了したと判定される場合、ステップＳ３１の処理が実行される。すなわち、ステップＳ３１において、ワークメモリ３２に記憶されている第２フラグ８９の値が“０”に設定される。プレイヤキャラクタの移動方向と攻撃方向とが一致するからである。ステップＳ３１の処理が完了すると、ＣＰＵ３１はプレイヤキャラクタ動作制御処理を終了する。
【００８０】
一方、ステップＳ３２においては、プレイヤキャラクタに攻撃を行わせるゲーム操作（攻撃操作）がプレイヤによって行われたか否かが判定される。具体的には、ＣＰＵ３１は、コントローラ６から操作データを読み込み、攻撃操作のための所定のボタンが押下されたか否かを判定する。当該ボタンが押下された場合、攻撃操作が行われたと判断され、ステップＳ３３の処理が実行される。一方、当該ボタンが押下されていない場合、攻撃操作が行われていないと判断され、ステップＳ３３がスキップされてステップＳ３４の処理が実行される。
【００８１】
ステップＳ３３において、攻撃を行う動作（矢を射る動作）をプレイヤキャラクタに行わせる。なお、攻撃を行う動作も振り向き動作と同様、複数のフレームにわたって行われるようにしてもよい。このとき、攻撃を行う動作中にプレイヤキャラクタが敵キャラクタによる攻撃を受けた場合、当該動作を中止して振り向き動作を行うようにしてもよい。ステップＳ３３の次にステップＳ３４の処理が実行される。
【００８２】
ステップＳ３４においては、プレイヤキャラクタを移動させるゲーム操作（移動操作）がプレイヤによって行われたか否かが判定される。具体的には、ＣＰＵ３１は、コントローラ６から操作データを読み込み、当該操作データに基づいて、移動操作のためのスイッチ（例えばメインスティック６１）が操作されたか否かを判定する。当該スイッチが操作された場合、移動操作が行われたと判断され、ステップＳ３５の処理が実行される。一方、当該スイッチが操作されていない場合、攻撃操作が行われていないと判断され、ＣＰＵ３１はプレイヤキャラクタ動作制御処理を終了する。
【００８３】
ステップＳ３５において、ゲーム空間内を移動する動作をプレイヤキャラクタに行わせる。具体的にはＣＰＵ３１は、ステップＳ３４で行われた移動操作に従って、次のフレームにおけるプレイヤキャラクタの位置および向きを決定する。これに応じて、ワークメモリ３２に記憶されているキャラクタ位置データ８０、移動方向データ８１、および攻撃方向データ８２の内容が、新たに決定された位置および向きを示す内容に更新される。ステップＳ３５の処理が完了すると、ＣＰＵ３１はプレイヤキャラクタ動作制御処理を終了する。以上で、プレイヤキャラクタ動作制御処理の説明を終了する。
【００８４】
図１６の説明に戻り、ステップＳ４の次のステップＳ５において、仮想カメラの制御が行われる。ＣＰＵ３１は、プレイヤキャラクタの位置に基づいて仮想カメラの位置および向きを決定してもよいし、プレイヤによる操作に従って仮想カメラの位置および向きを決定してもよい。ステップＳ５の次にステップＳ６の処理が実行される。
【００８５】
ステップＳ６においては、衝突判定処理が行われる。衝突判定処理は、プレイヤキャラクタと各オブジェクトとが衝突しているか否かを判定するための処理である。以下、図１８を用いて衝突判定処理の詳細を説明する。
【００８６】
図１８は、図１６に示すステップＳ６（衝突判定処理）の詳細な処理の流れを示すフローチャートである。衝突判定処理においてはまずステップＳ４１において、ゲーム空間に登場する各オブジェクトから、衝突判定の判定対象となるオブジェクトが１つ選択される。なお、ステップＳ４１においては、ステップＳ４１〜Ｓ４８の処理ループ中においてまだ選択されていないオブジェクトが選択される。また、以下に示す衝突判定処理の説明においては、ステップＳ４１において選択されているオブジェクトを選択オブジェクトと呼ぶ。
【００８７】
図１９は、図１８に示すステップＳ４２〜４５の処理を説明するための図である。図１９において、プレイヤキャラクタ７１の位置座標を（ｘ１，ｙ１，ｚ１）とし、選択オブジェクト（矢オブジェクト）７２の位置座標を（ｘ２，ｙ２，ｚ２）とする。また、プレイヤキャラクタ７１の当たり判定領域である円柱領域７３の底面の半径をｒ１とし、円柱の２つ底面のｙ軸座標をｈ１およびｈ２とする。また、選択オブジェクト７２の当たり判定領域７４である球領域の半径をｒ２とする。以下、ステップＳ４２〜Ｓ４５の処理を説明する。
【００８８】
ステップＳ４２において、プレイヤキャラクタと選択オブジェクトとのｘｚ平面に関する距離Ｒが算出される。この距離Ｒは、ワークメモリ３２に記憶されているキャラクタ位置データ８０およびオブジェクト位置データ８４を用いて算出される。距離Ｒは、プレイヤキャラクタの位置と選択オブジェクトの位置とを結ぶベクトルのｘｚ成分の大きさである。すなわち、距離Ｒ＝（（ｘ１−ｘ２）2 ＋（ｚ１−ｚ２）2 ）1/2 である。続くステップＳ４３において、プレイヤキャラクタの当たり判定領域を示す判定領域データ８６、および、選択オブジェクトの当たり判定領域を示す判定領域データ８６がワークメモリ３２から読み出される。
【００８９】
ステップＳ４３の次に、ステップＳ４４およびＳ４５において、プレイヤキャラクタと選択オブジェクトとが接触しているか否かの判定が行われる。まず、ステップＳ４４においては、選択オブジェクト７２がプレイヤキャラクタ７１と同じ高さ（ｙ軸に関する位置）に位置するか否かが判定される。具体的には、ＣＰＵ３１は、選択オブジェクト７２のｙ軸に関する位置ｙ２が、ｈ１≦ｙ２≦ｈ２を満たすか否かを判定する。なお、位置ｙ２は、ワークメモリ３２に記憶されているオブジェクト位置データ８４を参照することにより得られ、ｈ１およびｈ２は、ワークメモリ３２に記憶されているキャラクタ位置データ８０および判定領域データ８３から得ることできる。ｈ１≦ｙ２≦ｈ２が満たされる場合、選択オブジェクト７２がプレイヤキャラクタ７１と同じ高さに位置すると判定され、ステップＳ４５の処理が実行される。一方、ｈ１≦ｙ２≦ｈ２が満たされない場合、選択オブジェクト７２がプレイヤキャラクタ７１と同じ高さに位置しない（衝突が生じていない）と判定され、ステップＳ４８の処理が実行される。
【００９０】
ステップＳ４５においては、ｘｚ平面に関して、選択オブジェクト７２がプレイヤキャラクタ７１に衝突しているか否かが判定される。具体的には、ＣＰＵ３１は、上記ステップＳ４２で算出された距離Ｒが、Ｒ≦ｒ１＋ｒ２を満たすか否かを判定する。Ｒ≦ｒ１＋ｒ２が満たされる場合、選択オブジェクト７２がプレイヤキャラクタ７１に衝突していると判定され、ステップＳ４６の処理が実行される。一方、Ｒ≦ｒ１＋ｒ２が満たされない場合、選択オブジェクト７２がプレイヤキャラクタ７１に衝突していないと判定され、ステップＳ４６およびＳ４７の処理がスキップされてステップＳ４８の処理が実行される。
【００９１】
ステップＳ４６においては、選択オブジェクトがプレイヤキャラクタに衝突していると判断される。具体的には、選択オブジェクトを示すオブジェクトデータの衝突フラグ８７が“１”に設定される。続くステップＳ４７において、衝突位置が算出される。具体的には、衝突位置は、プレイヤキャラクタの当たり判定領域とオブジェクトの当たり判定領域とが接する位置である。算出された衝突位置のデータは、衝突位置データ９０としてワークメモリ３２に記憶される。ステップＳ４７の次にステップＳ４８の処理が実行される。
【００９２】
ステップＳ４８においては、ゲーム空間に登場する全てのオブジェクトをステップＳ４１で選択したか否かが判定される。ステップＳ４１で選択していないオブジェクトが存在する場合、ステップＳ４１の処理が実行される。以降、全てのオブジェクトが選択されるまでステップＳ４１〜Ｓ４８の処理が繰り返される。一方、全てのオブジェクトをステップＳ４１で選択した場合、ＣＰＵ３１は衝突判定処理を終了する。以上で、衝突判定処理の説明を終了する。
【００９３】
図１６の説明に戻り、ステップＳ６の次のステップＳ７において、プレイヤキャラクタに衝突したオブジェクトが存在するか否かが判定される。具体的には、ステップＳ６の衝突判定処理において、衝突フラグ８７が“１”に設定されたオブジェクトがあるか否かが判定される。プレイヤキャラクタに衝突したオブジェクトが存在すると判定される場合、ステップＳ８の処理が実行される。一方、プレイヤキャラクタに衝突したオブジェクトが存在しないと判定される場合、ステップＳ８の処理がスキップされてステップＳ９の処理が実行される。
【００９４】
ステップＳ８において、振り向き処理が行われる。振り向き処理は、プレイヤキャラクタに振り向き動作を行わせる処理である。以下、図２０を用いて振り向き処理の詳細を説明する。
【００９５】
図２０は、図１６に示すステップＳ８（振り向き処理）の詳細な処理の流れを示すフローチャートである。振り向き処理においてはまずステップＳ５１において、ゲーム空間に登場するオブジェクトのうち、衝突判定処理においてプレイヤキャラクタに衝突していると判断されたオブジェクトが選出される。すなわち、ワークメモリ３２に記憶されている衝突フラグ８７が“１”に設定されているオブジェクトが選出される。ステップＳ５１の次にステップＳ５２の処理が実行される。
【００９６】
ステップＳ５２において、ステップＳ５１で選出されたオブジェクトの速度ベクトルの大きさが０であるか否かが判定される。ステップＳ５２は、ステップＳ５１で選出されたオブジェクトが、上記矢オブジェクトのような移動オブジェクトであるか、それとも、爆弾オブジェクトのような領域変形オブジェクトであるかを判定するための処理である。ステップＳ５２の判定は、具体的には、ステップＳ５１で選出されたオブジェクトについてワークメモリ３２に記憶されている速度ベクトルデータ８５により示される方向データに基づいて行われる。ステップＳ５２の判定において、オブジェクトの速度ベクトルの大きさが０でないと判定される場合、ステップＳ５４の処理が実行される。一方、オブジェクトの速度ベクトルの大きさが０でないと判定される場合、ステップＳ５３の処理が実行される。なお、領域変形オブジェクトのうちで、ゲーム空間において全く移動しないオブジェクトについては、速度ベクトルが設定されなくてもよい。このとき、速度ベクトルが設定されていない場合には、ＣＰＵ３１は、速度ベクトルの大きさは０であると判断する。
【００９７】
ステップＳ５３においては、接触位置を始点としプレイヤキャラクタの位置を終点とするベクトルが算出される。なお、接触位置は、上記ステップＳ４７において算出されている。また、プレイヤキャラクタの位置は、ワークメモリ３２に記憶されているキャラクタ位置データ８０である。一方、ステップＳ５４においては、ステップＳ５１で選出されたオブジェクトの速度ベクトルがワークメモリ３２から読み出される。なお、以下における図２０の説明においては、ステップＳ５３またはＳ５４で得られたベクトルを速度ベクトルと呼ぶこととする。ステップＳ５３またはＳ５４の次にステップＳ５５の処理が実行される。
【００９８】
ステップＳ５５において、プレイヤキャラクタが向くべき第１方向が速度ベクトルに基づいて算出される。具体的には、第１方向は、速度ベクトルのｘ成分とｚ成分とを各成分とする２次元ベクトルにより示される方向である。より具体的には、速度ベクトルを（Δｘ，Δｙ，Δｚ）とすると、第１方向を示す角度θｈ（°）は、次の式（１）に従って算出される。
Δｚ＞０のとき、θｈ＝ｔａｎ-1（Δｘ／Δｚ）
Δｚ＜０のとき、θｈ＝１８０＋ｔａｎ-1（Δｘ／Δｚ）
Δｚ＝０，Δｘ＞０のとき、θｈ＝９０
Δｚ＝０，Δｘ＜０のとき、θｈ＝２７０  …（１）
なお、ここでは、θｈは、基準（０°）となる第１基準方向の向きをｚ軸正方向の向きとした角度である。ステップＳ５５の次にステップＳ５６の処理が実行される。
【００９９】
ステップＳ５６において、プレイヤキャラクタが向くべき第２方向が速度ベクトルに基づいて算出される。具体的には、第２方向は、速度ベクトルのｙ成分と、上記第１方向に関する成分とを各成分とする２次元ベクトルにより示される方向である。より具体的には、速度ベクトルを（Δｘ，Δｙ，Δｚ）とすると、第２方向を示す角度θｖ（°）は、次の式（２）に従って算出される。
ΔＬ＞０のとき、θｖ＝ｔａｎ-1（Δｙ／ΔＬ）
ΔＬ＜０のとき、θｖ＝１８０＋ｔａｎ-1（Δｙ／ΔＬ）
ΔＬ＝０，Δｙ＞０のとき、θｖ＝９０
ΔＬ＝０，Δｙ＜０のとき、θｖ＝２７０  …（２）
ここで、ΔＬは、速度ベクトルの第１方向に関する成分である。すなわちΔＬ＝（（Δｘ）2 ＋（Δｚ）2 ）1/2 である。なお、ここでは、θｖは、基準（０°）となる第２基準方向を第１方向の向きとした角度である。ステップＳ５６の次にステップＳ５７の処理が実行される。
【０１００】
ステップＳ５７において、ステップＳ５６で算出された第２方向は、予め設定される動作範囲内の値をとるか否かが判定される。具体的には、ステップＳ５６で算出された角度θｖが、−θａ≦θｖ≦θａの条件を満たすか否かが判定される。上記条件が満たされる場合、ステップＳ５８の処理がスキップされてステップＳ５９の処理が実行される。一方、上記条件が満たされない場合、ステップＳ５８の処理が実行される。
【０１０１】
ステップＳ５８においては、ステップＳ５６で算出された第２方向が動作範囲内の値に補正される。具体的には、ステップＳ５６で算出された角度θｖがθｖ＜−θａのとき、θｖは−θａに補正され、角度θｖがθｖ＞θａのとき、θｖはθａに補正される。これによって、プレイヤキャラクタの頭が不自然な向きに向くことを防止することができる。ステップＳ５８の次にステップＳ５９の処理が実行される。
【０１０２】
なお、他の実施形態においては、第１方向についてもステップＳ５７およびＳ５８と同様の処理を行うようにしてもよい。すなわち、第１方向について上記動作範囲が設定される場合であって、θｈが当該動作範囲外の値をとる場合には、θｈを当該動作範囲内の値に補正するようにしてもよい。特にプレイヤキャラクタが騎乗状態である場合には、第１方向についても動作範囲を設定することが好ましい。
【０１０３】
ステップＳ５９において、プレイヤキャラクタが騎乗状態であるか否かが判定される。騎乗状態であると判定される場合、ステップＳ６１およびＳ６２の処理が実行される。一方、騎乗状態でない（すなわち、自分で立っている状態）と判定される場合、ステップＳ６０の処理が実行される。
【０１０４】
ステップＳ６０においては、プレイヤキャラクタの全身を回転させる動作（振り向き動作）が行われる。ステップＳ６０で行われる振り向き動作は、プレイヤキャラクタが全身で行う動作である。すなわち、プレイヤキャラクタは、全身で第１方向を向くとともに、頭を第２方向を向ける動作を行う。このとき、ＣＰＵ３１は、ワークメモリ３２に記憶されている移動方向データ８１の内容を、ステップＳ５５で算出された第１方向（角度θｈ）を示すデータに更新する。また、ワークメモリ３２に記憶されている攻撃方向データ８２の内容を、移動方向データ８１と同様、当該第１方向（角度θｈ）を示すデータに更新する。なお、上述したように、ステップＳ６０で開始された振り向き動作は、数フレームにわたって行われる。ステップＳ６０の次にステップＳ６３の処理が実行される。
【０１０５】
一方、ステップＳ６１においては、プレイヤキャラクタの上半身を回転させる動作（振り向き動作）が行われる。ステップＳ６１で行われる振り向き動作は、プレイヤキャラクタが上全身で行う動作である。すなわち、プレイヤキャラクタは、上半身を第１方向に向けるとともに、頭を第２方向を向ける動作を行う。このとき、ＣＰＵ３１は、ワークメモリ３２に記憶されている攻撃方向データ８２の内容を、ステップＳ５５で算出された第１方向（角度θｈ）を示すデータに更新する。ただし、ワークメモリ３２に記憶されている移動方向データ８１の内容は更新されない。プレイヤキャラクタの下半身（騎乗している馬の向き）は、変わっていないからである。なお、上述したように、ステップＳ６１で開始された振り向き動作は、数フレームにわたって行われる。続くステップＳ６２において、ワークメモリ３２に記憶されている第２フラグ８９の値が“１”に設定される。ステップＳ６１によって移動方向が攻撃方向と異なる方向になるからである。ステップＳ６２の次にステップＳ６３の処理が実行される。
【０１０６】
なお、本実施形態では、ステップＳ６０において、移動方向データ８１および攻撃方向データ８２の内容を、第１方向を示すデータに更新することとした。ここで、他の実施形態においては、移動方向データ８１および攻撃方向データ８２の内容を、数フレームにわたって行われる振り向き動作に従って次第に変化させるようにしてもよい。これと同様に、ステップＳ６１において、攻撃方向データ８２の内容を、数フレームにわたって行われる振り向き動作に従って次第に変化させるようにしてもよい。
【０１０７】
ステップＳ６３においては、ワークメモリ３２に記憶されている第１フラグ８８の値が“１”に設定される。上記ステップＳ６０またはＳ６１によって振り向き動作が開始されるからである。続くステップＳ６４においては、ステップＳ５１で選出されたオブジェクトに設定される衝突フラグ８７の値が“０”に設定される。ステップＳ６４が完了すると、ＣＰＵ３１は振り向き処理を終了する。以上で、振り向き処理の説明を終了する。
【０１０８】
図１６の説明に戻り、ステップＳ７の判定結果が否定である場合、または、ステップＳ８の振り向き処理の次に、ステップＳ９の処理が行われる。すなわち、ステップＳ９において、プレイヤキャラクタが騎乗状態であるか否かが判定される。騎乗状態でないと判定される場合、ステップＳ１２の処理が実行される。一方、騎乗状態であると判定される場合、ステップＳ１０の処理が実行される。
【０１０９】
ステップＳ１０においては、騎乗状態にあるプレイヤキャラクタが振り向き処理を行ってから、予め定められた所定時間が経過したか否かが判定される。具体的には、ＣＰＵ３１は、ステップＳ２６で計測が開始された経過時間が当該所定時間を超えたか否かを判定する。ステップＳ１０の処理は、回復動作を開始するか否かを判定するための処理である。ステップＳ１０の判定において、所定時間が経過したと判定された場合、ステップＳ１１の処理が行われる。一方、所定時間が経過していないと判定された場合、ステップＳ１１がスキップされてステップＳ１２の処理が行われる。
【０１１０】
ステップＳ１１においては、プレイヤキャラクタによる回復動作が行われる。すなわち、上半身を第１方向に向けるとともに頭を第２方向に向けていたプレイヤキャラクタが、移動方向に上半身を向けるとともに第２基準方向に頭を向ける動作を行う。このとき、ＣＰＵ３１は、ワークメモリ３２に記憶されている攻撃方向データ８２の内容を、移動方向データ８１の内容に更新する。なお、上述したように、ステップＳ１１で開始された回復動作は、数フレームにわたって行われる。ステップＳ１１の次にステップＳ１２の処理が実行される。
【０１１１】
ステップＳ１２においては、ＣＰＵ３１は、ステップＳ２〜Ｓ１１で決定された各キャラクタおよび各オブジェクトの動作に基づいて、ゲーム空間を仮想カメラによって撮影したゲーム画像を生成する。そして、生成したゲーム画像をテレビ２に表示させる。続くステップＳ１３において、ゲームを終了するか否かが判定される。ステップＳ１３の判定は、例えば、プレイヤキャラクタの体力が０になったか否かや、プレイヤキャラクタが全ての敵キャラクタを倒したか否か等によって行われる。ステップＳ１３の判定において、ゲームを終了すると判定された場合、ＣＰＵ３１は、図１６に示すゲーム処理を終了する。一方、ゲームを終了しないと判定された場合、ステップＳ２の処理が行われ、以降、ステップＳ１３においてゲームを終了すると判定されるまでステップＳ２〜Ｓ１３の一連の処理が繰り返される。以上で、ゲーム処理の詳細な説明を終了する。
【０１１２】
以上のように、本実施形態によれば、プレイヤキャラクタに振り向き動作を行わせることによって、オブジェクトとプレイヤキャラクタとが衝突した場合におけるプレイヤキャラクタの動作をリアルに表現することができる。また、振り向き動作の向きは、移動オブジェクトの方向データに基づいて決定される。したがって、プレイヤキャラクタが振り向く向きをより自然な動作にすることができる。さらに、本実施形態によれば、速度ベクトルが算出されないオブジェクト（領域変形オブジェクト）とプレイヤキャラクタとが衝突する場合、振り向き動作の向きは衝突位置に基づいて決定される。したがって、速度ベクトルが算出されない場合であっても振り向き動作の向きを容易に算出することができる。
【０１１３】
なお、上記実施形態では、プレイヤキャラクタに振り向き動作を行わせる場合を例として説明したが、振り向き動作を行わせるキャラクタは、プレイヤキャラクタに限らず、敵キャラクタであってもよい。本発明は、ゲーム用途に限らず、仮想空間に登場する任意のキャラクタに振り向き動作を行わせる場合に適用することができる。
【０１１４】
また、上記実施形態においては、振り向き動作は、仮想の３次元空間における地面に垂直な軸（ｙ軸）を中心とした回転動作（第１回転動作）と、当該地面に平行な軸（第１方向）を中心とした回転動作（第２回転動作）とを組み合わせた動作であった。ここで、他の実施形態においては、振り向き動作は、第１回転動作のみであってもよい。つまり、プレイヤキャラクタは、仮想の３次元空間における地面に垂直な軸を中心とした回転動作のみを振り向き動作として行うものであってもよい。これによって、第２方向を算出する必要がなくなるので、振り向き動作に関するゲーム装置３の処理負担を軽減することができる。
【０１１５】
なお、上記実施形態においては、プレイヤキャラクタとオブジェクトとの衝突判定は、当たり判定領域を用いて行われた。つまり、ゲーム装置３は、プレイヤキャラクタ（またはオブジェクト）の形状とは異なる形状の当たり判定領域を設定することによって、衝突判定の処理を簡易に行うものであった。ここで、ゲーム装置３の処理能力が十分である場合には、プレイヤキャラクタとオブジェクトとが接触しているか否かを直接判断することによって衝突判定を行うようにしてもよい。換言すれば、オブジェクトの形状とは異なる形状の当たり判定領域を設定せずに、オブジェクトの形状と同形状の当たり判定領域を設定する（つまり、オブジェクトの領域を当たり判定領域とする）ようにしてもよい。これによれば、衝突判定をより正確に行うことができる。
【産業上の利用可能性】
【０１１６】
以上のように、本発明は、オブジェクト同士が衝突した場合におけるオブジェクトの動作をリアルに表現すること等を目的とした画像処理プログラムおよび画像処理装置に利用することが可能である。
【図面の簡単な説明】
【０１１７】
【図１】本発明の一実施形態に係るゲーム装置を含むゲームシステムの外観図
【図２】ゲームシステムの機能ブロック図
【図３】プレイヤキャラクタに矢が当たる直前のゲーム空間を示す図
【図４】プレイヤキャラクタに矢が当たったときのゲーム空間を示す図
【図５】図４に示す状態から振り向き動作を行った後のプレイヤキャラクタを示す図
【図６】プレイヤキャラクタに矢が当たったときのゲーム空間を示す図
【図７】図６に示す状態から振り向き動作を行った後のプレイヤキャラクタを示す図
【図８】プレイヤキャラクタが爆弾による攻撃を受けた時のゲーム空間を示す図
【図９】プレイヤキャラクタが爆発の影響を受けたときのゲーム空間を示す図
【図１０】図９に示す状態から振り向き動作を行った後のプレイヤキャラクタを示す図
【図１１】プレイヤキャラクタが爆発の影響を受けたときのゲーム空間を示す図
【図１２】図１１に示す状態から振り向き動作を行った後のプレイヤキャラクタを示す図
【図１３】プレイヤキャラクタが上半身を第１方向に向ける動作を示す図
【図１４】プレイヤキャラクタが上半身を第１方向に向ける動作を示す図
【図１５】ゲーム装置３のワークメモリ３２に記憶される主なデータを示す図
【図１６】ゲーム装置３において実行されるゲーム処理の流れを示すフローチャート
【図１７】図１６に示すステップＳ４の詳細な処理の流れを示すフローチャート
【図１８】図１６に示すステップＳ６の詳細な処理の流れを示すフローチャート
【図１９】図１８に示すステップＳ４２〜４５の処理を説明するための図
【図２０】図１６に示すステップＳ８の詳細な処理の流れを示すフローチャート
【符号の説明】
【０１１８】
１  ゲームシステム
２  テレビジョン受像機
３  ゲーム装置
４  光ディスク
６  コントローラ
３１  ＣＰＵ
３２  ワークメモリ
７１  プレイヤキャラクタ
７２  矢オブジェクト
７３，７４，７６  当たり判定領域
７５  爆弾オブジェクト
【図１】
2006318136.tif 000003
【図２】
2006318136.tif 000004
【図３】
2006318136.tif 000005
【図４】
2006318136.tif 000006
【図５】
2006318136.tif 000007
【図６】
2006318136.tif 000008
【図７】
2006318136.tif 000009
【図８】
2006318136.tif 000010
【図９】
2006318136.tif 000011
【図１０】
2006318136.tif 000012
【図１１】
2006318136.tif 000013
【図１２】
2006318136.tif 000014
【図１３】
2006318136.tif 000015
【図１４】
2006318136.tif 000016
【図１５】
2006318136.tif 000017
【図１６】
2006318136.tif 000018
【図１７】
2006318136.tif 000019
【図１８】
2006318136.tif 000020
【図１９】
2006318136.tif 000021
【図２０】
2006318136.tif 000022