【GDevelop】「条件を反転」した時によくある勘違いと「ではない」の使い方
GDevelop のイベントでは条件の結果を反転させることができます。
これはプログラミングで言うところの NOT 演算子と同じ、と思いがちですが、GDevelop の条件は単なる真偽値(True / False)の評価だけではなく、オブジェクトが絞り込まれる、という特徴があることを忘れてはいけません。
(NOT 演算子とは真偽値を真なら偽に、偽なら真に反転させる演算子です)
例えば、次の画像のようにイベントが組まれていたとします。
条件が反転されていることに注意してください。
これを見た時に「なるほど、条件は反転されているから、カーソルが WoodCrate 上にない時だけ Tank が移動して、逆にカーソルが WoodCrate の上にある時は実行されないんだな。完全に理解した!」
などと思ってはいけません。
実はこのイベントのシーンはこうなっています↓
なんと WoodCrate は複数あったのです!😅
よく訓練された GDevelop ユーザーであれば、この時点で WoodCrate の上にカーソルがあっても、先程のイベントは実行されてしまうことに気が付くはずです。
どういうことかと言うと、実は先程のイベントは……
「カーソルが WoodCrate 上にない時に Tank が移動する」
という事ではなく、
「カーソルが上にない WoodCrate に絞り込んで Tank を移動する」
という解釈が正解になります。
つまり、条件の最終的な結果が反転するのではなく、反転しているのは個々のインスタンスの評価である点に注意してください。
これは「カーソル/タッチはオブジェクト上にある」条件だけでなく、他の条件でも同様です。
そのため、実際にはどちらかの WoodCrate 上にカーソルが乗っていても、他にカーソルが乗っていない WoodCrate があるので、このイベントが偽(False)になる事はありません。(スマホであればマルチタッチで条件を満たすことができますが……)
条件を反転させた時どのような効果に変化するか、よく確認してから反転を利用するようにしましょう。
単に結果を反転させたい場合は?
では、上記のように絞り込みを反転するのではなく、単に結果を真偽値として反転させたい場合は、どうしたら良いのかというと……
「ではない」を使います。
この「ではない」は副条件の結果を真偽値として反転します。
例えば先の例で、「カーソルが WoodCrate 上にない時に Tank が移動する」を実現したい場合はこのようにします↓
少しややこしいですが、条件で絞り込んだ結果 WoodCrate が 1 つ以上ある場合は「真」であると判定され、それが「ではない」によって反転されることで、結果「偽」という判定になります。(つまり Tank は動かない)
逆に該当する WoodCrate がない場合は「偽」であると判定され、それが「ではない」によって反転されることで、結果「真」という判定になります。(Tank 動く)
このようにすることで、たとえ WoodCrate が複数あっても、どれかひとつでもカーソルが上にあれば Tank は止まるというイベントを作ることができます。
「条件を反転」と「ではない」の違いと仕組みを理解して、うまく活用していきましょう😉
コメント
コメントを投稿