MMF2 でループ処理を考える #1
プログラム一般で用いる繰り返し処理(ループ)は MMF2 の標準機能として搭載されている「 Fast Loop (高速ループ \ ファーストループ)( ※ 1 )」の使用が一般的です。
これ以外だと XLua のファンクションを使ったものとか、サードパーティ製のエクステンションとして「 Super Function 1.1. ( ※ 2 )」、あるいは MMF2 日本語版のユーザが羨望の眼差しで見つめる?「 ForEach Object 」などがあります。
当ブログには XLua は専用のカテゴリがあるので XLua はそちらで説明するとして今回は Xlua を除いた 三 つで MMF2 が扱うループ処理について話を進めていきます。
( ※ 1 )画像の「 Fast Loop Object 」は日本では未発売の TGF 1 シリーズなど過去製品との互換性のために残されています。通常使用しません。MMF2 には標準機能として「高速ループ」が搭載されているため厳密には「高速ループ = Fast Loop Object 」ではありません。
( ※ 2 ) Super Function1.1 は MMF2 用のエクステンションです。Super Function1.0 は MMF1.5 用のエクステンションでこちらは表記がベータ版のままですが、Super Function1.1 に関してはバグフィックスとその後コード内容の確認を Francois が行っているようなので完成版だと思います( 筆者の環境だとアイコンが古いままの気がする )。話の都合で今回取り上げましたが、筆者はこれを普段使いません。どうせ SWF をサポートしていないのなら筆者は慣れている XLua を使います。
ループ処理は必須の機能だと思うのですが、PC 用は拡張機能も充実しているけどエクスポータで利用する場合に制限無く使えるエクステンションは選択肢が少ないことに気がつきます。例えば SWF 出力の場合使えるのは高速ループ以外だと「 ForEach Object 」しかありません。
るーぷ
LOOP 【 ループ 】とは? |
正真正銘の初心者はゲームループと高速ループの区別がつかないかもしれません。その辺をまず考慮して参考のために外部リンクを貼ります。
参考 URL :イベントドリブンとゲームループ
上記リンクの内容は MMF2 について語ったものではありませんが、自分のゲームプログラミング知識に自信が無い方や以下の言葉の意味がさっぱり分からない場合、まず上のリンクを読んで見てください。
- ゲームループ
- イベントドリブン
- フレーム数
- FPS ( Frame Per Second )
MMF2 で作られるアプリケーションは「フレームレート固定のメインループ」=「ゲームループ」として動作するように作られています。
そして「高速ループ」や「 ForEach 」というのは、この「ゲームループ」内でさらに繰り返し処理を実行する場合に用いられる必須機能のことです。
繰り返し処理というのは、「決められた回数」や「定められた条件」を満たすまでえんえん同じ処理を繰り返し行う場合に用いられます。一般的なプログラム言語で言う「 for 」に相当するのが MMF2 の「高速ループ」の正体です。
これに対して「 ForEach Object 」は「拡張された for 」などと呼ばれるもので、基本は配列要素に対する繰り返し処理を行うもの、ですが MMF2 の場合はオブジェクト・インスタンスの数などを要素にしてループ回数を決めてインスタンスに対してループ処理を行う機能のことです。
( ※ 3 )
「 ForEach 」はバージョンチェック型インストーラで配布されており、このエクステは日本語版 MMF2 にはインストールできません。初心者用のチュートリアル動画として評判が高い Mr.グロテスクさんの動画で「 ForEach 」は日本でも紹介されていました。講座 18 : 動画後半の動作サンプル(通し番号を使わずに選択したオブジェクトだけ破壊)については ForEach を使わなくても変数代入だけで簡単に実現できます。→検証用サンプル
「高速ループ」「 Super Function 1.1 」「 ForEach 」など共通して MMF2 のループ処理はまずループに名前(識別子)を付けることから始まります。
ここから各エクステンションの差が出るのですが、まず「高速ループ」の場合、ループインデックスは 0 から始まる。これは変更が効かない。
「 Super Function 1.1 」は任意の数からインデックスをスタートできる上に増加ステップを設定できる(実際動かしたがステップを筆者はうまく働かすことができなかったため個人的には未確認とす)。
「 ForEach 」は要素でループ回数を決定する。だからループ名を付けた後、他 二 つはループ回数を直接数字で指示するのですが「 ForEach 」に関してはオブジェクトかオブジェクトグループを指定するという形を取っています。これは例えばオブジェクトグループならグループに含まれるオブジェクトの総数が「要素」として抽出され、それがそのまんまループの回数として適用されるのです。
こんな具合にそれぞれ特徴があります。
「高速ループ」が一番シンプルな仕様になっているのは利に適うのか。あるいは MMF2 のループ処理で重要なのはもはや機能よりも「作成するバイナリの種類によって制限が無いものを選ぶ」方が重要かもしれません。
つまり MMF2 界隈で人気の高い各エクスポータで共通して使えるかどうかが大事になってきます。