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

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

アクションRPGの基礎(RPG2000)(応用編 ゲージ)

過去ブログの転載です。

↓【ため技】ではEscを押しっぱなしにして離すことで技が発動するように作りましたが、このため量をゲージで表示できるようにしましょう。

fermiumbay13.hatenablog.com

ゲージの表示にはピクチャーを用います。まずピクチャーとはその名の通り、ゲーム上に表示する画像でしたね。RPGツクール2000の現バージョンでは、最大50枚まで同時に表示させることが可能です。複数のピクチャーを表示している場合、ピクチャー番号が大きい順に前に表示されます。

f:id:fermiumbay13:20190801132759p:plain

50枚も表示させることあんのかと疑問に思われるかもしれませんが、使うとなると、これが結構使います……50枚では正直足りません。

ピクチャーは表示だけではなく、好きなときに移動、消去を行うことができます。これが2000になって出来るようになった画期的なシステムです。ゲージを作るときは、その値に応じてゲージのピクチャーを移動させればいいのです。

これから作るゲージは一番作りやすいタイプのものとします。それは、画面端にくっついているゲージです。空中に浮いているゲージを作るのは実はとても面倒なのです。

どういう理屈でゲージを作るかというと、こんな調子です。

f:id:fermiumbay13:20190801132847p:plain

ゲージの枠などはゲーム画面の画面端にくっつけておき、ゲージ本体とする赤い棒のピクチャーを値に応じて左右に動かすのです。見えない領域の部分で赤い棒がどう動こうと関係ないので、ゲーム画面ではゲージが上がったり下がったりしているように見えるわけです。

空中に浮いたゲージの場合は、これをやると当然はみ出したゲージが表示されてしまうので、値に応じたすべてのパターンのピクチャーを作らなければならず、とても面倒になります。

ゲージの素材はこれです。ここからダウンロードできます → Picture.zip - Google ドライブ

f:id:fermiumbay13:20190801132904p:plain

この3つの画像素材を使います。ピクチャー1番はゲージ枠の素材で、ピクチャー2番はゲージ本体の素材です。ゲージ枠の上にゲージ本体をそのままかぶせてしまうとゲージ枠の端だけゲージ本体がはみ出してしまうので、3番に端のみの素材を用意します。こうすることで、ゲージ本体は1番と3番にはさまれて表示されて、自然なゲージになります。

ピクチャーの表示位置について考えてみます。

f:id:fermiumbay13:20190801132924p:plain

RPGツクール2000の画面は320×240なので、中心座標は(160,120)となっています。ピクチャーの表示で用いる座標は中心座標なので、表示位置(160,120)と設定すれば、そのピクチャーはど真ん中に表示されることになります。(0,0)とすれば左上端を中心に、(320,240)とすれば右下端を中心に表示されますね。

しかし、ピクチャーを実際置くとなると、中心座標では扱いづらいです。正確にここに置きたいと思っても、やはりある程度の試行錯誤が必要になってしまいます。そこで、左上座標を中心座標に変換する式があります。こちらです。

中心座標x=(ピクチャーの横サイズ)÷2+左上座標x
中心座標y=(ピクチャーの縦サイズ)÷2+左上座標y

※小数点以下切り捨て

左上座標とは、画像の一番左上の点の座標のことで、それを利用したほうが扱いやすいです。左上座標が分かっていれば、上の式を用いて中心座標に変換し、その値をピクチャーの表示位置に入れれば、しっかり思い通りの位置に表示できます。

f:id:fermiumbay13:20190801132940p:plain

まずはゲージ枠の設置です。ゲージ枠の画像のサイズは84×8としており、これを左上座標(0,2)に置くことにします。横ゲージですので、高さはどこでもいいですが、画面端にはくっつくようにします。では中心座標に変換しましょう。
中心座標x=84÷2+0=42
中心座標y=8÷2+2=6
よって、中心座標(42,6)ですので、この数値をピクチャーの表示位置として指定すればOKです。

次に、ゲージの端部分です。「ゲージ枠2」という名前にしています。この画像のサイズは2×4です。ここまでなると、減色したらファイルサイズがでかくなるという。

f:id:fermiumbay13:20190801133001p:plain

ゲージ枠の上枠は高さ2ドットなので、2ドット下げて、左上座標(0,4)に置くことにします。
中心座標x=2÷2+0=1
中心座標y=4÷2+4=6
よって、中心座標(1,6)として指定すればOKです。

