メインコンテンツへスキップ

親オブジェクトについて【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:個人的には、以下の表のような構成でも使っています。


    画像
    オブジェクトの親子関係

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

    あなたへのおすすめ