【GDevelop】式の中に登場するオブジェクトは絞り込みの対象じゃないゾ!

GDevelop の「イベント」を正しく理解しよう」のページでも解説したように、GDevelop のイベントは、条件でオブジェクトの絞り込みをしてくれるのですが、実は絞り込まない場合もあるのです😅

それは、オブジェクトが式の中に登場している場合です。

ちなみに「式」とは、条件やアクションの入力画面で  が横にくっついてる欄に入力する文字とか数のあれですw(正確には文字列の場合は「文字列式」です)

では早速、具体的な例を挙げてみましょう。

例えばこんなシーンが有ったとして↓

こんなイベントを組んだとします↓

条件で GreyTank1 の X 座標が 480 より小さいかを判定しています。

一見すると、X 座標が 480 より小さい GreyTank1 に絞り込まれ、その条件を満たす左の二輌だけが削除されるように見えますが、実際には全ての GreyTank1 が削除されます。
(またはどの GreyTank1 も削除されません。理由は後記)

なぜなら、ここで参照されている GreyTank1 が絞り込みの対象ではないためです。

実は使用している条件が「二つの数値を比べる」であり、GreyTank1 はその式の中で参照されています↓

そのため、GreyTank1 は絞り込みの対象では無いのです。

また、この条件の GreyTank1 とは、三輌あるうちの(GDevelop の内部的に)最初の一輌のみを指しています。

もし、その最初の一輌の X 座標が 480 より小さいなら、全ての GreyTank1 (絞り込まれていないため)が削除されるし、480 以上なら条件を満たしていないので、アクションが実行されることはありません。(つまりどの GreyTank1 も消えない)

上記の例では、条件「二つの数値を比べる」ではなく、オブジェクトがもつ条件「オブジェクトの X 位置を比べる」を利用すれば、絞り込まれるようになります↓

しかし、必ずしも希望する条件をオブジェクトが有しているとは限りません。

例えばオブジェクトのポイント位置(PointX() や PointY())を比較する条件は、今のところ用意されていません。

その場合は、条件「二つの数値を比べる」を利用することになりますが、その式に登場するオブジェクトは絞り込みの対象ではありません。

では、どうすれば良いかというと、次の画像のように「インスタンスごとに繰り返す」イベントと組み合わせ、個別に判定することで希望する処理を実現できます。

今回の例のように単純な条件であれば、あまり見落とすこともないかと思いますが、より複雑な条件を組んでいるときに、うっかり絞り込んでいるつもりになって、「あれー?おっかしいなー……」などと言いながら貴重な休日をまるまる消費した私のようになってしまわないようご注意ください😭

コメント

このブログの人気の投稿

【GDevelop】セーブデータは暗号化しよう!

GDevelop の「イベント」を正しく理解しよう

GDevelop 5.3 がリリース!なので、ここ最近(2023年1月~2023年11月)の GDevelop バージョンアップまとめ