RPGツクールと数学のブログ

RPGツクールと数学についてのブログです。

相互変換モジュール 空中に浮いたゲージを作る

過去ブログの転載です。

空中に浮いたゲージを作ってみましょう。これを作るにはゲージのすべての表示のパターンを作らなければならないので、とても面倒な作業として敬遠されがちです。しかし単調作業を大量に行う問題は、相互変換モジュールによってすべて解決します^^

まずは空中ゲージを作ってみましょう。ゲージは↓この記事で使っていたものを使い回します。

fermiumbay13.hatenablog.com

HSPを用いることで、大量の画像保存が容易となります。画像そのものをHSPで作ることも当然できますが、説明が多くなってしまいますので、ここではサンプルを挙げておきます。

「ゲージ」「ゲージ枠」「ゲージの上のゲージ枠」の3種類の画像を用意し、読み込ませると自動ですべての場合のゲージ画像を生成するものです。「ゲージの上のゲージ枠」とは、↑上の記事でいう「ゲージ枠2」のことです。

dim sx, 4 : dim sy, 4
dim pos_x, 4 : dim pos_y, 4

// ----↓変える場所-----------------------------------------------------
buffer 1 : picload "ゲージ.bmp" : sx.1 = ginfo_sx : sy.1 = ginfo_sy
buffer 2 : picload "ゲージ枠.bmp" : sx.2 = ginfo_sx : sy.2 = ginfo_sy
buffer 3 : picload "ゲージ枠2.bmp" : sx.3 = ginfo_sx : sy.3 = ginfo_sy
pos_x.1 = 2 : pos_y.1 = 2
pos_x.3 = 0 : pos_y.3 = 2
name = "空中ゲージ"
// ----↑変える場所-----------------------------------------------------

bgscr 0, sx.2, sy.2
repeat sx.1 + 1
    pos 0, 0 : gcopy 2, 0, 0, sx.2, sy.2
    pos pos_x.1-cnt, pos_y.1 : gcopy 1, 0, 0, sx.1, sy.1
    pos pos_x.3 , pos_y.3 : gcopy 3, 0, 0, sx.3, sy.3
    bmpsave name + strf("%02d",sx.1-cnt) + ".bmp"
    wait 1
loop

dialog "保存完了しました。" : end

 ↑「変える場所」の所だけ変えてください。

f:id:fermiumbay13:20190802004002p:plain

初めの3行で画像ファイルの名前を入力し、座標(0,0)をゲージ枠の左上座標として、4行目に「ゲージ」(MAX時)の左上座標、5行目に「ゲージ枠2」の左上座標を入力、6行目に保存する画像ファイルの名前を入力します。この場合は「ゲージ」が(2,2)、「ゲージ枠2」が(0,2)ですね。

このプログラムファイルは、どこかてきとうな場所に保存しておきましょう。入力し終わったら、F5で実行してください。プログラムを保存したディレクトリに、生成された画像が保存されていくはずです。

f:id:fermiumbay13:20190802004018p:plain

ゲージ0の画像から、80の画像まで、81個の画像が生成されました。ちゃんとできているか、確認してくださいね^^;

このままでは使えないので、減色ソフトなどを用いてこれらを減色してください。私はIrfan viewというフリーソフトを使っています。一括変換できるものでないと厳しいです……

そして、これら81個の画像をインポートするのですが、やっぱりめんどくさいです。実はbmpはインポートしなくてもそのまま利用することができますので、RPGツクールのPictureフォルダにそのままぶちこんでやりましょう。これでOKです。

f:id:fermiumbay13:20190802004035p:plain

うまくいくと、このように利用することができます。減色とかしていないと、プレビューに表示されないことがありますので、ご確認ください。

さあ、ゲージの値によって表示するピクチャーを変える命令を作りましょう。相互変換モジュールでこういったものを作るとき、とりあえずまずてきとうに1個分の命令を作り、それを変換して改変するといった手法が良いと思います。

repeat 81
    co 1, 14, 0, cnt, 0
        pic 1, "空中ゲージ"+strf("%02d",cnt), , 55, 15
    coend
loop

↑これで良いです。条件分岐に用いる変数は14番「ゲージx」としました。このゲージの表示位置はもともと(42,6)だったのですが、試しに、(55,15)にしてみて、ちゃんと空中に浮いたゲージになっているか確認しましょう。

このファイル名は「空中ゲージ」の名前の直後に「00」~「80」といった2桁の数が付くようになっています。そうすると、単純に "空中ゲージ"+cnt としただけでは「空中ゲージ0」とかいう名前になって、「空中ゲージ00」とはならないので、値が2桁以下のときは必ず2桁で表示することができる関数のstrfを用います。「strf("%02d",cnt)」と書くと、「cnt」という変数を2桁で表示するという意味になります。C言語をやったことのある方なら、これはprintfそのものだとお分かりでしょう。これはprintfと同じようなことができる関数です。

ということで、上のプログラムをsendすれば、RPGツクール用の命令になります。

コモンイベント「ゲージ移動」(開始条件:呼び出されたときのみ)

◆変数の操作:[0014:ゲージx]代入,変数[0013]の値
◆条件分岐:変数[0013:ため量]が48以上
 ◆変数の操作:[0014:ゲージx]代入,48
 ◆
:分岐修了
◆変数の操作:[0014:ゲージx]乗算,80
◆変数の操作:[0014:ゲージx]除算,48
◇  ← ここで「貼り付け」

↑◇の部分で、sendされたイベント命令を貼り付ければ完成です。ため量をゲージの値に変換し、その値によって表示するピクチャーを変えます。この場合はため量の限界値の方が小さい(48)ので、非効率ですが……例ですこれは。

f:id:fermiumbay13:20190802004053p:plain

この空中ゲージはピクチャー1番だけで表示できますので、初期設定の際にゲージやゲージの枠を表示する命令は削除しておいてください。実際にゲージが表示できることを確認しましょううね。

ただ、この命令は「ピクチャーの表示」が多用されますから、重いパソコンの場合はうまく動かないでしょう。実際にこのようなことをする場合は対策としてウェイトを入れるなど、工夫をする必要があります。