最後にゲージですが、これは値によって可変です。「ピクチャーの移動」によってすべて管理することにしましょう。そのためには一度「ピクチャーの表示」を呼び出す必要があるので、初期設定のイベントに加えます。ゲージの表示位置は「ピクチャーの移動」で全部行うので、初期位置はてきとうでいいです。このピクチャーの表示はマップの移動のたびに必要ですので、敵のダメージ量の初期化と同じ所にも置いておくとよいでしょう。

なぜ毎回「ピクチャーの表示」を呼び出す方法はしないかというと、「ピクチャーの表示」はRPGツクール2000で一番負荷のかかる命令であり、頻繁に呼び出すと動作が非常に重くなってしまうので、「ピクチャーの移動」を使っています。「ピクチャーの移動」はぜんぜん重くありません。

◆メニュー画面禁止の変更:禁止する
◆スイッチの操作:[0005:キー入力受付]をONにする
◆画面の消去:場所移動の設定
◆場所移動:0002:草(009,007)
◇ピクチャーの表示:1,ゲージ枠,(42,6)
◇ピクチャーの表示:3,ゲージ枠2,(1,6)
◇ピクチャーの表示:2,ゲージ,(160,120)
◇イベントの呼び出し:ゲージ移動
◇ウェイト:0.0秒
◆画面の表示:場所移動の設定

↑◇の行を追加しました。ピクチャーはすべて透明色なしとして、残りの細かい設定は初期設定のままにします。ゲージの表示位置は、てきとうに、中心座標にしてます。その直後にこれから作る「ゲージ移動」というイベントを呼び出し、ウェイトなしで0.0秒かけて、ピクチャー2番「ゲージ」を移動させます。ウェイトなしにするのは、これから呼び出すときにウェイトによってため量の増加が遅くなるのを防ぐためです。しかしそうすると、画面が表示された一瞬だけは「ゲージ」が変な所に表示されてしまうので、初期設定のときに限り、ウェイト0.0秒を施す必要があります。そこで、ウェイト0.0秒を入れています。

これに伴い、コモンイベント「キー入力(ため技)」の
◆変数の操作:[0013:ため量]加算,1  と、
◆変数の操作:[0013:ため量]代入,0  の直後にそれぞれ
◆イベントの呼び出し:ゲージ移動
を追加します。ため量が変化するたびにゲージを移動させるのです。

それでは肝心のゲージ移動イベントです。ちょっとむずかしい。

f:id:fermiumbay13:20190801133020p:plain

ため量MAXは48であるとします。ため量48のとき、ピクチャー3番から右に2ドットずれた位置がゲージの左上座標になるので、(2,4)になります。ゲージの画像サイズは80×4としているので、ため量0になると(2,4)から左に80行って、(-78,4)になります。

ため量xのときどうなるかというと、48が100%なのですから、x/48=1のときため量MAXです。一方、ゲージサイズのMAXは横80だったので、これを80倍して80x/48=80のときゲージサイズがMAXになります。x=0のとき(-78,4)になるのですから、ゲージのx座標は80x/48-78になります。

これは1次関数を求めることをしているので、連立方程式を立てることでも求められます。割合が違うためにこういった計算が必要なだけで、ゲージの長さとため量のMAX値が等しいならこんなことしなくてもできます。

更に、ため量は48以上になっても押しっぱなしにしていると増加してしまうので、ため量が48以上であったならx=48として計算するようにします。これで左上座標が求まりました。中心座標に直すには上記の変換式を使えば良いので、
中心座標x=80÷2+80x/48-78=80x/48-38
中心座標y=4÷2+4=6
よって、中心座標(80x/48-38,6)として指定すればOKです。

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

◆変数の操作:[0015:ゲージy]代入,6
◆変数の操作:[0014:ゲージx]代入,変数[0013]の値
◆条件分岐:変数[0013:ため量]が48以上
 ◆変数の操作:[0014:ゲージx]代入,48
 ◆
:分岐終了
◆変数の操作:[0014:ゲージx]乗算,80
◆変数の操作:[0014:ゲージx]除算,48
◆変数の操作:[0014:ゲージx]減算,38
◆ピクチャーの移動:2,(V[0014],V[0015]),0.0秒(ウェイトなし)

↑イベント命令はこんな感じです。変数14番、15番にゲージの中心座標を格納します。

y値は不変なので、6を代入しておきます。
x値にはまずため量を代入し、48以上なら48にする、
それを80倍して48で割って38で減算すれば、80x/48-38を計算したことになり、これが中心座標xになります。

よって、それらの変数を中心座標の値として入れれば完成です。ツクール2000では小数が扱えないので、必ず掛け算を先に行いましょう。

ピクチャーが絡むとややこしい計算が必要になることがあるのが大変ですねぇ。