縦スクロールシューティング07

改造版サンプルの説明:イベントグループ

オリジナルに対して改造版サンプルはなるべく小まめにイベントグループを活用して作ってあります。イベントグループを活用するのは現時点ではそれほど意味はありませんが、将来的に一つのゲームを作る場合、このイベントグループの活用が重要な意味を帯びてくる場合があります。イベントグループは用が無いときは「イベントグループを非アクティブにする」という命令を使って内部的に非アクティブにしておきます。こうしておけば特定の機能を意図的にオンオフしたりするのが楽になります。例えばデバッグ用のショートカット部分をフレーム開始時に無効にしたい場合はイベントグループの「編集」から「フレーム開始時にアクティブ」のチェックボックスを確認して、この設定をオフにしておけば良いでしょう。そしてMMFアプリケーションの実行中にデバッグ用ショートカットを有効にしたい場合は特定のキー押しに対してイベントグループのアクティブ化という命令を組むという具合に使えます。

改造版サンプル:イベントエディタ画面

改造版サンプル:イベントエディタ画面

イベントグループのアクティブ化設定等

イベントグループのアクティブ化設定等

イベントグループを使うとイベントエディタの見た目がすっきりします。そして特定の命令と特定の条件は特定のイベントグループに、という作り方を徹底して実践するとデバッグするときに大変楽になります。例えば今回は大まかに2つ、「キーコントロール」と「移動とコリジョン」で分けてあります。

大別されたイベントグループ

大別されたイベントグループ

なんらかの事情でキーコントロールをオフにしたい場合「コントロール\control」イベントグループをオフにしてXY移動量を0にする(XY移動量の定義を0にする)だけで完全にキー入力からの操作を不能にすることができます。あるいは親イベントグループを作ってその内にこの二つのイベントグループを子として格納し、必要に応じて親イベントグループをオンオフするというやり方も考えられます。

そしてイベントグループをオフにすれば中に含まれている何十行という条件もたった一行(イベントグループがアクティブか否か)の判定だけであとはぜんぶスキップ処理されることになるので、非アクティブにしてある時はMMFアプリケーションのイベント処理にかかる負担をすこしでも減らせる可能性があります。あるいはMMF2で作る小規模なゲームだとこんなの気にする必要が無いのですが、中規模くらいに処理が拡大する可能性を考えるとイベントグループは意識して最初から活用した方が良いと思います。

しかし「移動と衝突判定(move and collision)」は高速ループを使って処理を一体化してあるので、移動と衝突判定は個別のイベントグループ使って切り離すよりこれはフラグで管理したほうが楽だと思ったのでフラグを用いています。

コリジョン部分のイベントとフラグ

コリジョン部分のイベントとフラグ

フラグと変数(数値型)は何が違うのか

アクティブオブジェクトが扱える「内部フラグ」は「数値型変数」とは別物です。あるいはMMF2的解釈なら数値型変数は-2147483648 / +2147483647の整数が扱えるけど、フラグは0か1(無効:false、有効:true)しか扱えないよ、と覚えても構いません。フラグは単純な条件判断をする際活用されます。変数のように計算用ではありませんし、変数のように膨大な数を記憶することもできません。逆に言うと数値型変数はフラグのように扱うこともできるけど、フラグはそんな器用なことはできません。その代わりフラグには単純な用途にふさわしい処理の軽さがあります。
新規条件からフラグの有効\無効を判定

新規条件からフラグの有効\無効を判定

参考外部URL:Wikipediaから「フラグ

MMF2のアクティブオブジェクトなどが持てる「内部フラグ」は変数と違って通常の方法だと固有の名前が付けられません。「内部フラグ0~31」とか番号で区別するのが一般的で、気軽に使えるので筆者もフラグはよく使うのですが、あまりにも気軽すぎて「はて、あのフラグは何番だったかしら?」とか結構忘れてしまいがちです。そこで内部フラグに独自の名前をつける変則的なアプローチもありますが、これを試してみるか、あるいはどのような方法であれフラグ管理は地道にメモを取ることをお勧めします。

フラグの有効\無効\切り替え

フラグの有効\無効\切り替え

参考外部URL:テクニック集/内部フラグに無理矢理名前を付ける
このやり方は内部フラグにただ名前を付けるだけではなく、wikiの下コメント欄にも書いてあるように「定数を変更することでフラグ番号を切り替えることができる」という点でも便利な方法です。→自作八方向にこのフラグ管理法を当てはめて作ってみた例: