親オブジェクトについて【GameMaker】
親オブジェクトについて
GameMakerを使用していて、
個人的に親オブジェクトを使う事があります。
c++言語で言えば、継承などになると思いますが、
GameMaker(GameMakerStudio2)で、
「親オブジェクト」を使用すると便利になる事があります。
1:複数のオブジェクトの中から近いものを容易に探せる。
2:オブジェクトの種類ごとでも探せる。
3:コードが簡易的に出来る。
4:追記:個人的な使い方。
と思っています。
例えば、
シューティングゲームを作成していて、
空中ボス、地上ボス、空中中型機、地上中型機、空中小型機、地上小型機、
などの全ての中から最も近い場所に居るキャラを探したい。
っという時に、
1:上記のオブジェクトの「親オブジェクト」を設定する。
名前は仮に、obj_enemy_foundersとします。
中身はカラッポで良いので、obj_enemy_foundersオブジェクトを作成して、
obj_enemy_foundersを親として設定します。
そして、
instance_nearest(x,y,obj_enemy_founders)
で検索をすると、
「obj_enemy_founders」を親として指定してあるオブジェクトの全ての中から、
x y から最も近い位置に居るオブジェクトが探せます。
ゲームの中でobj_enemy_foundersは登場しませんが、
こういう感じの使い方をする事で、
検索が容易になるので、コードも楽になります。
敵の元祖→ボスの元祖→地上ボス・空中ボス
敵の元祖→ボス以外の元祖→中型機の元祖→地上中型機・空中中型機
敵の元祖→ボス以外の元祖→小型機の元祖→空中小型機・地上小型機
などと設定する事で、
ボスの元祖で検索をすれば、ボスの中から最も近いものが探せて、
ボス以外の元祖で検索すれば、中型機や小型機の中から探せます。
敵の元祖で検索をすれば、全てのキャラの中から近いものを探せます。
私はこれをどういう理由で使っているのかと言うと、
ホーミングミサイルやレーダーで使用しています。
敵の元祖→ボス以外の元祖→ターゲットの元祖→空中のターゲット・地上のターゲット
などの関連付けをしてある状態で、
ターゲットの元祖で検索をすれば、
近いターゲットに照準を合わせたり、レーダーに表示させたり出来ます。
ホーミングミサイルの場合、敵の元祖で検索をすれば、
最も近い位置に居る敵を狙いますし、
特定のオブジェクトを専用に狙う仕様にも出来ます。
親オブジェクトは便利なので、
結構使う事が多いです。
個人的なメモとして記しています。



追記:
親オブジェクトの使い方として、
「後から親を設定する。」という考え方で使っています。
親オブジェクトは、中身はカラッポで使っています。
順番としては、
1:敵を作成する。
obj_enemy
2:地上物も作成する。
obj_ground
3:どちらも居る状態で、近い位置のものを容易に調べたい。
obj_founder という空オブジェクトを作成して、
1と2のオブジェクトの親として設定して、
instance_nearest(x,y,obj_founder);
などを使って検索する。
などとするだけで、
幾つの種類の敵やキャラやオブジェクトがあったとしても、
1行で検索が出来ます。
これを知っているだけで、
ボスオブジェクトの周りを周回するとか、
ボスを守るとか、
大ボスが居ればボスより大ボスの防御を優先するとか、
そういう組み方も容易になると思います。
4:個人的には、以下の表のような構成でも使っています。

この表で、末端のオブジェクトのみ、変数や初期化処理、毎フレーム処理、描画、などが記述されています。
それ以外は、中身はカラッポで、種別ごとに容易に探索が可能になるように、
こういう関係になっています。
※この表は、マインドマップで作成しています。