気ままなタンス*プログラミングなどのノートブック

プログラミングやRPGツクール、DTM、VOCALOIDについてのんびり書きます。

【RPGXP】タイムバーのクラス

お久しぶりです。

とりあえず、久々にRPGツクールXPでゲームが作りたくなったので
色々とさわっていました。

今日はタイムバークラス(?)を作りました。

時間経過によって、ゲージが溜まっていくやつです。

タイムバー

別のクラスで、割合(%)を計算して、浮動メーター(緑の部分)のrectサイズを変更しています。

# 別クラスのコード(一部)
exp_parsent = exp_now.to_f / exp_max.to_f
# Sprite_Meterクラスのメソッド updateに ゲージのパーセンテージを渡す
# @meter_hash[space_ptr.to_s]には、Sprite_Meterクラスのオブジェクトが格納されている
@meter_hash[space_ptr.to_s].update(exp_parsent)

一応、メーターの表示に関するクラスとして作ったので、他の箇所にも利用できます。

メニュー画面を開いたときや、別マップに移動したときの対策を行っていない(わからん)
ので、何とかしなきゃなぁ。

  1. #==============================================================================
  2. # ■ Sprite_Meter
  3. #------------------------------------------------------------------------------
  4. #  メーター情報集約クラスです
  5. #==============================================================================
  6. class Sprite_Meter
  7.   #--------------------------------------------------------------------------
  8.   # ● オブジェクト初期化
  9.   #--------------------------------------------------------------------------
  10.   def initialize(x=0, y=0, width=60, height=20)
  11.     # メーター外枠の作成
  12.     @base_width = width
  13.     @base_height = height
  14.     
  15.     @bmp_outer = Bitmap.new(@base_width, @base_height)
  16.     @bmp_outer.fill_rect(0, 0, @base_width, @base_height, Color.new(170, 170, 170))
  17.     @sp_outer = Sprite.new
  18.     @sp_outer.x = x
  19.     @sp_outer.y = y
  20.     @sp_outer.bitmap = @bmp_outer
  21.     
  22.     # メーター基盤部分の作成
  23.     @bmp_inner = Bitmap.new(@base_width - 4, @base_height - 4)
  24.     @bmp_inner.fill_rect(4, 4, @base_width - 4, @base_height-4, Color.new(225, 225, 225))
  25.     @sp_inner = Sprite.new
  26.     @sp_inner.bitmap = @bmp_inner
  27.     @sp_inner.x = x
  28.     @sp_inner.y = y
  29.     
  30.     # 浮動メーター部分の作成
  31.     @bmp_float = Bitmap.new(@base_width - 4, @base_height -4)
  32.     @bmp_float.fill_rect(4, 4, (@base_width - 4) * 0.0, @base_height -4, Color.new(0, 210, 0))
  33.     @sp_float = Sprite.new
  34.     @sp_float.bitmap = @bmp_float
  35.     @sp_float.x = x
  36.     @sp_float.y = y
  37.   end
  38.  
  39.   def update(exp_parsent)
  40.     @bmp_float.clear
  41.     @bmp_float.fill_rect(4, 4, (@base_width - 4) * exp_parsent.to_f, @base_height -4, Color.new(0, 210, 0))
  42.     update_sprite
  43.   end
  44.  
  45.   def update_sprite
  46.     @sp_outer.update
  47.     @sp_inner.update
  48.     @sp_float.update
  49.   end
  50.  
  51.   def update_sprite_visible(bool)
  52.     @sp_outer.visible = bool
  53.     @sp_inner.visible = bool
  54.     @sp_float.visible = bool
  55.   end
  56.  
  57. end