MMF2 の基礎概念 17


オブジェクトの可変変数への代入方法を考える

MMF2 の「通し番号」というのはオブジェクトが保持する可変変数( Alterable Values )に対する「連番代入」機能です。オブジェクトの数が 10 個なら 10 個のオブジェクトの変数 A ~ Z のいずれかに対して、MMF2 のオブジェクトが持つ内部番号が若い順に「連番」を発行・それを代入します。要するに変数に対する一括代入機能なので似たような処理を Lua のコンソールで出力すれば以下のように表現できます。

連番出力

MMF2 の通し番号を Lua で表現してみた

MMF2 の通し番号処理

MMF2 の通し番号処理

MMF2 のこの暗黙のループ処理を「アクションループ」と呼びます。「アクションループ」を使えば一括して乱数を代入したり、変数群に一括して同じ値を代入できます。

変数に対する一括代入

変数に対する一括代入

通し番号を工夫しよう

ところで連番といえば普通は「 1、2、3..」ですが、この連番を場合によっては「 3、2、1 」としたい場合や、「 0、1、0、1 」とかしたい場合はどうしたら良いでしょうか。

「逆順」については前回記事でも触れました。

まず通し番号を普通に振ってから、次にオブジェクト総数に通し番号の開始数を足し算して、足した値から実際に割り振られた通し番号を引き算してあげれば「逆順」が求められます。

(オブジェクト総数+連番開始数) - 通し番号 = 逆順

逆順を求める

オブジェクト総数に通し番号の開始数を足したその値から割り振られた通し番号を引き算する

「 0、1、0、1 」については算術演算子の「 Mod (剰余演算 = 割り算の余りだけを示す記号)」を使います。これも先に変数には通し番号をあらかじめ振っておきます。次に変数に割り振られた通し番号に対して 例えば 1 Mod 2 とすれば、通し番号が奇数の時に余りは常に 1 、偶数の時は 0 となります。通し番号を開始時に 0 から振れば「 0、1、0、1 」となり 1 から開始すれば「 1、0、1、0 」となります。

1_mod_2

通し番号と Mod を用いた計算結果

実際の使用例

「変数への代入と判定」をテーマにしたサンプルを色々作ってみました。全 7 種類。

処理が不十分でおかしな動作をする部分もありますが、変数への代入と活用方というテーマで作られたサンプルなので至らない部分はどうぞご容赦くださいませ。難易度の低いものはイベントで 10 行とか 20 行程度です。

アクションループ:動作サンプル一覧
難易度 スクリーンショット 内容説明 Download
上級?
shootingstar

シューティングのデモ

イベントが約 90 行近くあり、変数の使い方もやや複雑。特徴は複数の「識別番号」を利用してオブジェクト動作を指定している点。一つのオブジェクトが「識別番号 = 通し番号」を 3 つ持っていて、3 つの識別番号を切り替えながら動作も切り替えていきます。フラグや変数管理専用のアクティブオブジェクトを一個使っています。オートデモなので見てるだけ。ブラウザ用にJavaでも出力
zip

Shootingstar

中級
pink_typewriter

ピンクタイプライター

画像の利用規約を確認したらダメっぽいので画像だけ別にダウンロードしてください。画像をダウンロードしなくても一応筆者がトレパクした絵が付いてるので品質以外はご安心?本来使いたかった画像はgary@pixelpressicons.com.からIcons: Typewritersにあります。ピクチャオブジェクトが外部参照している同名の画像ファイルを差し替えるだけで簡単にビジュアルをアップグレードできます。
zip

pinktypewriter

中級
通し番号と動作の切り替え

通し番号と動作の切り替え

オブジェクト動作の Widget 化を意識した作りになっているサンプル。オブジェクトイベントを使って通し番号を切り替えると複数オブジェクト動作も同時に切り替わります。
zip

連番切り替え

簡単?
固定値と通し番号

固定値と通し番号

某動画に影響されたサンプル。アクションループ使えば固定値も一括して代入できます。要「 Surface Object 」。
zip

選択と破壊

簡単
ランダムと通し番号

ランダムと通し番号

要「Select Object」です。日本語版 MMF2 でも問題なく使えるようにしてくれたエクステンション作者さんに感謝。このサンプルでは変数にランダム値を代入し、代入した値から一番高い値を検出します。
zip

Ramdom & Select

簡単
ドリルと通し番号

ドリルと通し番号

高速ループをちょっとだけ使っています。あとは接触判定後、変数に特定の値を入れて条件一致したものを破壊すれば地面が掘れる、というもの。Javaでも出力
zip

ドリル

簡単
升目

グリッドと通し番号

一番簡単なサンプル。通常の通し番号に逆順を適用。
zip

逆順


>>次のページ