サンプルについて解説:Init
日本語版MMF2でサンプルを開いて見てください。
最初に見てほしいのがフレームエディタからの画面で、まず雰囲気を。
次にイベントエディタからの画面で大まかな役割を決めたイベントグループを見てください。
一番最初にある「Init」というイベントグループは正真正銘ゲームループの一番最初に一回だけ実行される処理をまとめてあります。「Init=initialize」は初期化という意味で、具体的には初期設定ファイルを読ませたりそこから変数への代入をあらかじめ行う処理などをまとめたものです。
ソースコードの効率の良い見方
- フレームエディタ:オブジェクトの追加や配置、プロパティ画面と組み合わせた初期設定
- イベントエディタ:イベントの追加・編集。イベントグループなどの管理
- イベントリストエディタ:イベント内のアクションの編集・管理、とくに実行順など
この時点ではプレイヤーの初期位置を決めたりアイテムや通し番号の割り振りなどをやってますが、アイテム(障害物)の配置はイベントグループ「init」の中に含まれる「mapping」で特に重要な処理をやっています。早い話設定ファイルの内包ができなかったし、String Parser2も使えないしという予定外が連続したため代替の代替の代替みたいな処理を行っています。
図を見てもらうとちょっとややこしいことをやってるのが分かるかと思いますが・・
- まずグローバル文字列を初期値設定ファイル代わりに使っている
- あらかじめ割り振られた通し番号を使ってMMF2標準の文字列操作で抽出
- 文字列の抽出は二段階で行い、テンポラリとしてローカルの可変文字列も使う
- 無事抽出した文字列を数値としてローカルの可変変数に代入=アクションループ
・・こんな感じの処理を行っています。MMF2の標準にも文字列操作機能が少しは付いているのでこういうこともできます。ただしこういうのはParser機能を持ったエクステンションでやりたかったわけで、String Parser2がダメならもう一つの方法としては「配列」を使う方法も考えつきます。しかし結局、配列に代入する際にどうすんだってことになり頓挫しました。標準機能の中で作ろうとするとMMF2の不器用な仕様で作ることになるので、つまりご自分で作る際は素直に使えるエクステンションの中から便利そうなものを選んで使ってください。このやり方をおすすめはしませんが何も使えないときはこういう手法でなんとかします。あと良く見たらデバッグ用の仕様が残っていて、途中ローカルの可変文字列に処理中の文字列を代入してる工程が残っていますがこれは不要。
Val(Right$(Left$(visible_set,通し番号”object”),1))でいけます。
この処理は「文字列の左から何番目の文字を(1つ)抽出して、抽出した文字列を数字に変換して可変変数にぶち込む」・・という意味です。抽出する文字列の並びは通し番号に一致させてあるので、通し番号が1は非表示、2番は表示、3は非表示・・・という具合に処理されます。アイテムも同じ要領です。
通し番号とかアクションループ処理については基礎概念でさんざんやってるので説明は省きます。