「別のセーブデータからの変数読み込みに時間がかかりすぎる」
変数に文字列変数を代入することができ、文字列変数を数値変数と扱う小技があるのです。メジャーなテクニックではあるのですが、このブログでも丁寧に図説してみましょう。
まずは「ウディタの文字列変数の性質」をチェック
といっても文字列変数の操作は比較的重い処理なので、ほどほどの文字数におさめましょう。
・呼び出し値を使うことで、数値変数へ代入できる
数値でない場合やカラの文字列を代入した場合は、0が代入される。
複数行の文字列変数の場合、先頭の行のみ代入される。
「08」のような場合は「8」として扱われる。
つまり……
たとえば、こうして「代入内容を手動で指定し、変数呼び出し値(1600005)を使う」ことで、コモンセルフ10番(変数)に、コモンセルフ5番(文字列変数)を代入することが可能です。
以上を踏まえると、次のようなことができます。
本題:文字列変数を応用した複数変数の管理
100
31
9999
代入できるのは文字列の1行目なので、代入のたび1行目を削って上詰め(代入済の行を消す)しているのですね。これで文字列変数ひとつで、複数の変数を記憶したり送ったりすることができました。
「コモンイベントへの入力が4つじゃ足りない」という問題ならば、これで解決。文字列変数ひとつ(cself5)を使えば、事実上、無限に近い変数を送ることが可能ですね。
ウディタには再起処理の機能がありませんが、疑似的に再起処理を行う際にもこのメソッドが重要になってきます。オープンソースのウディタ製SRPG『システリアの冒険』でも、SRPGのキモである移動範囲計算でこの手法が使われているのです。
こちらがその様子。
膨大な量のx,y座標を扱うことになるのですが、99個までのコモンセルフ変数では扱いきれないため、文字列変数に順次書き込み/読み込みをしているのですね。
詳しくは直接システリアをDL(サイト)してお確かめくださいませ。
「別のセーブデータからの変数読み込みに時間がかかりすぎる」問題
変数を10個読み込もうとしたら、セーブ10回分の処理負荷がかかるんですね。重くて当然。なので、文字列変数ひとつに複数の変数の情報をまとめておけば、「別のデータから読み書きするのは文字列変数ひとつ」に留めることができ、処理負荷を軽減できるのです。
ワンポイント
文字列変数ひとつで変数複数個分の働きができるとはいえ、コモンイベントは文字列変数を5つしか持っていません。そしてマップイベントは文字列変数ナシです。
文字列変数のやりくりは苦しいわけで、「変数リスト用」と「先頭行の切り出し用」に、都合2個の文字列変数をとられるのは結構きびしい。
そこで、こんなコモンイベントを作ってみましょう。
が、これを使うことでおおもとのコモンイベントのソースは視認性が上がり、文字列変数の節約になります。