(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024159743
(43)【公開日】2024-11-08
(54)【発明の名称】ゲームプログラム、情報処理システム、情報処理装置、および情報処理方法
(51)【国際特許分類】
A63F 13/57 20140101AFI20241031BHJP
A63F 13/55 20140101ALI20241031BHJP
A63F 13/58 20140101ALI20241031BHJP
A63F 13/69 20140101ALI20241031BHJP
A63F 13/577 20140101ALI20241031BHJP
【FI】
A63F13/57
A63F13/55
A63F13/58
A63F13/69 520
A63F13/577
【審査請求】未請求
【請求項の数】34
【出願形態】OL
(21)【出願番号】P 2024084567
(22)【出願日】2024-05-24
(62)【分割の表示】P 2023073338の分割
【原出願日】2023-04-27
(71)【出願人】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】100158780
【弁理士】
【氏名又は名称】寺本 亮
(74)【代理人】
【識別番号】100121359
【弁理士】
【氏名又は名称】小沢 昌弘
(74)【代理人】
【識別番号】100130269
【弁理士】
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】深田 直希
(72)【発明者】
【氏名】古川 朗
(72)【発明者】
【氏名】川村 一弘
(57)【要約】
【課題】オブジェクトに推進力を加えるとともに許容される範囲を超えた速度に到達し難いように制御することが可能なゲームプログラムを提供する。
【解決手段】本実施形態のゲームでは、仮想空間に配置された移動可能な動的オブジェクトのうちの推進オブジェクトについて、推進力を発生させ、物理演算に基づいて推進オブジェクトを仮想空間内で移動させる。推進オブジェクトの移動速度の、推進力の方向に沿った成分の大きさに応じて推進力を減衰させ、当該推進力の方向に沿った成分が所定の基準値を超える場合、推進力が無くなるように制御する。
【選択図】
図7
【特許請求の範囲】
【請求項1】
情報処理装置のコンピュータに、
前記仮想空間内に配置され、物理演算に基づいて移動制御される動的オブジェクトのうち、推進力の発生を伴い、少なくとも当該推進力に基づいて移動する推進オブジェクトについて、
物理演算に基づいた前記推進オブジェクトの移動速度が所定の基準を超える場合に前記推進力が無くなるように、前記移動速度に応じて前記推進力を減衰させる、
ゲームプログラム。
【請求項2】
前記コンピュータにさらに、
操作入力に基づいて、複数の前記動的オブジェクトを結合させて組立品オブジェクトを形成させる、請求項1に記載のゲームプログラム。
【請求項3】
前記コンピュータに、
前記組立品オブジェクトに含まれるそれぞれの前記動的オブジェクトについて、結合された前記動的オブジェクトからの作用による力を用いた物理演算に基づいて、移動速度を決定させ、
前記組立品オブジェクトに含まれるそれぞれの前記推進オブジェクトについて、それぞれの前記移動速度に応じてそれぞれの前記推進力を減衰させる、請求項2に記載のゲームプログラム。
【請求項4】
前記コンピュータに、
前記移動速度の、前記推進力の方向に沿った成分に応じて前記推進力を減衰させ、
前記所定の基準は、前記推進力の方向に沿った成分が、所定の基準値になることである、請求項1から3のいずれかに記載のゲームプログラム。
【請求項5】
前記コンピュータにさらに、
前記推進オブジェクトのうち、第1の状態と第2の状態を有する第1の推進オブジェクトに対して、前記第1の状態において所定方向に継続的に前記推進力を発生させる、請求項4に記載のゲームプログラム。
【請求項6】
前記コンピュータにさらに、
前記第1の推進オブジェクトが、前記組立品オブジェクトの一部となっていない場合であってかつ所定の姿勢の場合において、前記第1の状態においても前記推進力を発生させない制御を行わせる、請求項5に記載のゲームプログラム。
【請求項7】
前記推進オブジェクトは、第2の推進オブジェクトを含み、
前記コンピュータにさらに、
前記第1の推進オブジェクトに対して、前記推進力の他に、前記仮想空間に接触判定領域を発生させ、当該接触判定領域が前記第2の推進オブジェクトに接触した場合に、当該第2の推進オブジェクトに対して推進力を発生させる、請求項5に記載のゲームプログラム。
【請求項8】
前記コンピュータにさらに、
前記第2の推進オブジェクトを含む前記組立品オブジェクトに含まれる前記第1の推進オブジェクトから発生された前記接触判定領域を除く前記接触判定領域と、前記第2の推進オブジェクトとが接触した場合に、前記第2の推進オブジェクトに対して前記推進力を発生させる、請求項7に記載のゲームプログラム。
【請求項9】
前記コンピュータにさらに、
前記推進オブジェクトのうち第3の推進オブジェクトに対し、操作入力に基づいて指定されたタイミングから所定期間、前記推進力を発生させる、請求項4に記載のゲームプログラム。
【請求項10】
前記コンピュータにさらに、
前記第3の推進オブジェクトに前記推進力が発生している間、前記物理演算に用いられる前記第3の推進オブジェクトの質量と慣性テンソルを増大させる、請求項9に記載のゲームプログラム。
【請求項11】
前記コンピュータにさらに、
前記推進オブジェクトのうち第4の推進オブジェクトに対し、前記仮想空間の上方向への前記推進力を発生させる、請求項4に記載のゲームプログラム。
【請求項12】
前記コンピュータにさらに、
前記第4の推進オブジェクトに対して、ゲーム処理に基づいて与えられる所定のパラメータが大きい程、前記第4の推進オブジェクトに対する前記推進力と、前記基準値を増加させる、請求項11に記載のゲームプログラム。
【請求項13】
前記コンピュータにさらに、
前記第4の推進オブジェクトに前記推進力が発生している間、前記物理演算に用いられる前記第4の推進オブジェクトの質量と慣性テンソルを増大させる、請求項11に記載のゲームプログラム。
【請求項14】
プロセッサを備える情報処理システムであって、前記プロセッサは、
前記仮想空間内に配置され、物理演算に基づいて移動制御される動的オブジェクトのうち、推進力の発生を伴い、少なくとも当該推進力に基づいて移動する推進オブジェクトについて、
物理演算に基づいた前記推進オブジェクトの移動速度が所定の基準を超える場合に前記推進力が無くなるように、前記移動速度に応じて前記推進力を減衰させる、
情報処理システム。
【請求項15】
前記プロセッサはさらに、
操作入力に基づいて、複数の前記動的オブジェクトを結合させて組立品オブジェクトを形成する、請求項14に記載の情報処理システム。
【請求項16】
前記プロセッサは、
前記組立品オブジェクトに含まれるそれぞれの前記動的オブジェクトについて、結合された前記動的オブジェクトからの作用による力を用いた物理演算に基づいて、移動速度を決定し、
前記組立品オブジェクトに含まれるそれぞれの前記推進オブジェクトについて、それぞれの前記移動速度に応じてそれぞれの前記推進力を減衰させる、請求項15に記載の情報処理システム。
【請求項17】
前記プロセッサは、
前記移動速度の、前記推進力の方向に沿った成分に応じて前記推進力を減衰させ、
前記所定の基準は、前記推進力の方向に沿った成分が、所定の基準値になることである、請求項14から16のいずれかに記載の情報処理システム。
【請求項18】
前記プロセッサはさらに、
前記推進オブジェクトのうち、第1の状態と第2の状態を有する第1の推進オブジェクトに対して、前記第1の状態において所定方向に継続的に前記推進力を発生させる、請求項17に記載の情報処理システム。
【請求項19】
前記プロセッサはさらに、
前記第1の推進オブジェクトが、前記組立品オブジェクトの一部となっていない場合であってかつ所定の姿勢の場合において、前記第1の状態においても前記推進力を発生させない制御を行う、請求項18に記載の情報処理システム。
【請求項20】
前記推進オブジェクトは、第2の推進オブジェクトを含み、
前記プロセッサはさらに、
前記第1の推進オブジェクトに対して、前記推進力の他に、前記仮想空間に接触判定領域を発生させ、当該接触判定領域が前記第2の推進オブジェクトに接触した場合に、当該第2の推進オブジェクトに対して推進力を発生させる、請求項18に記載の情報処理システム。
【請求項21】
前記プロセッサはさらに、
前記第2の推進オブジェクトを含む前記組立品オブジェクトに含まれる前記第1の推進オブジェクトから発生された前記接触判定領域を除く前記接触判定領域と、前記第2の推進オブジェクトとが接触した場合に、前記第2の推進オブジェクトに対して前記推進力を発生させる、請求項20に記載の情報処理システム。
【請求項22】
前記プロセッサはさらに、
前記推進オブジェクトのうち第3の推進オブジェクトに対し、操作入力に基づいて指定されたタイミングから所定期間、前記推進力を発生させる、請求項17に記載の情報処理システム。
【請求項23】
前記プロセッサはさらに、
前記第3の推進オブジェクトに前記推進力が発生している間、前記物理演算に用いられる前記第3の推進オブジェクトの質量と慣性テンソルを増大させる、請求項22に記載の情報処理システム。
【請求項24】
前記プロセッサはさらに、
前記推進オブジェクトのうち第4の推進オブジェクトに対し、前記仮想空間の上方向への前記推進力を発生させる、請求項17に記載の情報処理システム。
【請求項25】
前記プロセッサはさらに、
前記第4の推進オブジェクトに対して、ゲーム処理に基づいて与えられる所定のパラメータが大きい程、前記第4の推進オブジェクトに対する前記推進力と、前記基準値を増加させる、請求項24に記載の情報処理システム。
【請求項26】
前記プロセッサはさらに、
前記第4の推進オブジェクトに前記推進力が発生している間、前記物理演算に用いられる前記第4の推進オブジェクトの質量と慣性テンソルを増大させる、請求項24に記載の情報処理システム。
【請求項27】
プロセッサを備える情報処理装置であって、前記プロセッサは、
前記仮想空間内に配置され、物理演算に基づいて移動制御される動的オブジェクトのうち、推進力の発生を伴い、少なくとも当該推進力に基づいて移動する推進オブジェクトについて、
物理演算に基づいた前記推進オブジェクトの移動速度が所定の基準を超える場合に前記推進力が無くなるように、前記移動速度に応じて前記推進力を減衰させる、
情報処理装置。
【請求項28】
前記プロセッサはさらに、
操作入力に基づいて、複数の前記動的オブジェクトを結合させて組立品オブジェクトを形成する、請求項27に記載の情報処理装置。
【請求項29】
前記プロセッサは、
前記組立品オブジェクトに含まれるそれぞれの前記動的オブジェクトについて、結合された前記動的オブジェクトからの作用による力を用いた物理演算に基づいて、移動速度を決定し、
前記組立品オブジェクトに含まれるそれぞれの前記推進オブジェクトについて、それぞれの前記移動速度に応じてそれぞれの前記推進力を減衰させる、請求項28に記載の情報処理装置。
【請求項30】
前記プロセッサは、
前記移動速度の、前記推進力の方向に沿った成分に応じて前記推進力を減衰させ、
前記所定の基準は、前記推進力の方向に沿った成分が、所定の基準値になることである、請求項27から29のいずれかに記載の情報処理装置。
【請求項31】
情報処理システムにおいて行われる情報処理方法であって、
前記仮想空間内に配置され、物理演算に基づいて移動制御される動的オブジェクトのうち、推進力の発生を伴い、少なくとも当該推進力に基づいて移動する推進オブジェクトについて、
物理演算に基づいた前記推進オブジェクトの移動速度が所定の基準を超える場合に前記推進力が無くなるように、前記移動速度に応じて前記推進力を減衰させること、を含む、情報処理方法。
【請求項32】
操作入力に基づいて、複数の前記動的オブジェクトを結合させて組立品オブジェクトを形成すること、を更に含む、請求項31に記載の情報処理方法。
【請求項33】
前記組立品オブジェクトに含まれるそれぞれの前記動的オブジェクトについて、結合された前記動的オブジェクトからの作用による力を用いた物理演算に基づいて、移動速度を決定すること、
前記組立品オブジェクトに含まれるそれぞれの前記推進オブジェクトについて、それぞれの前記移動速度に応じてそれぞれの前記推進力を減衰させること、を含む、請求項32に記載の情報処理方法。
【請求項34】
前記移動速度の、前記推進力の方向に沿った成分に応じて前記推進力を減衰させることを含み、
前記所定の基準は、前記推進力の方向に沿った成分が、所定の基準値になることである、請求項31から33のいずれかに記載の情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ゲームプログラム、情報処理システム、情報処理装置、および情報処理方法に関する。
【背景技術】
【0002】
従来、プレイヤキャラクタが所定のオブジェクトの上に乗って移動することができるゲームがある(例えば、非特許文献1参照)。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】“TheLegend of Zelda: Breath of the Wild”、[online]、2022年、Nintendo of America、[令和5年4月13日検索]、インターネット<URL:https://www.zelda.com/breath-of-the-wild/>
【発明の概要】
【発明が解決しようとする課題】
【0004】
このようなオブジェクトが移動するゲームにおいて、オブジェクトに任意に推進力を加えることを可能にしたい場合には、ゲームシステムにおいて許容される範囲を超えた速度に到達してしまう懸念がある。
【0005】
それ故、本発明の目的は、オブジェクトに推進力を加えるとともに許容される範囲を超えた速度に到達し難いように制御することが可能なゲームプログラム、情報処理システム、情報処理装置、および情報処理方法を提供することである。
【課題を解決するための手段】
【0006】
上記の課題を解決すべく、本発明は、以下の構成を採用した。
【0007】
(第1の構成)
第1の構成に係るゲームプログラムは、情報処理装置のコンピュータに、前記仮想空間内に配置され、物理演算に基づいて移動制御される動的オブジェクトのうち、推進力の発生を伴い、少なくとも当該推進力に基づいて移動する推進オブジェクトについて、物理演算に基づいた前記推進オブジェクトの移動速度が所定の基準を超える場合に前記推進力が無くなるように、前記移動速度に応じて前記推進力を減衰させる。
【0008】
上記によれば、推進オブジェクトの移動速度が所定の基準を超える場合に推進オブジェクトの推進力が無くなるように制御されるため、推進オブジェクトが許容される範囲を超えた速度に到達することを抑制することができる。
【0009】
(第2の構成)
第2の構成では、上記第1の構成において、前記コンピュータにさらに、操作入力に基づいて、複数の前記動的オブジェクトを結合させて組立品オブジェクトを形成させてもよい。
【0010】
上記によれば、複数の動的オブジェクトを結合させて組立品オブジェクトを形成することができる。
【0011】
(第3の構成)
第3の構成では、上記第2の構成において、前記コンピュータに、前記組立品オブジェクトに含まれるそれぞれの前記動的オブジェクトについて、結合された前記動的オブジェクトからの作用による力を用いた物理演算に基づいて、移動速度を決定させ、前記組立品オブジェクトに含まれるそれぞれの前記推進オブジェクトについて、それぞれの前記移動速度に応じてそれぞれの前記推進力を減衰させてもよい。
【0012】
上記によれば、組立品オブジェクト内のそれぞれの推進オブジェクトについて、その速度に応じて推進力を減衰させることができる。
【0013】
(第4の構成)
第4の構成では、上記第1から第3の構成において、前記コンピュータに、前記移動速度の、前記推進力の方向に沿った成分に応じて前記推進力を減衰させてもよい。前記所定の基準は、前記推進力の方向に沿った成分が、所定の基準値になることであってもよい。
【0014】
上記によれば、推進オブジェクトの移動速度の、推進力の方向に沿った成分に応じて推進力を減衰させることができ、当該成分が所定の基準値になった場合に、推進オブジェクトの推進力が無くなるように制御することができる。
【0015】
(第5の構成)
第5の構成では、上記第1から第4の構成において、前記推進オブジェクトのうち、第1の状態と第2の状態を有する第1の推進オブジェクトに対して、前記第1の状態において所定方向に継続的に前記推進力を発生させてもよい。
【0016】
上記によれば、第1の推進オブジェクトが第1の状態の場合に、所定方向に推進力を発生させることができる。
【0017】
(第6の構成)
第6の構成では、上記第5の構成において、前記コンピュータにさらに、前記第1の推進オブジェクトが、前記組立品オブジェクトの一部となっていない場合であってかつ所定の姿勢の場合において、前記第1の状態においても前記推進力を発生させない制御を行わせてもよい。
【0018】
上記によれば、第1の推進オブジェクトが所定の姿勢の場合には、第1の状態であっても推進力を発生させないようにすることができ、例えば、第1の推進オブジェクトを所定の姿勢に維持させることができる。
【0019】
(第7の構成)
第7の構成では、上記第5の構成において、前記推進オブジェクトは、第2の推進オブジェクトを含んでもよい。前記コンピュータにさらに、前記第1の推進オブジェクトに対して、前記推進力の他に、前記仮想空間に接触判定領域を発生させ、当該接触判定領域が前記第2の推進オブジェクトに接触した場合に、当該第2の推進オブジェクトに対して推進力を発生させてもよい。
【0020】
上記によれば、第2の推進オブジェクトに推進力を発生させることができる。
【0021】
(第8の構成)
第8の構成では、上記第7の構成において、前記コンピュータにさらに、前記第2の推進オブジェクトを含む前記組立品オブジェクトに含まれる前記第1の推進オブジェクトから発生された前記接触判定領域を除く前記接触判定領域と、前記第2の推進オブジェクトとが接触した場合に、前記第2の推進オブジェクトに対して前記推進力を発生させてもよい。
【0022】
上記によれば、同じ組立品オブジェクトに上記第1の推進オブジェクトと上記第2の推進オブジェクトが含まれる場合、当該第1の推進オブジェクトから発生された接触判定領域については、第2の推進オブジェクトに推進力を発生させないようにすることができる。
【0023】
(第9の構成)
第9の構成では、上記第4の構成において、前記コンピュータにさらに、前記推進オブジェクトのうち第3の推進オブジェクトに対し、操作入力に基づいて指定されたタイミングから所定期間、前記推進力を発生させてもよい。
【0024】
上記によれば、第3の推進オブジェクトに、所定期間だけ推進力を発生させることができる。
【0025】
(第10の構成)
第10の構成では、上記第9の構成において、前記コンピュータにさらに、前記第3の推進オブジェクトに前記推進力が発生している間、前記物理演算に用いられる前記第3の推進オブジェクトの質量と慣性テンソルを増大させてもよい。
【0026】
上記によれば、第3の推進オブジェクトに推進力が発生している間、第3の推進オブジェクトの質量を増大させることができ、例えば、第3の推進オブジェクトと接触している他のオブジェクトに対して大きな力を加えることができる。
【0027】
(第11の構成)
第11の構成では、上記第4の構成において、前記コンピュータにさらに、前記推進オブジェクトのうち第4の推進オブジェクトに対し、前記仮想空間の上方向への前記推進力を発生させてもよい。
【0028】
上記によれば、第4の推進オブジェクトに仮想空間の上方への推進力を発生させることができる。
【0029】
(第12の構成)
第12の構成では、上記第11の構成において、前記コンピュータにさらに、前記第4の推進オブジェクトに対して、ゲーム処理に基づいて与えられる所定のパラメータが大きい程、前記第4の推進オブジェクトに対する前記推進力と、前記基準値を増加させることができる。
【0030】
上記によれば、所定のパラメータに応じて第4の推進オブジェクトの推進力を増加させるとともに、推進力が無くなるまでの基準値を増加させることができる。
【0031】
(第13の構成)
第13の構成では、上記第11又は第12の構成において、前記コンピュータにさらに、前記第4の推進オブジェクトに前記推進力が発生している間、前記物理演算に用いられる前記第4の推進オブジェクトの質量と慣性テンソルを増大させてもよい。
【0032】
上記によれば、第4の推進オブジェクトに推進力が発生している間、第4の推進オブジェクトの質量を増大させることができ、例えば、第4の推進オブジェクトと接触している他のオブジェクトに対して大きな力を加えることができる。
【0033】
また、他の構成は、情報処理システムであってもよいし、情報処理装置であってもよいし、情報処理方法であってもよい。
【発明の効果】
【0034】
本発明によれば、推進オブジェクトの移動速度に応じて推進オブジェクトの推進力を減衰させることができ、推進オブジェクトが許容される範囲を超えた速度に到達することを抑制することができる。
【図面の簡単な説明】
【0035】
【
図2】本体装置2の内部構成の一例を示すブロック図
【
図3】本実施形態のゲームが実行された場合に表示されるゲーム画像の一例を示す図
【
図4】プレイヤキャラクタPCのオブジェクト操作アクションによって、動的オブジェクト31が操作されているときのゲーム画像の一例を示す図
【
図5】オブジェクト操作アクションに基づいて扇風機オブジェクト31aが移動されているときのゲーム画像の一例を示す図
【
図6】オブジェクト操作アクションに基づいて生成された組立品オブジェクトの一例であって、扇風機オブジェクト31aと翼オブジェクト31dとを含む飛行機オブジェクト40の一例を示す図
【
図7】推進オブジェクトが移動しているときの推進力の制御について説明するための図
【
図8】推進オブジェクトの速度の推進力方向成分Sの大きさと推進力Fの大きさとの関係を示す図
【
図9】翼オブジェクト31gと複数の推進オブジェクトとを含む組立品オブジェクトの一例を示す図であり、各推進オブジェクトの推進力の制御の一例を示す図
【
図10】翼オブジェクト31gと複数の推進オブジェクトとを含む組立品オブジェクトの一例を示す図であり、推進オブジェクトによってその速度が異なる場合を示す図
【
図11】ロケットオブジェクト31cの状態に応じた挙動を示す図
【
図12】扇風機オブジェクト31aの状態に応じた挙動を示す図
【
図13】帆オブジェクト31dを含む組立品オブジェクトが移動するときのゲーム画像の一例を示す図
【
図14】
図13の状態から所定時間経過後のゲーム画像の一例を示す図
【
図15】第2の扇風機オブジェクト31abと帆オブジェクト31gと板オブジェクト31fとを含む組立品オブジェクト44の一例を示す図
【
図16】気球オブジェクト31eの推進力の方向と、火力による推進力の違いを示す図
【
図17】気球オブジェクト31eの速度の推進力方向成分Sの大きさと推進力Feの大きさとの関係を示す図
【
図18】ゲーム処理の実行中に本体装置2のメモリに記憶されるデータの一例を示す図
【
図19】プロセッサ21によって実行されるゲーム処理の一例を示すフローチャート
【
図20】ステップS103のオブジェクト更新処理の一例を示すフローチャート
【発明を実施するための形態】
【0036】
(ゲームシステムの構成)
以下、本実施形態の一例に係るゲームシステムについて説明する。
図1は、ゲームシステムの一例を示す図である。本実施形態におけるゲームシステム1の一例は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とを含む。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。左コントローラ3は、ユーザが入力を行うための操作部の一例として、複数のボタン5L(上下左右の方向キー)と、アナログスティック6Lとを含む。右コントローラ4は、ユーザが入力を行うための操作部の一例として、複数のボタン5R(Aボタン、Bボタン、Xボタン、Yボタン)と、アナログスティック6Rとを含む。また、左コントローラ3の上面にはLボタン7Lが設けられ、右コントローラ4の上面にはRボタン7Rが設けられる。
【0037】
本体装置2は、左コントローラ3および右コントローラ4をそれぞれ着脱可能に構成される。つまり、ゲームシステム1は、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用できるし、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
【0038】
図2は、本体装置2の内部構成の一例を示すブロック図である。
図2に示されるように、本体装置2は、プロセッサ21を備える。プロセッサ21は、本体装置2において実行される各種の情報処理(例えばゲーム処理)を実行する情報処理部であって、例えば、CPU(Central Processing Unit)と、GPU(Graphics Processing Unit)とを含む。なお、プロセッサ21は、CPUのみから構成されてもよいし、CPU機能、GPU機能等の複数の機能を含むSoC(System-on-a-chip)から構成されてもよい。プロセッサ21は、記憶部(具体的には、フラッシュメモリ26等の内部記憶媒体、あるいは、スロット29に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
【0039】
また、本体装置2は、ディスプレイ12を備える。ディスプレイ12は、本体装置2が生成した画像を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。ディスプレイ12は、プロセッサ21に接続される。プロセッサ21は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
【0040】
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子23と、本体装置2が右コントローラ4と有線通信を行うための右側端子22を備える。
【0041】
また、本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ26およびDRAM(Dynamic Random Access Memory)27を備える。フラッシュメモリ26およびDRAM27は、プロセッサ21に接続される。フラッシュメモリ26は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM27は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
【0042】
本体装置2は、スロット29を備える。スロット29は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、ゲームシステム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。所定の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、ゲームアプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、ゲームプログラム等)を記憶するために用いられる。
【0043】
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)28を備える。スロットI/F28は、プロセッサ21に接続される。スロットI/F28は、スロット29に接続され、スロット29に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、プロセッサ21の指示に応じて行う。
【0044】
プロセッサ21は、フラッシュメモリ26およびDRAM27、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
【0045】
また、本体装置2は、ネットワーク通信部24を備える。ネットワーク通信部24は、プロセッサ21に接続される。ネットワーク通信部24は、ネットワークを介して外部の装置と無線又は有線により通信を行う。本実施形態においては、ネットワーク通信部24は、第1の通信態様としてWi-Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部24は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
【0046】
本体装置2は、コントローラ通信部25を備える。コントローラ通信部25は、プロセッサ21に接続される。コントローラ通信部25は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部25は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
【0047】
プロセッサ21は、上述の左側端子23および右側端子22に接続される。プロセッサ21は、左コントローラ3と有線通信を行う場合、左側端子23を介して左コントローラ3へデータを送信するとともに、左側端子23を介して左コントローラ3から操作データを受信する。また、プロセッサ21は、右コントローラ4と有線通信を行う場合、右側端子22を介して右コントローラ4へデータを送信するとともに、右側端子22を介して右コントローラ4から操作データを受信する。このように、本実施形態においては、本体装置2は、左コントローラ3および右コントローラ4との間で、それぞれ有線通信と無線通信との両方を行うことができる。
【0048】
なお、本体装置2は、
図2に示す各要素の他にも、電源を供給するためのバッテリー、ディスプレイ12とは別の表示装置(例えばテレビ)に画像及び音声を出力するための出力端子を備える。
【0049】
(ゲームの概要)
次に、本実施形態のゲームについて説明する。
図3は、本実施形態のゲームが実行された場合に表示されるゲーム画像の一例を示す図である。
【0050】
図3に示されるように、3次元の仮想空間(ゲーム空間)の地面30上には、プレイヤキャラクタPCと、複数の動的オブジェクト31(例えば、31a~31f)とが配置される。なお、
図3では省略されているが、仮想空間にはプレイヤキャラクタPC以外にも、プロセッサ21によって制御されるノンプレイヤキャラクタ(例えば敵キャラクタ、プレイヤキャラクタPCの仲間のキャラクタ等)が配置される。
【0051】
プレイヤキャラクタPCは、コントローラ(3又は4)に対する操作入力に基づいて、仮想空間内を移動したり、仮想空間内で複数のアクションのうちの何れかを行ったりする。
【0052】
例えば、プレイヤキャラクタPCは、コントローラ3のアナログスティック6Lに対する方向操作入力に基づいて、仮想空間の地面30上を移動する。
【0053】
また、プレイヤキャラクタPCは、複数のアクションのうちの1つとして、攻撃アクションを行う。具体的には、プレイヤキャラクタPCは、所有している武器オブジェクトを装備し、プレイヤの操作入力に基づいて、装備した武器オブジェクトに応じた攻撃アクションを行う。例えば、プレイヤキャラクタPCは、近接用武器オブジェクト(例えば剣オブジェクト)を用いた攻撃アクション、遠隔用武器オブジェクト(例えば矢オブジェクト)を用いた攻撃アクションを行うことが可能である。
【0054】
また、プレイヤキャラクタPCは、複数のアクションのうちの1つとして、オブジェクト操作アクションを行う。オブジェクト操作アクションは、例えば、プレイヤキャラクタPCの前方にある動的オブジェクト31を遠隔で操作するアクションである。
【0055】
具体的には、プレイヤの操作入力に基づいて、仮想空間に配置された複数の動的オブジェクトのうちの何れかがオブジェクト操作アクションの制御対象として設定される。オブジェクト操作アクションに基づいて、制御対象は仮想空間内で移動される。また、オブジェクト操作アクションに基づいて、制御対象の姿勢が制御される。また、オブジェクト操作アクションに基づいて、制御対象が、仮想空間に配置された他の動的オブジェクトに接続(結合)されて当該他の動的オブジェクトと合体される。これにより、複数の動的オブジェクトを組み合わせた組立品オブジェクトが生成される。オブジェクト操作アクションに基づく動的オブジェクト31の操作については後述する。
【0056】
動的オブジェクト31は、仮想空間内で動くことが可能なオブジェクトである。複数の動的オブジェクト31は、それぞれ固有の質量、形状、特性等を有する。
図3に示されるように、複数の動的オブジェクト31は、例えば、扇風機オブジェクト31aと、車輪オブジェクト31bと、ロケットオブジェクト31cと、帆オブジェクト31dと、気球オブジェクト31eと、板オブジェクト31fと、翼オブジェクト31gとを含む。
【0057】
扇風機オブジェクト31aは、扇風機を模したオブジェクトである。扇風機オブジェクト31aは、非稼働状態と稼働状態とを有し、稼働状態であるときに仮想空間に継続的に風を発生させ、当該風の力により仮想空間に配置されたオブジェクト(例えば敵キャラクタ)に力を加え、当該オブジェクトを飛ばすことができる。また、扇風機オブジェクト31aは、稼働状態であるときに、風の方向と反対方向への推進力を継続的に発生させる。
【0058】
車輪オブジェクト31bは、車輪を模したオブジェクトである。車輪オブジェクト31bは、非稼働状態と稼働状態とを有し、稼働状態であるときに予め定められた方向に回転し、当該回転により推進力を継続的に発生させる。
【0059】
また、ロケットオブジェクト31cは、ロケットを模したオブジェクトである。ロケットオブジェクト31cは、非稼働状態と稼働状態とを有し、稼働状態になった場合には、予め定められた方向への強い推進力を所定期間(例えば10秒)だけ発生させる。ロケットオブジェクト31cは、稼働状態になってから所定期間が経過すると、消滅する。
【0060】
また、帆オブジェクト31dは、帆を模したオブジェクトである。帆オブジェクト31fは、仮想空間に吹いている風や扇風機オブジェクト31aからの風を受けて推進力を発生させるオブジェクトである。詳細は後述するが、帆オブジェクト31dは、例えば、板オブジェクト31fに接続されて船オブジェクトを形成し、当該船オブジェクトに対して推進力を発生させる。
【0061】
気球オブジェクト31eは、熱気球を模したオブジェクトであり、仮想空間を飛行可能なオブジェクトである。気球オブジェクト31eは、非稼働状態と稼働状態とを有し、稼働状態であるときに仮想空間の上方へ推進力を継続的に発生させる。気球オブジェクト31eの推進力は、火力の大きさに応じて異なる。
【0062】
板オブジェクト31fは、平面状のオブジェクトであり、例えば車両の車体として利用可能である。また、板オブジェクト31fは、水面に浮かべて船オブジェクトの一部として利用可能である。
【0063】
翼オブジェクト31gは、空を飛ぶためのオブジェクトであり、所定の速度以上で仮想空間内を移動する場合に仮想空間の上方への揚力を発生させる。
【0064】
扇風機オブジェクト31a、車輪オブジェクト31b、ロケットオブジェクト31c、及び、気球オブジェクト31eは、稼働状態であるときに、それ自体が推進力を発生させる動的オブジェクトであり、当該推進力によって仮想空間を移動することが可能である。また、帆オブジェクト31dは、例えば扇風機オブジェクト31aが発生させた風やその他のオブジェクトが発生させた風、仮想空間に吹いている風を受けて、推進力を発生させる。これら推進力を発生させる動的オブジェクト(31a~31e)を総称して「推進オブジェクト」という。
【0065】
一方、板オブジェクト31f及び翼オブジェクト31gは、非稼働状態と稼働状態とを有さないオブジェクトであり、推進力を発生させないオブジェクトである。翼オブジェクト31gは、例えば他のオブジェクトから力を加えられることによって仮想空間内で所定の速度以上で移動する場合には、揚力を発生させるが、それ自体が推進力を発生させるものではない。また、板オブジェクト31fは、他のオブジェクトから力を加えられることによって仮想空間内を移動することはできるが、それ自体が推進力を発生させるものではない。これらそれ自体が推進力を発生させない動的オブジェクト(31d、31f)を総称して「非推進オブジェクト」という。非推進オブジェクトは、推進オブジェクト、プレイヤキャラクタPC、ノンプレイヤキャラクタからの力を受けることによって、仮想空間内を移動可能である。
【0066】
また、仮想空間には、プレイヤキャラクタPCのアクションや他のオブジェクトとの相互作用によって動かない静的オブジェクトも配置される。静的オブジェクトの一例は、例えば、仮想空間に固定された岩、山、建築物、地面、川、海等の地形オブジェクトである。静的オブジェクトは、オブジェクト操作アクションによって操作不可能なオブジェクトである。
【0067】
(オブジェクト操作アクションによる動的オブジェクトの操作)
上述のように、本実施形態のゲームでは、プレイヤキャラクタPCのオブジェクト操作アクションに基づいて、動的オブジェクト31を移動させることができる。また、オブジェクト操作アクションに基づいて、複数の動的オブジェクト31を結合させて組立品オブジェクトを生成することができる。
【0068】
図4は、プレイヤキャラクタPCのオブジェクト操作アクションによって、動的オブジェクト31が操作されているときのゲーム画像の一例を示す図である。
【0069】
例えば、プレイヤキャラクタPCの前方(又は仮想カメラの注視点近傍)に動的オブジェクト31があるときに、所定の操作入力が行われた場合、プレイヤキャラクタPCは当該動的オブジェクト31に対してオブジェクト操作アクションを行う。例えば、所定の選択操作に応じて、仮想空間に配置された複数の動的オブジェクト31のうち、扇風機オブジェクト31aが選択される。そして、所定の操作入力が行われた場合、
図4に示されるように、選択された扇風機オブジェクト31aが制御対象となり、当該制御対象に対してオブジェクト操作アクションが行われている状態になる。扇風機オブジェクト31aに対してオブジェクト操作アクションが行われている状態では、扇風機オブジェクト31aは、地面から浮いた状態になるとともに、通常とは異なる表示態様になる。また、オブジェクト操作アクションが行われていることを示すエフェクト画像60が表示される。
【0070】
このとき、プレイヤによる移動操作入力(例えば、左コントローラ3のアナログスティック6Lに対する方向操作入力)に応じてプレイヤキャラクタPCが移動した場合、扇風機オブジェクト31aも移動する。また、例えば、右コントローラ4のアナログスティック6Rに対する方向操作入力が行われた場合、プレイヤキャラクタPCの向きが変化するとともに、プレイヤキャラクタPCの正面に扇風機オブジェクト31aが位置するように、扇風機オブジェクト31aが仮想空間内で移動してもよい。また、例えば、ボタン5Lに対するキー操作に応じて、プレイヤキャラクタPCの移動を伴わずに扇風機オブジェクト31aを移動させたり、プレイヤキャラクタPCの向きの変化を伴わずに扇風機オブジェクト31aを回転させたりしてもよい。
【0071】
図5は、オブジェクト操作アクションに基づいて扇風機オブジェクト31aが移動されているときのゲーム画像の一例を示す図である。
図5に示されるように、例えば、オブジェクト操作アクションに基づいて扇風機オブジェクト31aを操作中に、プレイヤキャラクタPCが翼オブジェクト31gに向かって移動する場合、扇風機オブジェクト31aもプレイヤキャラクタPCに追従して同じ方向に移動する。あるいは、オブジェクト操作アクションに基づいて扇風機オブジェクト31aを操作中に、ボタン5Lに対するキー操作に応じて、扇風機オブジェクト31aが翼オブジェクト31gに向かって移動してもよい。扇風機オブジェクト31aと翼オブジェクト31gとが所定の接続条件(例えば、両者の距離が閾値未満)を満たす場合に、接続位置を示唆する接続オブジェクト32が表示される(
図5)。この接続オブジェクト32が表示されているときに、プレイヤによる接続指示(例えばAボタンの押下)が行われた場合、扇風機オブジェクト31aが翼オブジェクト31gに接続(結合)される。これにより、複数の動的オブジェクト31を含む組立品オブジェクトが生成される。ここでは、組立品オブジェクトとして、扇風機オブジェクト31aと翼オブジェクト31gとを含む飛行機オブジェクト40が生成される。
【0072】
図6は、オブジェクト操作アクションに基づいて生成された組立品オブジェクトの一例であって、扇風機オブジェクト31aと翼オブジェクト31gとを含む飛行機オブジェクト40の一例を示す図である。
【0073】
図6に示されるように、扇風機オブジェクト31aと翼オブジェクト31gとの間には、接続オブジェクト32が配置される。接続オブジェクト32は、動的オブジェクト31同士が接続されていること及びその接続位置を示すオブジェクトであり、動的オブジェクト31同士の位置関係を固定するオブジェクトである。組立品オブジェクトに含まれる複数の動的オブジェクト31は、この接続オブジェクト32によって接続される。
【0074】
複数の動的オブジェクト31を含む組立品オブジェクトは、仮想空間内で一体として動作する。例えば、飛行機オブジェクト40に含まれる扇風機オブジェクト31aが非稼働状態から稼働状態に変化した場合、扇風機オブジェクト31aは推進力を発生させる。この扇風機オブジェクト31aの推進力が、接続オブジェクト32を介して当該扇風機オブジェクト31aと接続された翼オブジェクト31gにも伝わり、扇風機オブジェクト31aと翼オブジェクト31gとを含む飛行機オブジェクト40が移動開始する。
【0075】
飛行機オブジェクト40が移動開始した後、その速度が所定値を超えた場合、飛行機オブジェクト40は、翼オブジェクト31gによる揚力によって空中に浮き、仮想空間を飛行する。プレイヤキャラクタPCは、飛行機オブジェクト40の上に乗り、仮想空間を飛行することができる。
【0076】
(推進力の制御)
次に、推進オブジェクトの推進力の制御について説明する。
図7は、推進オブジェクトが移動しているときの推進力の制御について説明するための図である。
【0077】
上述のように、本実施形態のゲームでは、プレイヤは、複数の動的オブジェクト31を組み合わせて組立品オブジェクトを生成することができる。組立品オブジェクトは、仮想空間内で移動可能である。
図7では、例えば、組立品オブジェクトに含まれる推進オブジェクト(例えば、扇風機オブジェクト31a)の移動方向および推進力の方向が示されている。
【0078】
図7に示されるように、推進オブジェクトは、速度V(速度ベクトルV)で
図7の上方向に移動中であるとする。推進オブジェクトは、所定方向に推進力Fを発生させる。
図7では、推進オブジェクトの推進力Fの方向は、左斜め上方向であり、速度Vと所定の角度を有している。ここで、推進オブジェクトの速度Vの、推進力Fの方向に沿った成分を、推進力方向成分Sとする。推進力方向成分Sは3次元のベクトルである。推進オブジェクトの推進力Fは、この推進力方向成分Sの大きさに応じて変化される。
【0079】
図8は、推進オブジェクトの速度の推進力方向成分Sの大きさと推進力Fの大きさとの関係を示す図である。
【0080】
図8に示されるように、推進力方向成分Sの大きさに応じて、推進オブジェクトの推進力Fは減衰される。例えば、推進力方向成分Sの大きさがゼロである場合、推進オブジェクトの推進力Fの大きさは最大のF0に設定される。推進力方向成分Sの大きさに応じて、推進オブジェクトの推進力Fの大きさは線形的に減衰される。例えば、推進力方向成分Sの大きさがS1である場合、推進オブジェクトの推進力Fの大きさはF1に設定される。
図7では、推進力Fの大きさがF1に減衰されている状態を示している。そして、推進力方向成分Sの大きさがS2を超える場合、推進力Fの大きさはゼロに設定される。推進オブジェクトの推進力Fの大きさは、現時点の推進力方向成分Sの大きさに応じて設定される。このため、例えば、推進力方向成分Sの大きさがゼロからS2まで増加する間、推進力Fの大きさは最大値からゼロまで減少し、その後、推進力方向成分Sの大きさが減少に転じてS2を下回った場合は、推進力Fの大きさは、上昇し、そのときの推進力方向成分Sの大きさに応じた値に設定される。
【0081】
仮に推進力Fが減衰されない場合、推進オブジェクトは加速し続け、ゲームにおいて許容できる範囲を超えた速度に到達する可能性が高くなる。本実施形態では、推進オブジェクトの速度Vの推進力方向成分Sに応じて推進力Fを減衰させ、推進力方向成分Sが所定の基準まで大きくなった場合に推進力Fが無くなるように制御される。これにより、推進オブジェクトが加速し続け、ゲームにおいて許容できる範囲を超えた速度に到達することを抑制することができる。
【0082】
推進オブジェクトの種類に応じて、
図8に示される推進オブジェクトの推進力Fの推進力方向成分Sの大きさと推進力Fの大きさとの関係が定められる。すなわち、推進オブジェクトの種類に応じて、
図8に示される直線の傾きが異なり、S=0のときのFの値が異なり、F=0となるときのSの値が異なる。例えば、予め大きな推進力が設定された推進オブジェクト(例えば、ロケットオブジェクト31c)は、推進力がゼロになる推進力方向成分Sの値が大きく設定されている。
【0083】
推進オブジェクトは、組立品オブジェクトに含まれている場合も、単体である場合も、その速度Vの推進力方向成分Sに応じて推進力が減衰される。
【0084】
組立品オブジェクトに複数の推進オブジェクトが含まれる場合、推進オブジェクト毎に推進力が設定される。
図9は、翼オブジェクト31gと複数の推進オブジェクトとを含む組立品オブジェクトの一例を示す図であり、各推進オブジェクトの推進力の制御の一例を示す図である。
図9では、翼オブジェクト31gを上方から見た図が示されている。
図9の上方向は、翼オブジェクト31gの前方である。
【0085】
図9に示されるように、組立品オブジェクト41の翼オブジェクト31g上には、複数の推進オブジェクトとして、第1の扇風機オブジェクト31aaと、第2の扇風機オブジェクト31abと、ロケットオブジェクト31cとが接続されている。複数の推進オブジェクト(31aa、31ab、31c)は稼働状態であり、それぞれ推進力を発生させている。これら各推進オブジェクトの推進力によって組立品オブジェクト41は仮想空間内で加速され、ある時点において速度Vで移動している。
【0086】
具体的には、翼オブジェクト31gの後方左側部分には、第1の扇風機オブジェクト31aaが配置されている。第1の扇風機オブジェクト31aaは、翼オブジェクト31gの後方に向かって風を発生させ、翼オブジェクト31gの前方に推進力Faを発生させている。また、翼オブジェクト31gの後方右側部分には、第2の扇風機オブジェクト31abが配置されている。第2の扇風機オブジェクト31abは、翼オブジェクト31gの前方に向かって右側に風を発生させ、翼オブジェクト31gの前方に向かって左側に推進力Fbを発生させている。また、翼オブジェクト31gの略中央部分には、ロケットオブジェクト31cが配置されている。また、ロケットオブジェクト31cは、翼オブジェクト31gの後方に向かってガスを射出し、翼オブジェクト31gの前方に推進力Fcを発生させている。
【0087】
このような3つの推進オブジェクトの推進力によって、組立品オブジェクト41は、翼オブジェクト31gの前方かつ左方向に速度Vで移動している状態である。このような組立品オブジェクト41の各推進オブジェクトの推進力がその推進力方向成分Sに応じて減衰される。具体的には、第1の扇風機オブジェクト31aaは、速度Vaaで仮想空間内を移動しており、その速度Vaaの、推進力Faの方向に沿った成分(推進力方向成分)Saaに応じて、推進力Faが減衰される。また、第2の扇風機オブジェクト31abは、速度Vabで仮想空間内を移動しており、その速度Vabの、推進力Fbの方向に沿った成分(推進力方向成分)Sabに応じて、推進力Fbが減衰される。また、ロケットオブジェクト31cは、速度Vcで仮想空間内を移動しており、その速度Vcの推進力Fcの方向に沿った成分(推進力方向成分)Scに応じて、推進力Fcが減衰される。
【0088】
本実施形態のゲームでは、所定のフレーム時間間隔で各オブジェクト(動的オブジェクト31、プレイヤキャラクタPC等)に対して物理演算(物理法則に基づく計算)が行われることで、各オブジェクトの速度、角速度、位置、姿勢等が算出される。具体的には、推進オブジェクトの推進力、各オブジェクトが発生する他の力(揚力、浮力、重力等)、各オブジェクト同士の接触による相互作用(受ける力、与える力)等に基づいて物理演算が行われ、各オブジェクトの最新の速度、角速度、位置、姿勢等が計算される。
【0089】
図9に示される各推進オブジェクトは、翼オブジェクト31g上に固定されており、組立品オブジェクト41の速度Vと、第1の扇風機オブジェクト31aaの速度Vaaと、第2の扇風機オブジェクト31abの速度Vabと、ロケットオブジェクト31cの速度Vcとは同じである。同一の組立品オブジェクトに含まれる複数の推進オブジェクトであっても、その速度が異なる場合がある。
【0090】
図10は、翼オブジェクト31gと複数の推進オブジェクトとを含む組立品オブジェクトの一例を示す図であり、推進オブジェクトによってその速度が異なる場合を示す図である。
【0091】
図10に示される組立品オブジェクト42は、
図9に示される組立品オブジェクト41と同様に、第1の扇風機オブジェクト31aaと、第2の扇風機オブジェクト31abと、ロケットオブジェクト31cと、翼オブジェクト31gとを含む。組立品オブジェクト42は、さらに、車輪オブジェクト31bを含む。具体的には、翼オブジェクト31gの上に、車輪オブジェクト31bが回転可能に接続されている。
図10に示されるように、車輪オブジェクト31bは、稼働状態であるときに、翼オブジェクト31gの上面に垂直な軸回りに回転する。この車輪オブジェクト31bに、第2の扇風機オブジェクト31abが接続されている。
【0092】
図10に示される状態では、
図9と同様に、組立品オブジェクト42が速度Vで移動している。第1の扇風機オブジェクト31aa及びロケットオブジェクト31cは、翼オブジェクト31gに直接固定されており、組立品オブジェクト42が移動中でもこれらの位置関係は変化しない。このため、第1の扇風機オブジェクト31aa及びロケットオブジェクト31cは、組立品オブジェクト42(翼オブジェクト31g)と同じ速度Vで移動する。一方、第2の扇風機オブジェクト31abは、回転する車輪オブジェクト31bに固定されている。このため、第2の扇風機オブジェクト31abは、組立品オブジェクト42内で回転し、その回転による速度が、組立品オブジェクト42の速度Vに加わる。すなわち、第2の扇風機オブジェクト31abは、組立品オブジェクト42の速度Vに車輪オブジェクト31bの回転速度を加えた速度Vab’で、仮想空間内を移動する。この速度Vab’の推進力方向成分Sab’の大きさに応じて、第2の扇風機オブジェクト31abの推進力Fbが減衰される。
【0093】
(各推進オブジェクトの説明)
推進オブジェクトは、その種類によって異なる特徴を有する。以下、各推進オブジェクトの詳細について説明する。
【0094】
図11は、ロケットオブジェクト31cの状態に応じた挙動を示す図である。
【0095】
図11に示されるように、ロケットオブジェクト31cは、非稼働状態であるとき、質量mcを有する。この状態でロケットオブジェクト31cが稼働状態になった場合、ロケットオブジェクト31cの質量は、mcからMc(>mc)に増大する(
図11の(2))。また、ロケットオブジェクト31cが稼働状態になった場合、ロケットオブジェクト31cの慣性テンソルも、非稼働状態のときよりも増大する。
【0096】
ロケットオブジェクト31cと翼オブジェクト31gとを含む組立品オブジェクトにおいて、ロケットオブジェクト31cが非稼働状態であるときは、組立品オブジェクト全体の質量はmg+mcである。翼オブジェクト31gが所定の速度以上で仮想空間を移動する場合には、翼オブジェクト31gは揚力を発生させ、この揚力が(mg+mc)を超える場合、組立品オブジェクトは浮き、仮想空間を飛行する。
【0097】
ロケットオブジェクト31cが稼働状態であるとき、ロケットオブジェクト31cの質量がMcに増大される。これにより、ロケットオブジェクト31cは、大きな推進力Fcを発生させ、この推進力Fcが翼オブジェクト31gに加えられ、ロケットオブジェクト31cと翼オブジェクト31gとを含む組立品オブジェクトには大きな力が加えられる。なお、推進力Fcは、上述のように、ロケットオブジェクト31cの速度の推進力方向成分Sに応じて減衰される。
【0098】
ロケットオブジェクト31cが稼働状態であるとき、ロケットオブジェクト31cの質量がMcに増大されることにより、ロケットオブジェクト31cに接続された動的オブジェクト31に大きな力を加えることができる。例えば、ロケットオブジェクト31cが稼働状態であるときに、質量mcのままでは、推進力fc=mc・α(αは加速度)しか発生させることができない。一方、ロケットオブジェクト31cが稼働状態になったときに、質量をMc(>mc)に増大させることによって、推進力Fc=Mc・α(>fc)を発生させることができる。
【0099】
このように、ロケットオブジェクト31cは、稼働状態のときには、その質量及び慣性テンソルが非稼働状態のときよりも増大される。これにより、ロケットオブジェクト31cが稼働状態になったときに、ロケットオブジェクト31cと接続されている動的オブジェクト31に大きな力を与えることができる。なお、ロケットオブジェクト31cの質量がmcからMcに増大される場合でも、ロケットオブジェクト31cにかかる重力についてはその増大が軽減され、例えば、質量がmcのときと同じに設定される。仮に、ロケットオブジェクト31cにかかる重力が増大される場合は、翼オブジェクト31gが発生する揚力よりもロケットオブジェクト31cにかかる重力が大きくなってしまい、例えば、ロケットオブジェクト31cと翼オブジェクト31gとを含む組立品オブジェクトが落下してしまう可能性がある。しかしながら、本実施形態では、ロケットオブジェクト31cの質量が増大されても、重力については増大されない(又は増大が軽減される)ため、ロケットオブジェクト31cと翼オブジェクト31gとを含む組立品オブジェクトが自重によって落下してしまうことを防止することができる。
【0100】
ロケットオブジェクト31cは、稼働状態になってから所定期間(例えば10秒)が経過すると、消滅する(仮想空間から消滅するとともに質量もゼロになる)。このように、ロケットオブジェクト31cは、所定期間だけ稼働状態になり、大きな推進力を発生させる。なお、ロケットオブジェクト31cは、稼働状態になってから所定期間が経過した場合、非稼働状態になるが、消滅することなく存在し続けてもよい。この場合、ロケットオブジェクト31cの質量はmcに戻される。
【0101】
次に、扇風機オブジェクト31aについて説明する。
図12は、扇風機オブジェクト31aの状態に応じた挙動を示す図である。
【0102】
図12に示されるように、組立品オブジェクトの一部ではない単体の扇風機オブジェクト31aは、立った姿勢において、稼働状態になった場合、所定の方向に風を発生させるが、推進力を発生させない(
図12の(1))。扇風機オブジェクト31aは質量maを有し、仮に立った姿勢で推進力が発生されると、扇風機オブジェクト31aは、地面30との摩擦によって回転し、倒れてしまうことがある。このため、単体の扇風機オブジェクト31aは、立った姿勢においては稼働状態になった場合でも、推進力を発生させない。扇風機オブジェクト31aは、非稼働状態に設定されるまでは、稼働状態を維持する。すなわち、単体の扇風機オブジェクト31aは、立った姿勢のまま所定の方向に風を出し続ける。
【0103】
一方、単体の扇風機オブジェクト31aは、倒れた姿勢において、稼働状態になった場合、所定の方向に風を発生させるとともに、風の方向とは反対方向に推進力Faを発生させる(
図12の(2))。例えば、推進力Faが上向きになるように、扇風機オブジェクト31aが倒れた姿勢で仮想空間内に配置されている場合において、稼働状態になった場合、扇風機オブジェクト31aは自身の推進力Faにより上方向に飛んでいく。なお、推進力Faは、上述のように、扇風機オブジェクト31aの速度の推進力方向成分Sに応じて減衰される。
【0104】
また、扇風機オブジェクト31aが組立品オブジェクトに含まれる場合において、立った姿勢かつ稼働状態のときには、所定の方向に風を発生させるとともに、推進力Faを発生させる(
図12の(3))。組立品オブジェクトに含まれる扇風機オブジェクト31aは、どのような姿勢でも、稼働状態のときには、風を発生させるとともに推進力Faを発生させる。なお、扇風機オブジェクト31aの質量は、上記ロケットオブジェクト31cのように増大されない。また、推進力Faは、上述のように、扇風機オブジェクト31aの速度の推進力方向成分Sに応じて減衰される。
【0105】
なお、
図12の(2)とは逆に、風の向きが上向きになるように、単体の扇風機オブジェクト31aが倒れた姿勢で配置されている場合、当該扇風機オブジェクト31aは、推進力Faを発生させなくてもよいし、発生させてもよい。
【0106】
(帆オブジェクトの推進力による移動)
次に、帆オブジェクト31dについて説明する。
図13は、帆オブジェクト31dを含む組立品オブジェクトが移動するときのゲーム画像の一例を示す図である。
図14は、
図13の状態から所定時間経過後のゲーム画像の一例を示す図である。
【0107】
図13に示されるように、仮想空間には、地形オブジェクトの一例として水面35が設定される。プレイヤは、上述したオブジェクト操作アクションによって、水面35を移動するための組立品オブジェクトを生成することができる。
【0108】
例えば、プレイヤは、
図13に示されるように、板オブジェクト31fの上に、帆オブジェクト31gを接続(結合)させることにより、組立品オブジェクト43を生成する。板オブジェクト31fは、水面35に配置されると浮力を発生させる。板オブジェクト31fの浮力よりも板オブジェクト31fの上に乗っているオブジェクト(帆オブジェクト31g及びプレイヤキャラクタPC)の重力が小さい場合には、板オブジェクト31fは、水面35に浮く。また、帆オブジェクト31gは、風を受けて推進力を発生させる。例えば、プレイヤは、水面35と地面30との境界付近に扇風機オブジェクト31aを立った姿勢で配置する。プレイヤは、この状態で扇風機オブジェクト31aを稼働状態にさせる。例えば、プレイヤキャラクタPCの攻撃アクションが扇風機オブジェクト31aに当たった場合、扇風機オブジェクト31aは非稼働状態から稼働状態に変化する。扇風機オブジェクト31aは稼働状態において風を発生させる。
【0109】
より具体的には、扇風機オブジェクト31aから
図13の左方向に、所定の接触判定領域を生成させる。この接触判定領域は、風がオブジェクトに当たったか否かを判定するための所定の形状を有するオブジェクトであり、内部処理に用いられる3次元オブジェクトである。接触判定領域は、画面には表示されない。その代わりに、接触判定領域が発生しているときには、風が吹いていることを示すエフェクト画像が表示されてもよい。この接触判定領域とオブジェクトとの接触判定が行われる。接触判定領域がオブジェクトに当たった場合、オブジェクトに力が加わる。この力に基づいて物理演算が行われることにより、風が当たったときのオブジェクトの挙動が決定される。
【0110】
図13に示されるように、扇風機オブジェクト31aからの風(接触判定領域)が帆オブジェクト31gに当たった場合、帆オブジェクト31gは推進力Fgを発生させる。この推進力Fgにより、帆オブジェクト31gと板オブジェクト31fとを含む組立品オブジェクト43は、水面上を左方向に移動する(
図14)。これにより、プレイヤキャラクタPCは、組立品オブジェクト43に乗って水面上を移動することができる。推進力Fgは、上述のように、帆オブジェクト31gの速度の推進力方向成分Sに応じて減衰される。
【0111】
扇風機オブジェクト31aが稼働状態である場合、接触判定領域は継続的に配置されるが、接触判定領域の範囲は限られている。また、扇風機オブジェクト31aから離れるほど、接触判定領域の大きさが小さくなってもよいし、接触判定領域が当たったときの推進力が弱くなってもよい。組立品オブジェクト43が、所定距離以上、扇風機オブジェクト31aから離れた場合、帆オブジェクト31gには接触判定領域は当たらず、帆オブジェクト31gは推進力を発生させない。このため、組立品オブジェクト43は、推進力を失って水面35上で停止してしまう。
【0112】
図15は、第2の扇風機オブジェクト31abと帆オブジェクト31gと板オブジェクト31fとを含む組立品オブジェクト44の一例を示す図である。
【0113】
図15に示されるように、組立品オブジェクト44の板オブジェクト31f上には、第2の扇風機オブジェクト31abと、帆オブジェクト31gとが接続されている。また、
図13と同様に、水面35と地面30との境界付近に第1の扇風機オブジェクト31aaが立った姿勢で配置されている。この状態で、地面30上の第1の扇風機オブジェクト31aaを稼働状態にさせ、さらに、組立品オブジェクト44内の第2の扇風機オブジェクト31abを稼働状態にさせる。この場合、第2の扇風機オブジェクト31abは、
図15の左方向に推進力Fabを発生させ、帆オブジェクト31gも左方向に推進力Fgを発生させる。これにより、組立品オブジェクト44には、2つの推進力が加わり、より大きな加速度で水面35上を移動開始する。第1の扇風機オブジェクト31aaからの風の影響を受けない距離まで組立品オブジェクト44が第1の扇風機オブジェクト31aaから離れても、組立品オブジェクト44は、第2の扇風機オブジェクト31abの推進力により引き続き移動し続けることが可能である。
【0114】
ここで、
図15に示されるように、組立品オブジェクト44に含まれる第2の扇風機オブジェクト31abが出す風の方向に、帆オブジェクト31gが配置されている場合でも、帆オブジェクト31gは、この第2の扇風機オブジェクト31abからの風が当たったことによる推進力を発生させない。すなわち、帆オブジェクト31gは、組立品オブジェクト44に含まれない第1の扇風機オブジェクト31aaからの接触判定領域が当たった場合には、接触判定領域が飛ぶ方向に(風の方向に)推進力を発生させるが、組立品オブジェクト44に含まれる第2の扇風機オブジェクト31abからの接触判定領域が当たった場合には、推進力を発生させない。
【0115】
仮に、組立品オブジェクト44の一部を構成する帆オブジェクト31gが、同じ組立品オブジェクト44に含まれる第2の扇風機オブジェクト31abからの接触判定領域が当たったことに応じて推進力を発生させる場合、互いに反対方向に推進力が発生してしまう。あるいは、組立品オブジェクト44内における第2の扇風機オブジェクト31abと帆オブジェクト31gとの角度によっては、第2の扇風機オブジェクト31abの推進力と、当該第2の扇風機オブジェクト31abからの風による帆オブジェクト31gの推進力とによって、組立品オブジェクト44が回転し続ける場合がある。このため、組立品オブジェクト44をプレイヤが意図した通りに移動させることができなくなってしまう。したがって、本実施形態では、同一の組立品オブジェクトに、扇風機オブジェクト31aと帆オブジェクト31gとが含まれる場合は、帆オブジェクト31gは、当該同一の組立品オブジェクトに含まれる扇風機オブジェクト31aからの接触判定領域によって推進力を発生させない。これにより、例えば、扇風機オブジェクト31aと帆オブジェクト31gとが互いに反対方向に推進力を発生させることを防止することができる。
【0116】
なお、
図15において、第2の扇風機オブジェクト31abと帆オブジェクト31gのうち何れか一方が板オブジェクト31fに接続されていない場合は、帆オブジェクト31gは、第2の扇風機オブジェクト31abからの風に応じて推進力を発生させる。例えば、第2の扇風機オブジェクト31abが板オブジェクト31fに接続されておらず、単に板オブジェクト31fの上に乗っている場合は、第2の扇風機オブジェクト31abからの風に応じて、帆オブジェクト31gは推進力を発生させる。
【0117】
次に、気球オブジェクト31eについて説明する。
図16は、気球オブジェクト31eの推進力の方向と、火力による推進力の違いを示す図である。
図16に示されるように、気球オブジェクト31eは、稼働状態のとき、仮想空間の上方に推進力Feを発生させる。ここで、気球オブジェクト31eは、火力に応じて異なる推進力Feを発生させる。例えば、プレイヤキャラクタPCは、アイテム(所定のパラメータ)を用いて、気球オブジェクト31eの火力を上昇させたり、低下させたりすることができる。気球オブジェクト31eの推進力Feは、この火力に応じて異なる。
【0118】
図17は、気球オブジェクト31eの速度の推進力方向成分Sの大きさと推進力Feの大きさとの関係を示す図である。
図17に示されるように、気球オブジェクト31eの火力が小さいときと、気球オブジェクト31eの火力が大きいときとでは、推進力の減衰グラフが異なる。具体的には、気球オブジェクト31eの火力が大きい程、推進力方向成分Sと推進力Feの関係を示す直線は、グラフの右上に移動する。例えば、気球オブジェクト31eについて、火力をプレイヤキャラクタPCが有する所定のゲームパラメータを用いて連続的に変化させることが可能に構成されている場合、火力が連続的に大きくなることに応じて推進力方向成分Sと推進力Feの関係を示す直線は、グラフの右上に連続的に移動する。
【0119】
また、図示は省略するが、気球オブジェクト31eも、ロケットオブジェクト31cと同様に、稼働状態のときには、その質量及び慣性テンソルが非稼働状態のときよりも増大される。これにより、気球オブジェクト31eと他の動的オブジェクト31とを含む組立品オブジェクトにおいて、気球オブジェクト31eが稼働状態になったときに、組立品オブジェクトに大きな推進力を与えることができる。
【0120】
以上のように、本実施形態のゲームでは、仮想空間内に、複数種類の推進オブジェクトを含む複数種類の動的オブジェクト31が配置されている。プレイヤは、オブジェクト操作アクションに基づいて、複数の動的オブジェクト31を接続(結合)させて組立品オブジェクトを生成し、推進オブジェクトを含む組立品オブジェクトを移動させることができる。推進オブジェクトは、所定方向にそれ自体を動かそうとする推進力を発生させる。推進オブジェクトの速度の、推進力方向成分Sが所定の基準を超えた場合に推進力Fが無くなるように、推進力方向成分Sの大きさに応じて、推進オブジェクトの推進力Fが減衰される。これにより、推進オブジェクトが、推進力により加速し続けてゲームにおいて許容できる範囲を超えた速度に到達することを抑制することができる。複数の推進オブジェクトを含む組立品オブジェクトをプレイヤが自由に生成することができる場合、オブジェクト間の相互作用によって、自身の発生した推進力だけでなく、他の推進オブジェクトからの力も受ける一方、他のオブジェクトに対して力を加えることになる。その場合でも、それぞれの推進オブジェクトに対して推進力を減衰させる処理を行うことで、複雑に組み合わされた組立品オブジェクトであってもそれぞれの推進オブジェクトの速度を抑制することができ、組立品オブジェクト全体の動作を制御することができる。
【0121】
一般的に、例えば、ゲーム空間を移動可能なオブジェクトに対して、一定の加速度を与え、一定速度に達した場合にその速度を維持させる制御を行うことが考えられる。そのような制御は、予め定められた単純なオブジェクトを移動させる場合には適していると考えられるが、複数の動的オブジェクトを組み合わせて組立品オブジェクトを自由に生成できる場合には、必ずしも適した制御とは言えない場合がある。すなわち、複数の動的オブジェクトを組み合わせた組立品オブジェクトについて、一定の加速度を与え、一定速度に達した場合にその速度を維持させるという単純な制御を行う場合、組立品オブジェクトに含まれるそれぞれの動的オブジェクトの特性(推進オブジェクトの推進力の大きさや方向、揚力等の他の力)を利用することができず、単純な挙動しか実現できないという問題がある。しかしながら、本実施形態のように組立品オブジェクトに含まれるそれぞれの推進オブジェクトに対して、推進力方向成分Sに応じて推進力を減衰させることにより、それぞれの推進オブジェクトの特性や、配置による効果を利用しつつ、組立品オブジェクト全体を制御することができる。たとえば、組立品オブジェクトに多数の推進オブジェクトを接続する場合、それぞれの推進力の減衰によって速度は制限されることになるが、加速がし易くなる、地形の状態や障害物によって抵抗が発生する場合でも影響を受けづらくなる等、推進力を増やすことによる効果を得ることができる。
【0122】
(ゲーム処理に用いられるデータ)
次に、上述したゲームに関するゲーム処理の詳細について説明する。まず、ゲーム処理に用いられるデータについて説明する。
図18は、ゲーム処理の実行中に本体装置2のメモリに記憶されるデータの一例を示す図である。
【0123】
図18に示されるように、本体装置2のメモリ(DRAM27、フラッシュメモリ26、又は外部記憶媒体)には、ゲームプログラム100と、操作データ110と、プレイヤキャラクタデータ120と、推進オブジェクトデータ130と、非推進オブジェクトデータ140と、推進力算出データ150と、静的オブジェクトデータ160と、組立品オブジェクトデータ200とが記憶される。なお、これらのデータの他にも、メモリにはゲーム処理に用いられる様々なデータ(例えば敵キャラクタに関するデータ等)が記憶される。
【0124】
ゲームプログラム100は、後述するゲーム処理を実行するためのプログラムである。ゲームプログラムは、スロット29に装着される外部記憶媒体又はフラッシュメモリ26に予め記憶されており、ゲームの実行時にDRAM27に読み込まれる。なお、ゲームプログラムは、ネットワーク(例えばインターネット)を介して他の装置から取得されてもよい。
【0125】
操作データ110は、コントローラ3及び4から本体装置2に送信されたデータである。コントローラ3及び4は、所定の時間間隔(例えば、1/200秒間隔)で繰り返し操作データ110を本体装置2に送信する。
【0126】
プレイヤキャラクタデータ120は、プレイヤキャラクタPCに関するデータである。プレイヤキャラクタデータ120は、例えば、プレイヤキャラクタPCの位置及び姿勢に関するデータと、速度及び角速度に関するデータとを含む。また、プレイヤキャラクタデータ120は、プレイヤキャラクタPCがオブジェクト操作アクション中か否かを示すデータを含む。
【0127】
推進オブジェクトデータ130は、仮想空間に配置された動的オブジェクト31のうちの推進オブジェクトに関するデータである。仮想空間に配置された推進オブジェクト毎に、推進オブジェクトデータ130が記憶される。推進オブジェクトデータ130は、位置・姿勢データ131と、速度・角速度データ132と、推進力データ133と、種類データ134とを含む。
【0128】
位置・姿勢データ131は、推進オブジェクトの仮想空間における位置及び姿勢に関するデータである。具体的には、位置・姿勢データ131は、推進オブジェクトの最新のフレームにおける位置及び姿勢を示すデータと、少なくとも直前のフレームにおける位置及び姿勢を示すデータとを含む。
【0129】
速度・角速度データ132は、推進オブジェクトの仮想空間における速度及び角速度に関するデータである。具体的には、速度・角速度データ132は、推進オブジェクトの最新のフレームにおける速度及び角速度を示すデータと、少なくとも直前のフレームにおける速度及び角速度を示すデータとを含む。
【0130】
推進力データ133は、推進オブジェクトの現在の推進力Fに関するデータであり、例えば、推進力Fの大きさ及び方向を示す3次元のベクトルである。推進力Fの方向は、推進オブジェクトの姿勢に応じて定められる。また、推進力Fの大きさは、推進オブジェクトの速度の推進力方向成分Sに応じて設定される。
【0131】
種類データ134は、推進オブジェクトの種類を示すデータである。例えば、種類データ134は、推進オブジェクトの形状や外観に関するデータ、推進オブジェクトの質量に関するデータ、推進オブジェクトが稼働状態か非稼働状態かを示すデータ、推進オブジェクトが稼働状態である場合の当該推進オブジェクトの挙動に関するデータ(例えば、推進力の大きさ、推進力の方向等に関するデータ)を含む。
【0132】
非推進オブジェクトデータ140は、仮想空間に配置された動的オブジェクト31のうちの非推進オブジェクトに関するデータである。仮想空間に配置された非推進オブジェクト毎に、非推進オブジェクトデータ140が記憶される。非推進オブジェクトデータ140は、非推進オブジェクトの位置及び姿勢に関する位置・姿勢データ141と、速度及び角速度に関する速度・角速度データ142と、種類データ143とを含む。種類データ143は、非推進オブジェクトの種類を示すデータであり、形状や外観に関するデータ、質量に関するデータ、その他の特性(例えば、速度に応じて揚力を発生させる、水面上で浮力を発生させるなど)等を含む。
【0133】
推進力算出データ150は、推進オブジェクトの速度の推進力方向成分Sの大きさと推進力Fの大きさとの関係を示すデータ(例えば、
図8に示されるグラフを表す式)である。推進オブジェクトの種類毎に、推進力算出データ150が用意される。
【0134】
静的オブジェクトデータ160は、仮想空間に配置された静的オブジェクト(仮想空間に固定された岩、山、建築物、地面等を表すオブジェクト)に関するデータである。静的オブジェクト毎に、静的オブジェクトデータ160が記憶される。静的オブジェクトデータ160は、静的オブジェクトの位置や姿勢に関するデータ、静的オブジェクトの種類に関するデータ、静的オブジェクトの形状や外観に関するデータを含む。
【0135】
組立品オブジェクトデータ200は、仮想空間に配置された組立品オブジェクトに関するデータである。組立品オブジェクト毎に、組立品オブジェクトデータ200が記憶される。組立品オブジェクトデータ200は、推進オブジェクトデータ(例えば、1130、2130等)を含む。組立品オブジェクトデータ200に含まれる各推進オブジェクトデータは、推進オブジェクトデータ130と同様のデータを有する。また、組立品オブジェクトデータ200は、非推進オブジェクトデータ(例えば、1140等)を含む。組立品オブジェクトデータ200に含まれる各非推進オブジェクトデータは、非推進オブジェクトデータ140と同様のデータを有する。
【0136】
なお、図示は省略するが、組立品オブジェクトデータ200は、組立品オブジェクトを構成する各動的オブジェクトの、当該組立品オブジェクト内での位置及び姿勢を示すデータ、組立品オブジェクト内の各動的オブジェクトの接続位置を示すデータを含む。また、組立品オブジェクトデータ200は、組立品オブジェクト全体の質量や重心位置、速度、角速度等に関するデータを含んでもよい。
【0137】
(ゲーム処理の詳細)
次に、本体装置2において行われるゲーム処理の詳細について説明する。
図19は、プロセッサ21によって実行されるゲーム処理の一例を示すフローチャートである。
【0138】
図19に示されるように、ゲーム処理が開始されると、プロセッサ21は、初期処理を実行する(ステップS100)。具体的には、プロセッサ21は、仮想空間を設定し、仮想空間に静的オブジェクト(地形オブジェクト)、プレイヤキャラクタPC、複数の動的オブジェクト31(複数の推進オブジェクト及び複数の非推進オブジェクト)、敵キャラクタ等のノンプレイヤキャラクタを配置する。
【0139】
次に、プロセッサ21は、コントローラから送信されてメモリに格納された操作データを取得する(ステップS101)。操作データは、左右のコントローラのボタンやアナログスティック等に対する操作に応じたデータを含む。以降、プロセッサ21は、ステップS101~ステップS105の処理を所定のフレーム時間間隔(例えば、1/60秒間隔)で繰り返し実行する。
【0140】
続いて、プロセッサ21は、操作データに基づいて、プレイヤキャラクタ制御処理を行う(ステップS102)。ここでは、プロセッサ21は、コントローラに対する操作入力に応じて、プレイヤキャラクタPCを仮想空間内で制御する。具体的には、ステップS102では、操作データに基づいて、プレイヤキャラクタPCの移動制御、プレイヤキャラクタPCによる攻撃アクション、プレイヤキャラクタPCによるオブジェクト操作アクション等が行われる。
【0141】
例えば、移動操作入力(例えばアナログスティック6Lに対する方向操作入力)が行われた場合、プロセッサ21は、ステップS102において、プレイヤキャラクタPCの移動制御を行う。
【0142】
また、攻撃アクションのための操作入力が行われた場合、プロセッサ21は、ステップS102において、プレイヤキャラクタPCに攻撃アクションを開始させる。プレイヤキャラクタPCの攻撃アクションの実行中に、当該攻撃アクションが推進オブジェクト又は組立品オブジェクトに当たった場合、プロセッサ21は、当該攻撃アクションが当たった推進オブジェクト又は組立品オブジェクトに含まれる全ての推進オブジェクトを非稼働状態から稼働状態に、又は、稼働状態から非稼働状態に設定する。ここで、例えば、ロケットオブジェクト31c又はロケットオブジェクト31cを含む組立品オブジェクトに対して攻撃アクションが当たった場合、プロセッサ21は、ロケットオブジェクト31cの質量及び慣性テンソルを増大させる。また、気球オブジェクト31e又は気球オブジェクト31eを含む組立品オブジェクトに攻撃アクションが当たった場合も、同様に、プロセッサ21は、気球オブジェクト31eの質量及び慣性テンソルを増大させる。
【0143】
また、プロセッサ21は、ステップS102において、オブジェクト操作アクションに関する処理を行う。具体的には、プロセッサ21は、プレイヤの操作入力に基づいて、仮想空間に配置された動的オブジェクトを指定し、指定された動的オブジェクト31を移動させたり、回転させたり、他の動的オブジェクト31に接続させたりする。
【0144】
次に、プロセッサ21は、オブジェクト更新処理を行う(ステップS103)。ここでは、プロセッサ21は、仮想空間内の各オブジェクト(動的オブジェクト31、プレイヤキャラクタPC、ノンプレイヤキャラクタ等)について物理演算を行うことにより、各オブジェクトの速度、角速度、位置、姿勢等を更新する。オブジェクト更新処理の詳細については後述する。
【0145】
次に、プロセッサ21は、描画処理を行う(ステップS104)。ここでは、仮想空間に配置された仮想カメラから仮想空間を見た画像が生成される。これにより、ステップS101~ステップS103の処理に応じたゲーム画像が生成される。生成されたゲーム画像は、ディスプレイ12又は別の表示装置に出力される。ステップS104の描画処理が所定のフレーム時間間隔で繰り返し実行されることにより、仮想空間内で各動的オブジェクト31が移動したり、プレイヤキャラクタPCが移動したり、プレイヤキャラクタPCが様々なアクションを行ったりする様子が表示される。
【0146】
次に、プロセッサ21は、ゲームを終了するか否かの判定を行う(ステップS105)。例えば、プレイヤによりゲームの終了が指示された場合、プロセッサ21は、ゲームを終了すると判定し、
図19に示すゲーム処理を終了する。一方、ステップS105でNOと判定した場合、プロセッサ21は、ステップS101の処理を再び実行する。
【0147】
(オブジェクト更新処理)
図20は、ステップS103のオブジェクト更新処理の一例を示すフローチャートである。
【0148】
図20に示されるように、プロセッサ21は、今回の
図20の処理において、仮想空間に配置された全てのオブジェクト(動的オブジェクト31、プレイヤキャラクタ、ノンプレイヤキャラクタ)について、ステップS201~ステップS204の処理を行ったか否かを判定する(ステップS200)。
【0149】
ステップS200でNOと判定した場合、プロセッサ21は、まだ処理を行っていないオブジェクトを処理対象として選択する(ステップS201)。
【0150】
次に、プロセッサ21は、処理対象のオブジェクトが推進オブジェクト(例えば、動的オブジェクト31a~31e)か否かを判定する(ステップS202)。
【0151】
処理対象のオブジェクトが推進オブジェクトであると判定した場合(ステップS202:YES)、プロセッサ21は、処理対象の推進オブジェクトの速度の推進力方向成分Sの大きさに応じて、推進力Fを減衰させる(ステップS203)。ここでは、プロセッサ21は、処理対象の推進オブジェクトが発生する推進力の大きさを算出する。各推進オブジェクトには、その種類に応じた推進力が予め定められており、当該予め定められた推進力が、推進オブジェクトの現在の速度の推進力方向成分Sの大きさに応じて減衰される。具体的には、プロセッサ21は、速度・加速度データ132に記憶された前回のフレームで更新された推進オブジェクトの速度ベクトルと、推進力データ133に記憶された推進力の方向とに基づいて、推進オブジェクトの速度の推進力方向成分Sを算出する。そして、プロセッサ21は、推進力算出データ150に記憶された推進力方向成分Sの大きさと推進力Fの大きさとの関係を示すデータを用いて、推進力方向成分Sの大きさに応じた推進力Fの大きさを算出する。推進力方向成分Sの大きさが、当該推進オブジェクトに応じて設定された所定の基準値を超えている場合、プロセッサ21は、当該推進オブジェクトの推進力Fをゼロに設定する。稼働状態と非稼働状態とを有する推進オブジェクトについて、プロセッサ21は、推進オブジェクトの推進力Fをゼロに設定しても、当該推進オブジェクトを稼働状態に維持する。
【0152】
例えば、処理対象の推進オブジェクトが扇風機オブジェクト31aである場合であって、当該扇風機オブジェクト31aが稼働状態である場合、プロセッサ21は、ステップS203において、扇風機オブジェクト31aの速度の推進力方向成分Sに応じて推進力を減衰させる。また、処理対象の推進オブジェクトがロケットオブジェクト31cである場合であって、当該ロケットオブジェクト31cが稼働状態である場合、プロセッサ21は、ロケットオブジェクト31cの速度の推進力方向成分Sに応じて推進力を減衰させる。また、処理対象の推進オブジェクトが帆オブジェクト31dである場合、プロセッサ21は、帆オブジェクト31dに所定の接触判定領域(扇風機オブジェクト31aからの風、又は、仮想空間に吹いている風)が当たっているか否かを判定する。帆オブジェクト31dに所定の接触判定領域が当たっていると判定した場合、プロセッサ21は、帆オブジェクト31dに推進力を発生させる。すなわち、帆オブジェクト31dは、風によって動くことが期待される性質のオブジェクトであるため、風の力による作用に替えて、帆オブジェクト31d自体に推進力を発生させることで、他のオブジェクトよりも風の影響を分かり易くしている。プロセッサ21は、帆オブジェクト31dに推進力が発生している場合、帆オブジェクト31dの速度の推進力方向成分Sに応じて推進力を減衰させる。なお、プロセッサ21は、帆オブジェクト31dに接触判定領域が当たった場合でも、その接触判定領域が、当該帆オブジェクト31dと同一の組立品オブジェクトに含まれる扇風機オブジェクト31aから発生された場合は、当該帆オブジェクト31dに推進力を発生させない。すなわち、プロセッサ21は、帆オブジェクト31dを含む組立品オブジェクトに含まれる扇風機オブジェクト31aから発生された接触判定領域を除く接触判定領域が、当該帆オブジェクト31dに当たった場合、当該帆オブジェクト31dに推進力を発生させる。
【0153】
ステップS203の処理を実行した場合、又は、ステップS202でNOと判定した場合、プロセッサ21は、処理対象のオブジェクトについて他の力、自重を計算する(ステップS204)。ここでは、プロセッサ21は、推進力以外の処理対象のオブジェクトが生じる力(後述するステップS207のオブジェクト同士の相互作用による力を除く)の全てを算出する。例えば、処理対象のオブジェクトが浮力や揚力を発生させる場合、プロセッサ21は、当該浮力や揚力を算出する。また、プロセッサ21は、処理対象のオブジェクトの重力を算出する。また、プロセッサ21は、処理対象のオブジェクトが環境から受ける力を算出する。
【0154】
ステップS204の処理を行った場合、プロセッサ21は、再びステップS200の処理を実行する。
【0155】
ステップS200でYESと判定した場合、今回の
図20の処理において、仮想空間に配置された全てのオブジェクトについて、ステップS206~ステップS207の処理を行ったか否かを判定する(ステップS205)。
【0156】
ステップS205でNOと判定した場合、プロセッサ21は、まだ処理を行っていないオブジェクトを処理対象として選択する(ステップS206)。
【0157】
次に、プロセッサ21は、処理対象のオブジェクトと他のオブジェクトとの相互作用を計算する(ステップS207)。ここでは、プロセッサ21は、処理対象のオブジェクトが他のオブジェクトと接触している場合に、当該接触しているオブジェクトから処理対象のオブジェクトが受ける力、当該接触しているオブジェクトに対して処理対象のオブジェクトが与える力を算出する。ステップS207においては、動的オブジェクト31同士の相互作用、動的オブジェクト31とプレイヤキャラクタPCとの相互作用、動的オブジェクト31とノンプレイヤキャラクタとの相互作用、プレイヤキャラクタPCとノンプレイヤキャラクタとの相互作用が計算される。また、仮想空間に発生された風(仮想空間に吹いている風、扇風機オブジェクト31aからの風等。具体的には風を示す接触判定領域)がオブジェクトに当たったことに応じた力も算出される。
【0158】
例えば、処理対象の動的オブジェクトが他の動的オブジェクトと接続(結合)されている場合、プロセッサ21は、ステップS207において、これら動的オブジェクト間に作用する力を計算する。また、プロセッサ21は、処理対象のオブジェクトと、接続されていない他のオブジェクトとが接触しているか否かを判定し、接触していると判定した場合、これらオブジェクト間に作用する力を計算する。例えば、処理対象の動的オブジェクト31の上にプレイヤキャラクタが乗っている場合、プロセッサ21は、これらオブジェクト間に作用する力を計算する。また、例えば、処理対象の動的オブジェクト31が他の動的オブジェクト31と衝突した場合、プロセッサ21は、これら動的オブジェクト31間に作用する力を算出する。また、プロセッサ21は、処理対象のオブジェクトが仮想空間に発生された風(接触判定領域)と接触したか否かを判定し、接触したと判定した場合に、処理対象のオブジェクトに接触判定領域との接触に応じた力を加える。なお、処理対象のオブジェクトが帆オブジェクト31dである場合、上記ステップS203において、接触判定領域との接触に応じて推進力を発生させるため、ステップS207では接触判定領域との接触に応じた力を加えずともよい。
【0159】
ステップS207の処理を行った場合、プロセッサ21は、再びステップS205の処理を実行する。
【0160】
ステップS205でYESと判定した場合、今回の
図20の処理において、仮想空間に配置された全てのオブジェクトについて、ステップS209~ステップS210の処理を行ったか否かを判定する(ステップS208)。
【0161】
ステップS208でNOと判定した場合、プロセッサ21は、まだ処理を行っていないオブジェクトを処理対象として選択する(ステップS209)。
【0162】
次に、プロセッサ21は、処理対象のオブジェクトに加わっている力に基づく物理演算を行う(ステップS210)。ここでは、プロセッサ21は、処理対象のオブジェクトに加わっている力(S203、S204、S207で算出された力)に基づいて、処理対象のオブジェクトに対して物理演算を行うことにより、当該オブジェクトの速度、角速度、位置、姿勢を算出し、メモリに記憶する。例えば、処理対象のオブジェクトが推進オブジェクトである場合、プロセッサ21は、算出した速度、角速度を速度・角速度データ132として記憶し、算出した位置、姿勢を位置・姿勢データ131として記憶する。また、処理対象のオブジェクトが非推進オブジェクトである場合、プロセッサ21は、算出した速度、角速度を速度・角速度データ142として記憶し、算出した位置、姿勢を位置・姿勢データ141として記憶する。また、処理対象のオブジェクトがプレイヤキャラクタPCである場合、プロセッサ21は、算出した速度、角速度、位置、姿勢をプレイヤキャラクタデータ120として記憶する。
【0163】
ステップS210の処理を行った場合、プロセッサ21は、再びステップS208の処理を実行する。
【0164】
ステップS208でYESと判定した場合、プロセッサ21は、
図20に示す処理を終了する。
【0165】
以上のように、上記実施形態のゲームでは、仮想空間において物理演算に基づいて動的オブジェクトを移動制御する(S210)。動的オブジェクトのうち、推進力の発生を伴い、当該推進力に基づいて移動する推進オブジェクトについて、推進オブジェクトの移動速度が所定の基準を超える場合に推進力が無くなるように、推進オブジェクトの移動速度に応じて推進力を減衰させる(S203)。
【0166】
これにより、推進オブジェクトが、推進力によって加速し続けてゲームにおいて許容できる範囲を超えた速度に到達することを抑制することができる。
【0167】
また、上記実施形態では、プレイヤは、操作入力に基づいて、複数の動的オブジェクトを結合させて組立品オブジェクトを形成することができる。組立品オブジェクトに含まれるそれぞれの推進オブジェクトについて、それぞれの速度に応じてそれぞれの推進力が減衰される。これにより、プレイヤが自由に形成することができる組立品オブジェクトについて、当該組立品オブジェクトに含まれるそれぞれの推進オブジェクトの推進力を減衰させることができ、組立品オブジェクトの運動を適切に制御することができる。
【0168】
また、上記実施形態では、推進オブジェクトの速度の、推進力の方向に沿った成分が所定の基準値を超える場合に、推進オブジェクトの推進力が無くなるように制御される。これにより、推進オブジェクトの速度と推進オブジェクトの推進力の方向が違う場合でも、推進オブジェクトの速度の、推進力の方向に沿った成分が所定の基準値を超える場合は、推進力が無くなるように制御することができる。
【0169】
また、上記実施形態では、推進オブジェクトは扇風機オブジェクト31aを含む。扇風機オブジェクト31aは、稼働状態と非稼働状態とを有し、稼働状態において所定方向に継続的に推進力を発生させる。この扇風機オブジェクト31aの推進力は、扇風機オブジェクト31aの速度の推進力方向成分Sに応じて減衰され、推進力方向成分Sが所定の基準値を超える場合は、稼働状態であっても推進力がゼロに設定される。
【0170】
また、上記実施形態では、扇風機オブジェクト31aは、組立品オブジェクトの一部になっていない場合において、所定の姿勢(例えば、立った姿勢)である場合、稼働状態であっても推進力を発生させない。これにより、所定の姿勢では推進力を発生させないようにすることができ、例えば所定の姿勢を維持させることができる。
【0171】
また、上記実施形態では、扇風機オブジェクト31aは、推進力の他に、仮想空間に接触判定領域(風が当たったか否かを判定するための領域)を発生させ、当該接触判定領域が帆オブジェクト31dに接触した場合に、当該帆オブジェクト31dに対して推進力を発生させる。
【0172】
また、上記実施形態では、帆オブジェクト31dを含む組立品オブジェクトに含まれる扇風機オブジェクト31aから発生された接触判定領域を除く接触判定領域と、帆オブジェクト31dとが接触した場合に、帆オブジェクト31dに推進力が発生される。すなわち、組立品オブジェクトに第2の扇風機オブジェクト31abと帆オブジェクト31dとが含まれる場合(
図15)、帆オブジェクト31dは、第2の扇風機オブジェクト31abから発生した接触判定領域によっては推進力を発生させず、組立品オブジェクトに含まれない第1の扇風機オブジェクト31aaから発生した接触判定領域と接触した場合には、推進力を発生させる。これにより、例えば、同じ組立品オブジェクト内で反発し合う推進力が発生することを防止することができる。
【0173】
また、上記実施形態では、推進オブジェクトのうちのロケットオブジェクト31cは、操作入力に基づいて指定されたタイミング(例えばプレイヤキャラクタPCの攻撃アクションが当たったタイミング)から所定期間、推進力を発生させる。ロケットオブジェクト31cは、他の推進オブジェクトに比べて大きな推進力を発生させる。これにより、短時間で大きな推進力を発生させることができる。また、ロケットオブジェクト31cが推進力を発生させている間、物理演算に用いられる当該ロケットオブジェクト31cの質量及び慣性テンソルが増大される。これにより、ロケットオブジェクト31cが組立品オブジェクトに含まれる場合、組立品オブジェクトに大きな推進力を加えることができる。
【0174】
また、上記実施形態では、推進オブジェクトのうちの気球オブジェクト31eは、仮想空間の上方向に推進力を発生させる。ゲーム処理に基づいて与えられる所定のパラメータ(例えば火力)が大きい程、気球オブジェクト31eの推進力と、推進力がゼロになる所定の基準値とが増大される。また、気球オブジェクト31eが推進力を発生させている間、物理演算に用いられる当該気球オブジェクト31eの質量及び慣性テンソルが増大される。これにより、気球オブジェクト31eが組立品オブジェクトに含まれる場合、組立品オブジェクトに大きな推進力を加えることができる。
【0175】
(変形例)
以上、本実施形態について説明したが、上記実施形態は単なる一例であり、例えば以下のような変形が加えられてもよい。
【0176】
例えば、上記フローチャートで示した処理は単なる例示に過ぎず、処理の順番や内容、判定に用いられる閾値等は適宜変更されてもよい。
【0177】
また、上記実施形態では、推進オブジェクトの速度の推進力方向成分Sが所定の基準を超える場合、推進力をゼロに設定した。他の実施形態では、推進力方向成分Sが所定の基準を超えた場合、実質的に推進オブジェクトの推進力が無くなるのであれば推進オブジェクトの推進力を厳密にゼロに設定しなくてもよい。
【0178】
また、上記実施形態では、推進オブジェクトの速度の推進力方向成分Sの増加に応じて、推進オブジェクトの推進力Fを線形的に減少させた。他の実施形態では、推進力方向成分Sと推進力Fとの関係は、直線ではなく曲線で表されてもよい。推進力方向成分Sと推進力Fとの関係を表すグラフは、直線部分と曲線部分とを有してもよい。また、ゲームの場面に応じて、推進力方向成分Sと推進力Fとの関係を表す直線の傾きが異なってもよいし、曲線の形状が異なってもよい。例えば、ある推進オブジェクトについて、ゲームの第1の場面においては、推進力方向成分Sと推進力Fとの関係は直線で表され、第2の場面においては、曲線で表されてもよい。また、推進力方向成分Sと推進力Fとの関係が直線で表される推進オブジェクトと、推進力方向成分Sと推進力Fとの関係が曲線で表される推進オブジェクトとが用意されてもよい。
【0179】
また、上記実施形態で説明した推進オブジェクトは単なる一例であり、他の推進オブジェクトが用意されてもよい。
【0180】
また、上記実施形態では、プレイヤキャラクタPCのオブジェクト操作アクションによって、複数の動的オブジェクトを接続した組立品オブジェクトを生成した。他の実施形態では、プレイヤキャラクタのアクションによらず、プレイヤの操作に基づいて組立品オブジェクトが生成されてもよい。また、予め用意された組立品オブジェクトが仮想空間に配置されてもよい。
【0181】
また、上記ゲーム処理を行うハードウェアの構成は単なる一例であり、他の任意のハードウェアにおいて上記ゲーム処理が行われてもよい。例えば、パーソナルコンピュータ、タブレット端末、スマートフォン、インターネット上のサーバ等、任意の情報処理システムにおいて上記ゲーム処理が実行されてもよい。また、上記ゲーム処理は、複数の装置によって分散実行されてもよい。
【0182】
また上記実施形態及びその変形例に係る構成は、互いに矛盾しない限り、任意に組み合わせることが可能である。また、上記は本発明の例示に過ぎず、上記以外にも種々の改良や変形が加えられてもよい。
【符号の説明】
【0183】
1 ゲームシステム
2 本体装置
3 左コントローラ
4 右コントローラ
21 プロセッサ
31 動的オブジェクト
32 接続オブジェクト
40 飛行機オブジェクト
41、42、43、44 組立品オブジェクト