YADO作品リスト・コモンイベント素材 XY配列確認コモン (更新:2025/07/24)
|
||||||||||||||||||||||||||||
【ダウンロードページを開く】 |
||||||||||||||||||||||||||||
▼制作の経緯 2025年にウディタ[3.5]が公開されたため、 ウディタ[3.5]から追加された「XY配列」を使ってみる事にしました。 するとXY配列の内容が簡単に確認する事ができない事が分かりました。 XY配列の内容は、特殊文字「\xy[番号]」を使う事で確認する事ができますが、 この特殊文字「\xy[番号]」で配列の一覧を表示すると、 調べたいXY位置の値がどこにあるのかが分かりにくい状態になりました。 ▼特殊文字「\xy[番号]」で出力した時のイメージ。 例えば「X列=6、Y列=3」の値を調べたいと思っても、どこに値があるのかが分かりにくい。
特殊文字を「\xy[0:6:3]」などと設定すれば、知りたいXY位置の値を調べる事ができますが、 他のXY位置を調べたい時には、特殊文字を設定し直す必要があり、かなり手間がかかります。 「\xy[\v[0]:\v[1]:\v[2]]」などと変数でXY位置を指定する方法もありますが、 この場合は変数の値を変えるイベントを準備する必要があり、その準備に手間がかかります。 特殊文字「\xy[番号]」を使う以外の方法では、 CSV形式でファイル出力して表計算ソフトで確認する方法があります。 しかしこの方法では、配列の値を確認する度に「ファイル出力 → 表計算ソフトで確認」が必要であり、 また「X列=185、Y列=131の値が見たい」と思っても、 すぐに表計算ソフト内で指定したXY位置の値を確認するのが難しい部分がありました。 誰でも簡単に見たいXY配列の内容がすぐに見れるようにするためには、 専用のコモン素材を用意する必要があったため、当コモンを制作する事にしました。 制作当初に決まっていた仕様は以下のとおりです。
ある程度は完成品に近い仕様になっていますが、例えば[横X]ボタンなどは制作当初はありませんでした。 ▼ピクチャの表示 配列表の表示は「ゲーム画面で見える範囲の配列だけを表示する」で作る事になっていましたが、 実験としてXY配列にある全ての値を一気にピクチャで表示したらどうなるのかを試してみました。 すると「100列×100列」程度ならば問題ありませんが、 「1000列×1000列」になると全体の画像サイズが軽く1万ピクセルを超え、 配列表の移動が困難になるくらいの処理落ちが発生しました。 当コモンでは「1万列×1万列」でもスムーズに処理する事を目標としていたため、 やはり制作当初から決めていた「ゲーム画面で見える範囲の配列だけを表示する」で作る事にしました。 配列表を表示するピクチャは、ピクチャ1枚につき「横1列×縦20列」で表示しています。 「横1列」になった理由は、列ごとに表示する桁数(横幅)が変わるためです。 「縦20列」になった理由は、実験として「縦10列」と「縦50列」を試してみて、 「縦10列」だと画面上の表示するピクチャの枚数が増えて処理負担が大きくなり、 「縦50列」だと画像サイズが大きくなってやはり処理負担が大きくなったため、「縦20列」になりました。 ピクチャが縦長の画像になっているため、 配列表の移動は横移動の方が新たに表示するピクチャの枚数が少なくなり、 縦移動よりも横移動の方が処理落ちが少なっています。 ピクチャの使用枚数は、メニュー画面の表示に「200枚」、配列表の表示に「9800枚」を使用しています。 配列表の「9800枚」は「横490枚×縦20枚」に分けて使用していますが、 例えば「横500列目」などの場合は、ピクチャ番号が足りなくなるため、 「足りなくなったらスタートのピクチャ番号へ戻る」と言ったループ処理を行っています。 そのため、横の列の「0列目」と「490列目」、縦の列の「0列目」と「400列目」は、 それぞれ同じピクチャ番号で表示しています。 ピクチャ番号をループさせる事で、使用するピクチャ番号の数を抑える事ができますが、 イベント設定の方はかなり複雑化するため、処理を安定させる(バグを無くす)のに苦労しました。 例えばピクチャ番号が「12345」と並んでいて「10 20 30 40 50」の値を表示している場合で、 「ピクチャ3の値を330に変える」とした場合、 そのまま値を変えただけでは「10 20 33040 50」とくっついて表示されてしまうため、 「ピクチャ4以上は右へ移動する」を実行して「10 20 330 40 50」と表示させます。 しかしピクチャ番号がループして「51234」と並んでいて「50 10 20 30 40」の値を表示している場合で、 「ピクチャ3の値を330に変える」とした場合は、 「ピクチャ4以上は右へ移動する」の処理では「 5010 20 330 40」となってしまうため、 「ピクチャ4以上は右へ移動する、但しピクチャ3より左側にある場合は右へ移動しない」 と言った処理を実行して「50 10 20 330 40」になるようにしています。 配列表のピクチャは、一度表示したピクチャは内容が変わるまでは再表示しないようにしています。 上記のピクチャがくっついてしまう問題も、配列の値を変えたピクチャだけを新規で表示し直し、 他のピクチャはそのまま活かすようにしているため、 新規で表示し直したピクチャ以外の表示位置をずらす処理が必要になっています。 このような仕様にする事で、全てのピクチャを表示し直すよりも処理落ちは軽減しますが、 イベント設定の方はかなり複雑な処理になっています。 配列表はピクチャ1枚につき「横1列×縦20列」で表示していますが、 単純に縦に20個の値を設定しているだけでは無く、 様々な特殊文字を駆使してピクチャを表示しています。 ▼配列表を表示するピクチャの文字列
「\f[\cself[15]]」はフォントサイズ、「<R>」は右寄せ表示、 「\c[1]」は文字色(\c[1]=プラス値、\c[2]=ゼロ値、\c[3]=マイナス値)、 「\cself[31]」は配列の値、「\my[\cself[49]]」は指定した行間になるように調整する設定であり、 「\c[1]\cself[31]<改行>\my[\cself[49]]」を20回繰り返して縦20列の値を設定しています。 最後の方にある「<L>\ax[\cself[24]]\ay[0]」の中で、 「\ax[\cself[24]]」は縦に表示されている他のピクチャの横幅と同じ横幅にする時に使います。 「\ay[0]」は意味の無い設定に見えますが、これが無いと横幅が大きく広がってしまいます。 「<L>」も意味の無い設定に見えますが、これは「\ax[\cself[24]]\ay[0]」の部分を削除する時に、 「<L>」を使って「指定文字まで切り出し」を実行する時に使います。 「\ax[\cself[24]]\ay[0]」の削除は、 一見「\ax[\cself[24]]\ay[0]」の指定文字で「指定文字まで切り出し」が実行できそうですが、 実際には「\ax[14]\ay[0]」や「\ax[30]\ay[0]」のようにセルフ変数で設定した値で設定する必要があり、 「\ax[\cself[24]]\ay[0]」の指定文字では「指定文字まで切り出し」を実行する事ができません。 そのため、「<L>」を設定して「指定文字まで切り出し」で「\ax[\cself[24]]\ay[0]」を削除しています。 画面下の補足説明の空白設定でも「\ax」や「\mx」の特殊文字を使っています。 ![]() 文字と文字の間に空白を入れる場合、通常はスペース(空白文字)を使いますが、 今回は「全角の65%の空白」などで設定したかったので、「\ax」や「\mx」を使っています。 ちなみに画面下の補足説明で使う「\ax」「\mx」のために、貴重なセルフ変数を2個使用しています。 ▼地味に大変だった拡大縮小の処理 拡大縮小の機能は制作当初から付ける予定でした。 理由は、拡大率100%の表示だけでは、1画面で表示できる配列の数に制限があり、 逆に1画面に多くの値を表示すると、フォントサイズが小さくなって見づらくなってしまうため、 両方の表示に対応できるように拡大縮小の機能を付けました。 拡大縮小する時には、基点となっているXY位置から外れないように拡大縮小しますが、 同じXY位置をキープしながら拡大縮小するのは意外と難しく、 特にゲーム画面のサイズ[320×240[x2]]で、拡大率50%から25%へ縮小する時には、 XY位置の幅がかなり狭くなるため、別のXY位置になってしまう事が多々ありました。 最終的には1ピクセルずつずらして合わせるような力技で、何とか同じXY位置になるようにしています。 拡大縮小は、数値入力画面が表示されている時には、画面の中心の基点に拡大縮小を行い、 数値入力画面が表示されていない時には、十字カーソル(マウスポインタ)を基点に拡大縮小を行います。 2種類の拡大縮小の処理がある事で、より感覚的に拡大縮小が行えるようになりましたが、 配列表の端で十字カーソルの拡大縮小で縮小すると、配列表が大きく端にずれてしまう問題が発生しました。 ▼縮小して同じ「X7、Y3」にすると、配列表が右下の方へ移動してしまう
当コモンでは、数値入力画面のために画面中央に数値が表示されている必要があったため、 配列表の端で十字カーソルの拡大縮小で縮小した時には、同じXY位置にならない状態になっています。 ▼縮小すると十字カーソルの位置が「X7、Y3」から「X15、Y7」に変わる
十字カーソルの拡大縮小で同じXY位置になるようにする方法として、 マウスポインタの位置を移動する方法がありますが、勝手にマウスポインタが動くと使い勝手が悪くなる上、 コモンの説明書には「同じXY位置で拡大縮小する」とは書いていないので、現状の状態を完成品としました。 縮小時の配列表の表示は、単に100%時のピクチャを縮小して表示しています。 そのため、拡大率25%になると、配列の値の表示が潰れた感じとなり、値の内容が分かりにくくなります。 縮小時の値を綺麗に見せるためには、フォントサイズを小さくして再表示した方が良いのですが、 画面上の配列表を全て再表示するとなると処理落ちが発生してしまうため、操作性が悪くなります。 またフォントサイズ「10」の25%だと「2.5」になるなど、 4分の1のフォントサイズにできない場合もあるため、単に100%時のピクチャを縮小する仕様になりました。 拡大率25%になると値が分かりにくくなるため、 救済処置として拡大率25%の時に十字カーソルを合わせると、値が拡大して表示するようにしました。 なお、ゲーム画面のサイズが大きい場合は、拡大率25%でも値の内容が確認できるようになるため、 オプション設定で十字カーソルを合わせても、値が拡大しないようにする事もできるようにしています。 ▼途中で追加された[横X]ボタン 【DB操作】でXY配列をCSV形式で出力した際、 表計算ソフトの表示が「X列=縦、Y列=横」になっていたため、 当コモンの配列表示も「X列=縦、Y列=横」で制作していました。 ところが制作の途中で特殊文字「\xy[番号]」の表示が「X列=横、Y列=縦」になっていた事に気付き、 急遽[横X]のボタンを設置してXY表示の縦横が切り替えられるようにしました。 そしてこの[横X]の設置により、バグが多発するようになりました。 バグの原因は、[横X]で切り替えた際 「X列 → セルフ変数の名前が[X列]」としていたものを、 「X列 → セルフ変数の名前が[Y列]」と逆転して値を設定していましたが、 一部のセルフ変数は、逆転させても「X列 → セルフ変数名前が[X列]」のままで処理していたため、 非常に解りにくいイベント設定になっていました。 しかも複数のラベルのジャンプによって、処理があちらこちらに飛んでいる上、 一時使用のセルフ変数が何に使われているのかを把握するのに時間がかかり、 更に[横X]を切り替えた時に、数値入力画面の▲で示しているXY位置が変わらないようにしたため、 想像以上に[横X]の設置作業が大変でした。 まあ苦労した甲斐もあり、より使いやすいコモン素材になったかと思います。 ▼ウディタ[3.618]の奇跡 XY配列は「番号」と「名前」で設定する事ができますが、 当コモンの開発当初(ウディタ[3.608]の頃)は、使用中の配列の名前を取得する方法が無く、 ファイル「Editor_XY_array_Name.ini」から配列の名前を取得していました。 名前の取得自体は問題ありませんでしたが、 しかしファイル「Editor_XY_array_Name.ini」はエディタの終了時に更新される仕様だったため、 【DB操作】で新しい配列の名前を設定した時には、一度エディタを終了して、 ファイル「Editor_XY_array_Name.ini」を更新する必要がありました。 この一度エディタを終了させる仕様は、かなり微妙でしたが、 これ以外に配列の名前を取得する方法が無かったため、これで当コモンを公開する事にしていました。 ところがウディタの公式サイトにある要望を書く掲示板にて、 使用中の配列の番号や名前が取得する機能を要望する書き込みがあり(書いたのはYADOではない)、 その後に更新されたウディタ[3.618]にて、 使用中の配列の番号や名前を取得する機能が追加される奇跡が起きました! これによりウディタ[3.618]以降では、新しい配列の名前を設定しても、 エディタを再起動(ファイル「Editor_XY_array_Name.ini」の更新)をする必要が無くなり、 快適に当コモンが使えるようになりました。 なお、ウディタ[3.618]以前のウディタ[3.500〜3.617]でも当コモンが使えるようにするために、 ファイル「Editor_XY_array_Name.ini」から配列の名前を取得する処理はそのまま残しています。 ▼当コモンをウディタ[3.500〜3.617]で起動すると、以下のような画面が出てきます ![]() ウディタ[3.618]以降では、使用中の配列の番号を取得する機能も付きましたが、 この使用中の番号の取得は「イベントを実行した順番」になるため、 例えば配列番号「3→1→2」の順番で【DB操作】を実行した場合は、 使用中の番号の一覧も「3→1→2」の順番になります。 そのため、当コモンの配列選択画面の一覧では「1→2→3」と番号順で表示されるようにしています。 ▼本当にあったフォントの話 コモンイベントのオプション設定には、フォントサイズを変える以下の4つのオプションがあります。
十字カーソル用の2つ(セルフ84〜85)は、制作当初から設定する予定でしたが、 残り2つは未使用のセルフ変数が残っていたので設定する事にしました。 セルフ変数[83:配列表の値の表示拡大率]は「下限50」になっていますが、 実際には「下限25」でも処理する事ができました。 しかし「セルフ83=25」で拡大率25%で表示にすると、数値が全く見えないくらいに小さくなり、 単に処理が重くなるになったため、「下限50」にしています。 セルフ変数[84:十字カーソルXY位置表示拡大率]と セルフ変数[85:十字カーソルの値の表示拡大率]は、 元々は「0=表示しない/1=表示する」の設定でした。 その後「0=表示しない/1=表示する/2=大きく表示する」の設定に変わり、 そして拡大率を設定する仕様に変わりました。 このような変化を見ると「最初から拡大率の設定にすればいいのに〜」と思われるかもしれませんが、 最初に「0=表示しない/1=表示する」で設定すると、 意外と「セルフ変数の値=拡大率」の発想まで辿り着くのに時間がかかるんですよね。 セルフ変数[86:メニュー画面文字拡大率]は、 メニュー画面用のフォントサイズ(セルフ16の値)を変えるだけなので、 ほんの数分程度の作業でオプションの追加設定が完了してしまった。 「上限200」にしているのは、単純に大きくし過ぎると、 ゲーム画面より大きくなってメニュー画面の操作が出来なくなるためです。 ▼最後の最後で数値入力画面の仕様を大幅に変更 当コモンが公開できるレベルまで完成した所で、数値入力画面の仕様を大幅に変えました。
変更前の画面は、同値と列追加が数値入力画面と一体化していて、 同値の方は「配列内を全て同値」か「指定した列を全て同値」の設定しか無く、 列追加の方は10列増やすのに[+X]や[+Y]を10回押さないといけない仕様になっていました。 また同値や列追加を間違えて押さないようにするための[ロック]ボタンを設置し、 [ロック]を解除しないと同値や列追加が実行できない仕様になっていました。 この[ロック]ボタンの存在や同値と列追加の仕様が微妙だったため、 同値と列追加を別の設定画面で処理する事にしました。
これを見ると「最初から別の設定画面で処理すれば良いのに〜」と思うかもしれませんが、 別の設定画面を表示するためには大量のイベントコマンドを設定する必要があり、 実際にコモンイベントの行数が2千行以上も増えました。 なるべく設定画面を早く完成させるために、同値と列編集は同じ画面レイアウトにして、 殆どの部分で同じイベントコマンドで処理しています。 イベント処理を共有化する事で、例えば数値入力の処理などは、1つ作れば両方で使えるようになりました。 設定画面の処理は、他のメニュー画面や配列表の操作処理とは異なる、完全に孤立した処理になっています。 そのため、例えばテンキーで数値入力ができる処理などは、この設定画面用に新たに設定しています。 完全に孤立した処理であるため、 この設定画面の表示中は、配列表や他のメニュー画面の操作ができなくなりますが、 その代わりにこの設定画面の外側をクリックすると、設定画面が消せるようになりました。 多分無理に他のメニュー画面の操作ができるようにするよりも、 設定画面の外をクリックして消せるようにした方が使いやすいかと思います。 列の設定は、設定画面の制作当初は「列の総数増減」しかありませんでした。 しかし、簡単なイベント設定で列の挿入と削除を設定する事ができる事が分かったため、 「列挿入」と「列削除」を追加する事にしました。 もしかすると列の編集自体が必要無いかもしれませんが、まあ無いよりはあった方が良いでしょう。 ちょっとしたこだわりとして、数値入力画面の[列編]を押す時に、 決定キーで実行した場合は、マウスポインタの位置が変わるようにしています。 ▼[列編]をクリックした場合(マウスポインタの位置は変わらない)
▼[列編]を決定キーで実行した場合(マウスポインタが移動)
このようなちょっとしたこだわりがある事で、キーボード操作がより快適になるんですよね。 ▼ウディタ[3.571]以前で強制終了が発生! 古いウディタ[3.5]でも正常に動くかどうかをチェックするために、 ウディタ[3.502](所持している最も古いウディタ[3.5])で動作テストを行ってみた所、 列編集にある「列の削除」で強制終了が発生しました。 そこでウディタの更新履歴を確認してみた所、 どうやらウディタ[3.571]以前でXY配列のY列の削除を行うと、強制終了が発生する事が分かりました。 このままだと当コモンが原因で強制終了が発生しているように見えてしまうため、 ウディタ[3.500〜3.579]で当コモンを起動した時には、 [列編]を選択した時に、画面下に警告文が出るようにしました。 ![]() この警告文は、ウディタ[3.580]以降では表示されないので、実際に見る人は誰も居ないかもしれませんね。 ちなみに警告文の表示がウディタ[3.500〜3.570]ではなく、ウディタ[3.500〜3.579]になっているのは、 システム変数[115:[読]Game.exeバージョン(x100)]が小数点以下2桁までしか対応しておらず、 「3.570」か「3.571」の判定できなかったため、ウディタ[3.500〜3.579]で表示する仕様になっています。 |
||||||||||||||||||||||||||||
【YADO作品リストのトップへ戻る】 |