【GDevelop】「オブジェクトを削除する」アクションの知っておくべき特性
あらゆるゲームと状況下で多用されるであろう、「オブジェクトを削除する」アクションですが、実は他のアクションとは少し違った特性があり、知らないとアレレ?ってことになるので、その点について解説します。
※ イベントってなに?アクションってなに?という方は、先に「GDevelop の条件とかアクションって何?どれのこと?」をご覧ください。
実は即削除していない
これはどういうことかというと、「オブジェクトを削除する」アクションが実行されたイベントが終わるまで対象のオブジェクトは削除されていない、ということです。
具体的な例を挙げて説明しましょう。
↓これは、GreenTank がひとつ配置されているだけのシーンです。
そしてそのシーンのイベントは次のようになっています。
では、このシーンをプレビューして、シーンをクリックすると、背景色は何色になるでしょうか?
一見すると(というか普通のプログラミング的に考えれば)、最初に削除アクションを実行しているので、GreenTank の角度も変わることなく、さらにオブジェクトの数も 0 になっているので、背景色は赤(255;0;0)になりそうなものですが、実際にはなんと青色(0;0;255)になります。
そして背景が赤くなるのは、2回目のクリックからです。
普通、アクションは実行したとたん効果を発揮しますが、上記のことから「オブジェクトを削除する」アクションは、即座に対象を削除するアクションではないことが分かります。
(角度を 90 度にしているアクションは、即座に効果を発揮し、続く条件で真(True)と、評価されている点も見逃さないでください)
では、どのタイミングで削除されるのかと言うと、それは「オブジェクトを削除する」アクションを実行したイベントが終わった時です。
例えば次のように、削除アクションを別のサブイベント(赤矢印)に分ければ……↓
削除アクションを実行したイベントが終わってから、オブジェクトの数をチェックしているので、結果は 0 個の真(True)となり、背景色は赤色となります。
続く角度をチェックしている条件では、既に対象が存在していないので偽(False)となり、背景を青にするアクションは実行されません。
このように組むことで、最初の例とは異なる結果になります。
なお、最初の例を見ると分かるように、サブイベント中も親イベントは実行中とみなされます。
(絞り込みがサブへ引き継がれることと同じようなイメージです)
その点にも注意してください。
なんでこんな仕様なの?
わかりませんw😅
強いて挙げるなら、アクションの順番が多少変でも、なんやかんやうまく動作してくれるようにするため……とかでしょうか。
例えばこんな事ができます↓
最初に対象を削除していますが、サブイベントで削除対象のオブジェクト変数を参照したりできます。
特性のおかげで、わざわざ最後に削除アクションを置く必要が無いわけです。
まぁメリットはこれくらいでしょうか🤤
もし「他にもメリットあるよ!」という方は教えて下さい😉
コメント
コメントを投稿