第11回 ステータス画面改造

 2008-07-07
前回の続きです。
今回は、メニューのステータス画面を縦表示に変更します。

1.メニュー画面レイアウト
2.メニュー項目
3.ステータス画面

※ 現在、書き直したものが掲載されています。 >> RGSS2 講座
※ 03月03日 経験値ゲージの求め方が間違っています。各自訂正してください。
※ 11月07日 経験値ゲージの処理を変更。Lv 99 に対応。


今回手を加えるスクリプトは、Window_MenuStatus クラスですね。
ステータスの並びを変えたいので、refresh メソッドを見てみましょう。
def refresh
  # ウィンドウ内の内容を消去する。
  self.contents.clear
  # 項目数を設定する。(パーティの人数)
  @item_max = $game_party.members.size
  # パーティの人数だけ繰り返し描画する。
  for actor in $game_party.members
    # ここからステータスを描画する処理
    draw_actor_face(actor, 2, actor.index * 96 + 2, 92)
    x = 104
    y = actor.index * 96 + WLH / 2
    draw_actor_name(actor, x, y)
    draw_actor_class(actor, x + 120, y)
    draw_actor_level(actor, x, y + WLH * 1)
    draw_actor_state(actor, x, y + WLH * 2)
    draw_actor_hp(actor, x + 120, y + WLH * 1)
    draw_actor_mp(actor, x + 120, y + WLH * 2)
  end
end
こんな感じなんで、描画処理の部分だけ書き換えましょう。
for 内の処理ね。
SS2008628.jpg
x = 128 * actor.index
y = 4
draw_actor_name(actor, x + 10, y)
draw_actor_face(actor, x + 16, y + WLH * 1, 96)
draw_actor_state(actor, x, y + WLH * 4, 128)
draw_actor_level(actor, x + 10, y + WLH * 5)
draw_actor_class(actor, x + 10, y + WLH * 6)
draw_actor_hp(actor, x + 4, y + WLH * 7)
draw_actor_mp(actor, x + 4, y + WLH * 8)
draw_actor_exp(actor, x + 4, y + WLH * 9)
変数 actor は、Game_Actorクラスです。
順番にパーティのアクターの情報が代入されます。

描画の配置はこれでいいのですが、経験値のゲージを表示するメソッドはありません。
ですので、自分で作ります。
HPやMPのゲージをいじってあげるとできます。
#--------------------------------------------------------------------------
# ◎ 経験値の描画
# actor : アクター
# x : 描画先 X 座標
# y : 描画先 Y 座標
# width : 幅
#--------------------------------------------------------------------------
def draw_actor_exp(actor, x, y, width = 120)
  # ゲージ部分を描画
  draw_actor_exp_gauge(actor, x, y, width)
  # 文字の色をシステムカラーに変更
  self.contents.font.color = system_color
  # ゲージ上の左に描画する文字
  self.contents.draw_text(x, y, 60, WLH, "EXP")
  # 文字の色をHPカラーに変更
  self.contents.font.color = hp_color(actor)
  xr = x + width
  # 文字の色を標準色に変更
  self.contents.font.color = normal_color
  # Lv 99 対策 文字列だったら 0 に置き換える
  text = actor.next_rest_exp_s.class == String ? 0 : actor.next_rest_exp_s
  # ゲージ上の右端にレベルアップまでの経験値を描画
  self.contents.draw_text(xr - 60, y, 60, WLH, text, 2)
end
#--------------------------------------------------------------------------
# ◎ 経験値ゲージの描画
# actor : アクター
# x : 描画先 X 座標
# y : 描画先 Y 座標
# width : 幅
#--------------------------------------------------------------------------
def draw_actor_exp_gauge(actor, x, y, width = 120)
  # Lv 99 対策 文字列ならゲージを満タンにする
  if actor.next_exp_s.class == String
    gw = width
  else
    gw = width * actor.exp / actor.next_exp_s
  end
  # グラデーションカラー
  gc1 = Color.new(160, 160, 160)
  gc2 = Color.new(100, 100, 100)
  # ゲージの後ろを描画(黒い部分)
  self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
  # ゲージを描画
  self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
end
ここまでで、画像のようになっているでしょうか?
SS200807032558.jpg
最後に枠の部分を書き換えて終了です。
#--------------------------------------------------------------------------
# ○ カーソルの更新
#--------------------------------------------------------------------------
def update_cursor
  if @index < 0 # カーソルなし
    self.cursor_rect.empty
  elsif @index < @item_max # 通常
    self.cursor_rect.set(@index * 128, 0, 128, contents.height)
  elsif @index >= 100 # 自分
    self.cursor_rect.set((@index - 100) * 128, 0, 128, contents.height)
  else # 全体
    self.cursor_rect.set(0, 0, @item_max * 128, contents.height)
  end
end


こんな感じです。
確認はしてないですけど、大丈夫だと思います。

コメント




 

 ※ コメント内にURLを含めるには、バッククォート(`)をURLの直前に付け加えてください。


管理人のみ閲覧許可 [?]

トラックバック
トラックバックURL:
http://cacaosoft.blog42.fc2.com/tb.php/70-c62e0ff9
≪ トップページへこのページの先頭へ  ≫
カレンダー
06 << 2017/07 >> 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

カテゴリー
最近の記事
最近のコメント
03/16 お返事
01/21 お返事
11/30 z座標
11/20 z座標
08/03 お返事

タグクラウド

リンク