RPGツクールVX RGSS2備忘録その3 パーティ定員を増やす。つづき

こんばんわみなさん( ^ω^)
正月だからといって食べ過ぎてはいけませんよm9( ・`ω・´)

Quest Maniaの製作に向けて、スクリプト周りだけみれば、半分くらいはおわったとこかな
という感じです。正月休み明けぐらいには、ゲームのコンテンツに手をつけれればなと
思ってます。( ^ω^)

今日は昨日に引き続き、パーティ人数の上限を増やすっていうのをやります。
昨日も書きましたが、ただ単に、パーティ人数を自分で設定するだけなら、
Game_PartyクラスのMAX_MEMBERSという定数に数字を代入するだけで
できます。
問題は、メニュー画面や、戦闘画面でのステータスウインドウがきちんと表示されない
ということでした。今日はステータスウインドウがきちんと表示されるスクリプトを
紹介したいと思います。

とはいっても、今回紹介するのは1画面で、パーティ全員分のステータスを把握
できるような高度なものではありません。
ウインドウの表示内容物がスクロールするようにする単純なスクリプトです。

まず、メニュー画面のステータスウィンドウはこんな感じです。

class Window_MenuStatus < Window_Selectable
  WLHS = 96
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     x : ウィンドウの X 座標
  #     y : ウィンドウの Y 座標
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y, 384, 32 + WLHS * $game_party.members.size)
    refresh
    self.active = false
    self.index = -1
    self.height = 416
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ内容の作成
  #--------------------------------------------------------------------------
  def create_contents
    self.contents.dispose
    self.contents = Bitmap.new(width - 32, [height - 32, row_max * WLHS].max)
  end
  #--------------------------------------------------------------------------
  # ● 先頭の行の取得
  #--------------------------------------------------------------------------
  def top_row
    return self.oy / WLHS
  end
  #--------------------------------------------------------------------------
  # ● 先頭の行の設定
  #     row : 先頭に表示する行
  #--------------------------------------------------------------------------
  def top_row=(row)
    row = 0 if row < 0
    row = row_max - 1 if row > row_max - 1
    self.oy = row * WLHS
  end
  #--------------------------------------------------------------------------
  # ● 1 ページに表示できる行数の取得
  #--------------------------------------------------------------------------
  def page_row_max
    return (self.height - 32) / WLHS
  end
  #--------------------------------------------------------------------------
  # ● 項目を描画する矩形の取得
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def item_rect(index)
    rect = Rect.new(0, 0, 0, 0)
    rect.width = (contents.width + @spacing) / @column_max - @spacing
    rect.height = WLHS
    rect.x = index % @column_max * (rect.width + @spacing)
    rect.y = index / @column_max * WLHS
    return rect
  end
  #--------------------------------------------------------------------------
  # ● カーソルの更新
  #--------------------------------------------------------------------------
  def update_cursor
    if @index < 0               # カーソルなし
      self.cursor_rect.empty
    elsif @index < @item_max    # 通常
      self.cursor_rect.set(0, @index * 96, contents.width, 96)
      row = @index / @column_max    # 現在の行を取得
      if row < top_row              # 表示されている先頭の行より前の場合
        self.top_row = row          # 現在の行が先頭になるようにスクロール
      end
      if row > bottom_row           # 表示されている末尾の行より後ろの場合
        self.bottom_row = row       # 現在の行が末尾になるようにスクロール
      end
      rect = item_rect(@index)      # 選択されている項目の矩形を取得
      rect.y -= self.oy             # 矩形をスクロール位置に合わせる
      self.cursor_rect = rect       # カーソルの矩形を更新
    elsif @index >= 100         # 自分
      self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
    else                        # 全体
      self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
    end
  end
end


今回扱うWindow_MenuStatusは、Window_Selectableを継承してる厄介なクラスです。
なんで、厄介かというと俺自身がよくわからないからです。(´;ω;`)ウッ
単に個人的なもんだいです。でも、とりあえず動いたので紹介したいと思います。

まずWLHS=96という定数を設定しておきます。これは一人分の高さです。
そして、initializeでウインドウそのものは、一度人数分だけ、縦長の高さに設定しておき、
あとで、1画面分の高さ幅に設定します。こうすると、うまく、全員のステータスが
描画されます。

次に、Window_Selectableクラスのメソッドで、WLHという一行分の高さを表す定数が
含まれるメソッドのWLHをすべて、WLHSに変えます。こうすることによって、
カーソルがきちんとした大きさと位置に動くようになります。

最後にupdate_cursorで、カーソルが画面の外に出たときに、ウインドウの表示の内容が
動くように設定します。これは、もともとWindow_Selectableクラスのupdate_cursor
をただ、間に挿入しただけのものです。

次に戦闘画面でのステータスウインドウについてです。
class Window_BattleStatus < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 416, 32 + $game_party.members.size * WLH)
    refresh
    self.active = false
    self.height = 128
  end
end
こっちはこれだけでちゃんと動きます。
やってることは、さっきのメニュー画面のinitializeメソッドでやった内容と同じものです。

このスクリプトで、メニュー画面中で、アイテムを使ったり、スキルを使ったりと
基本的なことは、問題なくできました。ただ、イベントコマンド(インタプリタ)は、まだ
ぜんぜん試してないので、ちゃんと動くかどうかわかりません。
もし何か不具合があったら、またブログでお知らせしようかなと思います。

でわ今日はこの辺で(^▽^)ノシ
スポンサーサイト

テーマ : RPGツクール
ジャンル : ゲーム

コメントの投稿

管理者にだけ表示を許可する

承認待ちコメント

このコメントは管理者の承認待ちです
プロフィール

Suppon

Author:Suppon
すっぽんでーす。(^▽^)
カルドラ鋭意制作中( ・`ω・´)
Twitter => suppon01
メールはこちらへ
suppon2008@gmail.com

Twitter...

Twitter Reload

最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
ブロとも申請フォーム

この人とブロともになる