RGSS-ステート画像表示

カテゴリ: 投稿日: 2013-04-05
«RGSS一覧

デフォルトのままだとステートの表示は
[沈黙/睡眠/麻痺] といった風に文字で
表示部分width(横幅)に収まるだけしか表示できず
多くのステートをかけると
「どのステートにかかってたっけ?」
って思っちゃう事も…ない?(´・ω・`)

それならいっそ、画像表示にしたらどうなんだ!
という事で今回の「ステート画像表示」を思いつきました。
…他に解決法はいくらでもあるんですけどね~。

画像はステートと同じ名前のファイルをIconsフォルダに用意して下さい。
16~32ピクセルくらいのサイズで用意する事をオススメします。




【今回の変更点】
・Window_Base
・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[番号]) に変更してそれぞれの値を調整すればスクリーンショットのように二段表示にする事もできるので、作品の雰囲気に合った表示方法を見つけてみてください。



★このスクリプトを使った関連作品