MMF2の基礎概念6


関係演算子と論理演算子と算術演算子

「プログラム知識がいらない」というキャッチフレーズが売りの MMF2 でしたがこの辺の説明を読んで理解するためには初歩的なプログラミング言語の知識が必要になります。ただし MMF2 はプログラミング言語ではない上にオーサリングツール独自の仕様があるので、一般的なプログラムの知識や手法・作法と一致する部分と一致しない部分がそれぞれあります。あと、この手の解説はC言語関連の説明が Web 上ではやはり多いのですが、当ブログではあらゆるプログラミング言語と比較しても基礎的な部分でほぼ共通するスクリプト言語としての仕様をもつ「 Lua 」の学習を前回お勧めました。が、別に Lua じゃなくても理解してその知識を応用できるなら学習のための言語は何でも良いです。ただし C 言語よりも学習コストが低いスクリプト言語がやっぱ楽で良いと思います。また今後も都合上このブログ(基礎概念)では MMF2 の機能を説明する際に、スクリプト言語の概念や仕組みを借りて説明することがあります。その場合一般的に「 Lua 」で説明しますが、あるいはスクリプト言語の学習なら「 Lua 」以外にも「 Ruby 」や「 Python 」なんかもお勧めできます。Luaよりも日本語で読める参考書や資料が多いので場合によっては「 Ruby 」や「 Python 」の方が手っ取り早く習得できるかもしれません。

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_basic6_01

関係演算子

この辺りは算術演算子と合わせて見ても充実しており、一般的な計算等は機能的に不足は無いはずです。

算術演算子

和(+)、積(*)などいわゆる算術・四則演算子等。MMF2 では Expression Editor (数式エディタ)で計算に用いる記号です。大抵のものなら扱えます。
次に論理関係演算子。

論理関係演算子: AND OR NOT

mmf2_basic6_02

論理関係演算子

mmf2_basic5_03

論理積(AND)

MMF2 は「条件」が二つ以上並んだ状態を論理積( AND )とする暗黙知があります。二つ以上の条件があって、条件すべて値が真(もしくは等しい時)・・・という結果を受けてアクションが実行される・・・だから上のスクリーンショット状態だと「 Enter 」と「 Space 」を両方同時に押さないとこのイベントは実行されないということになります。そして今回は「どちらかを押した時」という条件を作りたいのでここに「 OR <論理和>」を挿入します。下のスクリーンショットをご覧ください。

mmf2_basic6_04

MMF2 の OR は「フィルタ」と「論理和」の二つありますが通常「論理和」の方を使います。フィルタは使い道が大抵思いつかないので一般的な「 OR (論理和)」の使用がトラブルも無く良いと思います。

(※ OR Operator は build 244 から付いた機能)

mmf2_basic6_06

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 じゃないです”


長くなりましたがここでまとめます

  1. MMF2 は計算をそつなくこなすけど、条件分岐と関数化処理が弱点
  2. 弱点をサポートするエクステの利用にも出力するバイナリの形式を考えないといけない
ざっと見ていきましたが関係演算子と算術演算子の充実は MMF2 の強みです。しかし論理関係演算子がやや怪しい(説明不足がある)、それから if を使ったら else 等が素直に使えないので多少複雑な分岐制御をこなすためにはこれが不便です。ネスト(入れ子構造)は「イベントグループ」という概念に置き換わっていると言えます。同じように for 、 while 、 repeat と言った一般的なループ処理が MMF2 では独自の呼び名「高速ループ/(ファーストループ・ Fast Loop )」に置き換わっています。あと MMF2 は関数化処理がやはり標準ではできません。いくつか不足を補うためのエクステンションもあるのでまったく使えないわけではありませんが、多分岐制御や関数化処理の手続きが煩雑になるのでやはり MMF2 はこの部分が弱いかなと感じています(できないのではなくて作業が面倒くさいのです)。そのため少々入り組んだ条件をこなすためにこのブログの筆者は XLua というエクステンションを使用しています。XLua もしくは Lua スクリプトの使用は MMF2 よりも一歩踏み込んだプログラミングの知識が必要となります。そして XLua も SWF 出力だと利用できないので、XLua を使うということはすなわち PC 専用(ウィンドウズ)のアプリ形式を作っているということになります。

最近 MMF2 (特に海外での動き)では SWF エクスポーターが、つまり Flash 出力用途に MMF2 を使用する関連のフォーラムが盛り上がっています。この Flash 出力に使用できるMMF2エクステンションはまだ限定されていて、もしも SWF 出力用途で分岐条件や関数化処理の補完に使うエクステンションが必要なら SWF エクスポーターに対応しているかをまず調べなくてはなりません。つまり作りたいアプリのバイナリ形式に応じて使用するエクステンションは変わる、あるいは Lua スクリプトは使えなくなります。

MMF2 はプログラミング言語じゃないし、むしろプログラム知識の乏しい人や非プログラマでも簡単にゲームやアプリケーションが作れるようにと工夫を凝らしたソフトなので、分かりにくい部分や難しい部分をなるべく GUI やら自動処理やらで(隠蔽して)やさしく誘導してくれています。だから誘導に従って作る内は(目隠しされた状態でも)大変簡単に感じるのですが、このオートパイロット状態から抜け出していざ自分で操縦桿を握り操作しようとすると、MMF2 の「やさしく誘導」の部分や「 MMF2 的な仕様(とその説明不足)」が自立の邪魔をするように感じられます。MMF2 は難しい処理のデフォルメをしてあるからプログラム知識不足の人にも分かりやすくて作りやすい部分があるし実際ゲームもそうして作れる、だけど MMF 流で単純化してしまったから多少凝ったことをするためには逆に不便じゃないかなこれという仕様も残してしまっています。



基礎概念:リスト
12345678910
111213141516171819Last

前へ戻る 次へ進む