関係演算子と論理演算子と算術演算子
MMF2 ユーザーにもスクリプト言語の学習をお勧めするのは、 MMF2 を理解する上でなんらかの開発用言語をある程度でも嗜んでおいた方が理解が速いからです。あと MMF2 には日本語の有力な書籍や参考書が現時点ではありません。しかしスクリプト言語なら参考書は豊富にあるので、そこで学んだ知識は MMF2 でもちゃんと応用が効きます。
参考(外部リンク):Lua 入門講座
条件式
MMF2 で【「新しい条件」の追加】というのはプログラミング言語チックに言い換えると
【「条件式 if 」の追加】と同義となります。一般的な条件式 if の構造は
if <条件> <条件が真> then <実行される式> else <条件が偽> then <実行される式> end
こんな具合になってるのですが、MMF2 はこの「 else 」を通常使うことができません。(※使えるようにするifelseネストエクステンションというのもあるのですが一般的ではありません)。真と偽で実行文を変える if else の内、else が MMF2 は標準で使えないというのはどういうことになるのか Lua を使って比較して考えてみましょう。
[ Lua ]
if A==1 then print(“変数Aは1です”) else print(“変数Aは1じゃありません”) end
[ MMF2 ]
if 変数 A == 1の時、文字列表示”変数 A は 1 です” end
if 変数 A = 1の時、文字列表示”変数 A は 1 じゃありません” end
MMF2 は else が無いので更に複雑な条件分岐はどんどんイベント行が増えてソースが見難くなり手続き・作業量も多くなります。でも頑張ればできるから頑張れば良いのですが、通常のプログラミング言語の多分岐選択制御に慣れてる人はこれが苦痛になります。
関係演算子
この辺りは算術演算子と合わせて見ても充実しており、一般的な計算等は機能的に不足は無いはずです。
算術演算子
和(+)、積(*)などいわゆる算術・四則演算子等。MMF2 では Expression Editor (数式エディタ)で計算に用いる記号です。大抵のものなら扱えます。
次に論理関係演算子。
論理関係演算子: AND OR NOT
MMF2 は「条件」が二つ以上並んだ状態を論理積( AND )とする暗黙知があります。二つ以上の条件があって、条件すべて値が真(もしくは等しい時)・・・という結果を受けてアクションが実行される・・・だから上のスクリーンショット状態だと「 Enter 」と「 Space 」を両方同時に押さないとこのイベントは実行されないということになります。そして今回は「どちらかを押した時」という条件を作りたいのでここに「 OR <論理和>」を挿入します。下のスクリーンショットをご覧ください。
MMF2 の OR は「フィルタ」と「論理和」の二つありますが通常「論理和」の方を使います。フィルタは使い道が大抵思いつかないので一般的な「 OR (論理和)」の使用がトラブルも無く良いと思います。
(※ OR Operator は build 244 から付いた機能)
MMF2 の論理否定( NOT )はやや中途半端な機能です。なぜならば「マウスポインタとキーボード」など一部には使えるが、他は使えないものの方が多いからです。NOT が使えるものはすなわち返りがブーリアン ( Boolean )ということなんですが、エクステンションごとにどれが論理否定を使えるのか( ブーリアンなのか)最初はよく分からないのです。
一応ヘルプファイル(英語版)には「 Condition negation 」という項目があって、そこである程度のエクステンションが対応していることは分かるのですが、キーコントロール関連だったら全部使えると言うわけでもないし結局試行錯誤しないといけないのでエクステンションの数だけ試行錯誤があるかと思うとうんざりしてきます。だから最初は「 NOT ?使えたらラッキー?」くらいに思った方が精神的に楽で良いです。でも前述の通りキーコントロール関連のエクステンションでは使えるパターンがやはり多いです。特に「キーダウン、アップ」や「オブジェクトと背景の重なり判定」などは論理否定が普通に使えるので「この辺は NOT が使えるはず」というジャンルは覚えておくと良いかもしれません。おまけとして以下に Lua で Not の使用例とその結果を書いておきます。
Lua での(NOT)使用例 # 1
【文】_G.A = nil
【文】if not A then print(” A は nil です”) end
【結果】:”A は nil です”
【解説】:(グローバル)変数 A (の boolean )が「 false 」の時に論理否定( Not )だから、(式は false の時 True と評価されてこの例では True となる)、このとき「 A は nil です」と print される。
Lua での(NOT)使用例 # 2
【文】_G.A = 0 or 1
【文】if not A then print(“Aはnilです”) end
【結果】:(なにも出力されません)
【解説】:(グローバル)変数Aに値が代入されたため、条件が満たされないからprintされません。Luaは値が0でもfalseとはなりません。
ついでにもういっちょ
【文】_G.A = 0
【文】if not A == false then print(“A は nil じゃないです”) end
【結果】:”A は nil じゃないです”
長くなりましたがここでまとめます
- MMF2 は計算をそつなくこなすけど、条件分岐と関数化処理が弱点
- 弱点をサポートするエクステの利用にも出力するバイナリの形式を考えないといけない
最近 MMF2 (特に海外での動き)では SWF エクスポーターが、つまり Flash 出力用途に MMF2 を使用する関連のフォーラムが盛り上がっています。この Flash 出力に使用できるMMF2エクステンションはまだ限定されていて、もしも SWF 出力用途で分岐条件や関数化処理の補完に使うエクステンションが必要なら SWF エクスポーターに対応しているかをまず調べなくてはなりません。つまり作りたいアプリのバイナリ形式に応じて使用するエクステンションは変わる、あるいは Lua スクリプトは使えなくなります。
MMF2 はプログラミング言語じゃないし、むしろプログラム知識の乏しい人や非プログラマでも簡単にゲームやアプリケーションが作れるようにと工夫を凝らしたソフトなので、分かりにくい部分や難しい部分をなるべく GUI やら自動処理やらで(隠蔽して)やさしく誘導してくれています。だから誘導に従って作る内は(目隠しされた状態でも)大変簡単に感じるのですが、このオートパイロット状態から抜け出していざ自分で操縦桿を握り操作しようとすると、MMF2 の「やさしく誘導」の部分や「 MMF2 的な仕様(とその説明不足)」が自立の邪魔をするように感じられます。MMF2 は難しい処理のデフォルメをしてあるからプログラム知識不足の人にも分かりやすくて作りやすい部分があるし実際ゲームもそうして作れる、だけど MMF 流で単純化してしまったから多少凝ったことをするためには逆に不便じゃないかなこれという仕様も残してしまっています。