デフォルトのままだとステートの表示は
[沈黙/睡眠/麻痺] といった風に文字で
表示部分width(横幅)に収まるだけしか表示できず
多くのステートをかけると
「どのステートにかかってたっけ?」
って思っちゃう事も…ない?(´・ω・`)
それならいっそ、画像表示にしたらどうなんだ!
という事で今回の「ステート画像表示」を思いつきました。
…他に解決法はいくらでもあるんですけどね~。
画像はステートと同じ名前のファイルをIconsフォルダに用意して下さい。
16~32ピクセルくらいのサイズで用意する事をオススメします。
【今回の変更点】
・Window_Help
【スクリーンショット】
■Window_Base
def make_battler_state_text
中身をまるっきり下記のように変えます。
「st番号」は、表示させたい分だけそれぞれの部分に
追加しておきましょう。
※レーティングが0のものは表示されないようにしてます。
array = 0
st1 = st2 = st3 = "" ←空にしておく
for i in battler.states
if $data_states[i].rating >= 1
case array
when 0
st1 = $data_states[i].name
array = 1
when 1
st2 = $data_states[i].name
array = 2
when 2
st3 = $data_states[i].name
array = 3
:
:
(表示させるステートの分だけ上when…と同じように追加)
end
end
end
return st1, st2, st3…
ここで初歩的・豆知識!
スクリプトでよく見る「return 変数、または数値」ですが
あれはdef~というメソッドに変数を戻り値として入れている
らしいです(・ω・*)
上のように st1, st2...と続けて入れると、配列として入ります。
次の変更点で「ああそゆこと!」ってわかるかも。
勉強も大切です。頑張りましょう。
def draw_actor_state
st = make_battler_state_text(actor, width)
rect = Rect.new(0, 0, 640, 480)
if st[0] != ""
bitmap = RPG::Cache.icon(st[0])
self.contents.blt(x, y, bitmap, rect)
end
if st[1] != ""
bitmap = RPG::Cache.icon(st[1])
self.contents.blt(x + 18, y, bitmap, rect)
end
if st[2] != ""
bitmap = RPG::Cache.icon(st[2])
self.contents.blt(x + 36, y, bitmap, rect)
end
:
:
(表示させるステートの分だけ追加)
st[番号]が空でない場合
ステータスと同じ名前の画像をIconフォルダから参照します。
縦(y)値をずらせば、二段重ねでも表示できますよo(・ω・o´)
■Window_Help
ヘルプにも画像で付加されているステートを表示します。
エネミーの方は名前と一緒(しかも文字表示)になっているので
ちょっと変更します。
「テキストの設定」の
@actor = nil の下あたりにでも
@enemy = nil
を追加。
次に、デフォルトのset_enemy中身を消して
下記を記述しておきます。
if enemy != @enemy
self.contents.clear
draw_actor_name(enemy, 280 - enemy.name.size, 0)
draw_actor_state(enemy, 450, 8)
@enemy = enemy
end
「280 - enemy.name.size」では
エネミーの名前のサイズ分だけ横280pxの位置から引いて
中央寄せに見せています。
アクター設定の方も調整しておきましょう。
画像にするのにメソッド名に"text"なんておかしいって思った方は独自で変更するとして。
デフォから改造して使いやすい・確認しやすいように書いたつもりです。
self.contents.bltを
self.contents.draw_text(x, y, width, height, st[番号])
に変更してそれぞれの値を調整すればスクリーンショットのように二段表示にする事もできるので、作品の雰囲気に合った表示方法を見つけてみてください。