查看: 3892|回复: 30

[已经解决] 如何查看敵方血量(數字)

[复制链接]
梦石
0
星屑
55
在线时间
21 小时
注册时间
2016-10-13
回帖
24
发表于 2017-2-6 20:36:51 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 sam870716 于 2017-2-7 13:38 编辑

就是...我現在已經有個裝血量滾動條 以及繪至敵方血量的腳本

但是我想要精確一點的在血量條下面多一串數字(或者直接蓋在敵方血量條上面也行)

以下是我用的滾動腳本

<[pre lang="ruby"]#--------------------------------------------------------------------------
# ● require Taroxd基础设置
#    给值槽增加动态的滚动效果
#--------------------------------------------------------------------------

class Taroxd::Transition

  # value: 当前值。changing: 当前是否正在变化
  attr_reader :value, :changing

  # get_target.call 获取到变化的数据。可以使用 block 代替 get_target。
  def initialize(duration, get_target = nil, &block)
    @duration = duration
    @get_target = get_target || block
    @value = @target = @get_target.call
    @d = 0
  end

  # 更新值槽的值。如果值槽发生变化,返回 true。
  def update
    @target = @get_target.call
    @changing = @value != @target
    update_transition if @changing
    @changing
  end

  private

  def update_transition
    @d = @duration if @d.zero?
    @d -= 1
    @value = if @d.zero?
      @target
    else
      (@value * @d + @target).fdiv(@d + 1)
    end
  end
end

# include 之后,可用 @gauge_transitions[actor][:hp] 等
# 获取 Taroxd::Transition 的实例。
module Taroxd::RollGauge

  Transition = Taroxd::Transition

  def initialize(*)
    @gauge_transitions = make_gauge_transitions
    @gauge_roll_count = 0
    super
  end

  def update
    super
    if (@gauge_roll_count += 1) >= gauge_roll_interval
      roll_all_gauge if update_gauge_transitions
      @gauge_roll_count = 0
    end
  end

  def draw_actor_hp(actor, x, y, width = 124)
    hp = @gauge_transitions[actor][:hp].value
    rate = hp.fdiv(actor.mhp)
    draw_gauge(x, y, width, rate, hp_gauge_color1, hp_gauge_color2)
    change_color(system_color)
    draw_text(x, y, 30, line_height, Vocab::hp_a)
    draw_current_and_max_values(x, y, width, hp.to_i, actor.mhp,
      hp_color(actor), normal_color)
  end

  def draw_actor_mp(actor, x, y, width = 124)
    mp = @gauge_transitions[actor][:mp].value
    mmp = actor.mmp
    rate = mmp.zero? ? 0 : mp.fdiv(actor.mmp)
    draw_gauge(x, y, width, rate, mp_gauge_color1, mp_gauge_color2)
    change_color(system_color)
    draw_text(x, y, 30, line_height, Vocab::mp_a)
    draw_current_and_max_values(x, y, width, mp.to_i, actor.mmp,
      mp_color(actor), normal_color)
  end

  def draw_actor_tp(actor, x, y, width = 124)
    tp = @gauge_transitions[actor][:tp].value
    rate = tp.fdiv(actor.max_tp)
    draw_gauge(x, y, width, rate, tp_gauge_color1, tp_gauge_color2)
    change_color(system_color)
    draw_text(x, y, 30, line_height, Vocab::tp_a)
    change_color(tp_color(actor))
    draw_text(x + width - 42, y, 42, line_height, tp.to_i, 2)
  end

  private

  # 获取 make_gauge_transitions 生成的对象
  attr_reader :gauge_transitions

  # 值槽滚动所需的帧数
  def gauge_roll_frame
    30
  end

  # 每隔多少帧更新一次值槽
  def gauge_roll_interval
    1
  end

  # 生成值槽变化的数据。可在子类重定义。
  # 默认的定义中,可以通过 gauge_transitions[actor][:hp] 等方式获取数据。
  def make_gauge_transitions
    Hash.new { |hash, actor|
      hash[actor] = Hash.new do |h, k|
        h[k] = Transition.new(gauge_roll_times, actor.method(k))
      end
    }.compare_by_identity
  end

  # 更新渐变的值。
  # 返回真值则触发一次刷新。
  # 每 gauge_roll_interval 帧调用一次。
  def update_gauge_transitions
    need_roll = false
    gauge_transitions.each_value do |hash|
      hash.each_value do |t|
        need_roll = true if t.update
      end
    end
    need_roll
  end

  # 值槽滚动所需的次数。
  def gauge_roll_times
    gauge_roll_frame / gauge_roll_interval
  end

  # 滚动所有值槽。可在子类重定义。
  def roll_all_gauge
    refresh
  end
end

class Window_BattleStatus
  include Taroxd::RollGauge
end

class Window_MenuStatus < Window_Selectable

  include Taroxd::RollGauge

  def roll_all_gauge
    item_max.times do |i|
      actor = $game_party.members
      rect = item_rect(i)
      rect.x += 108
      rect.y += line_height / 2
      contents.clear_rect(rect)
      draw_actor_simple_status(actor, rect.x, rect.y)
    end
  end
end
[/pre]>
梦石
0
星屑
55
在线时间
21 小时
注册时间
2016-10-13
回帖
24
 楼主| 发表于 2017-2-6 20:37:38 | 显示全部楼层
本帖最后由 sam870716 于 2017-2-7 13:39 编辑

敵方血量

<
[pre lang="ruby"]#--------------------------------------------------------------------------
# ● require Taroxd基础设置,动态值槽
#    战斗中敌人显示血条
#    如不想显示,可在敌人处备注 <hide hp>
#    可在敌人处备注 <hp width w>、<hp height h>、<hp dxy dx dy> 调整血槽。
#    其中 w 表示宽度、h 表示高度,dx、dy 表示坐标的偏移。
#--------------------------------------------------------------------------

Taroxd::EnemyHP = true

class RPG::Enemy < RPG::BaseItem

  note_any :hp_dxy, [0, 0], /\s+(-?\d+)\s+(-?\d+)/, '[$1.to_i, $2.to_i]'
  note_i :hp_width, 80
  note_i :hp_height, 6
  note_bool :hide_hp?

  # 初始化并获取战斗图的尺寸
  def init_width_height
    bitmap = Bitmap.new("Graphics/Battlers/#{@battler_name}")
    @width = bitmap.width
    @height = bitmap.height
    bitmap.dispose
  end

  def width
    return @width if @width
    init_width_height
    @width
  end

  def height
    return @height if @height
    init_width_height
    @height
  end
end

class Sprite_EnemyHP < Sprite

  include Taroxd::RollGauge
  include Taroxd::DisposeBitmap

  HP_COLOR1 = Color.new(223, 127, 63)
  HP_COLOR2 = Color.new(239, 191, 63)
  BACK_COLOR = Color.new(31, 31, 63)

  def initialize(viewport, enemy)
    @enemy = enemy
    super(viewport)
    data = enemy.enemy
    @width = data.hp_width
    @height = data.hp_height
    self.bitmap = Bitmap.new(@width, @height)
    dx, dy = enemy.enemy.hp_dxy
    self.ox = @width / 2
    self.oy = @height
    self.x = enemy.screen_x + dx
    self.y = enemy.screen_y + dy
    self.z = enemy.screen_z + 10
    refresh
  end

  def make_gauge_transitions
    Transition.new(gauge_roll_times) do
      @enemy.hp.fdiv(@enemy.mhp)
    end
  end

  def update_gauge_transitions
    gauge_transitions.update
  end

  def refresh
    bitmap.clear
    rate = gauge_transitions.value
    return if rate.zero?
    fill_w = (bitmap.width * rate).to_i
    bitmap.fill_rect(fill_w, 0, @width - fill_w, @height, BACK_COLOR)
    bitmap.gradient_fill_rect(0, 0, fill_w, @height, HP_COLOR1, HP_COLOR2)
  end
end

class Spriteset_Battle

  # 导入精灵组
  def_after :create_enemies do
    @enemy_hp_sprites = $game_troop.members.map { |enemy|
      Sprite_EnemyHP.new(@viewport1, enemy) unless enemy.enemy.hide_hp?
    }.compact
  end

  def_after(:update_enemies)  { @enemy_hp_sprites.each(&:update)  }
  def_after(:dispose_enemies) { @enemy_hp_sprites.each(&:dispose) }
end
[/pre]

点评

可以使用< >功能贴子更整齐  发表于 2017-2-7 10:06
回复

使用道具 举报

梦石
0
星屑
1345
在线时间
378 小时
注册时间
2015-6-16
回帖
526
发表于 2017-2-7 10:07:55 | 显示全部楼层
本帖最后由 VIPArcher 于 2017-2-7 10:58 编辑

@VIPArcher 帮忙结贴,我发他脚本,(@VIPArcher 你们紫色头像的管理经常删我帖子,本人还是喜欢私下解决,这样犯不着连贴等问题)
楼主要的脚本[pre lang="ruby"]#==============================================================================
# +++ MOG - Boss HP Meter (V1.5) +++
#==============================================================================
# By Moghunter
# https://atelierrgss.wordpress.com/
#==============================================================================
# Apresenta um medidor animado com o HP do inimigo.
#
#==============================================================================
# UTILIZAÇÃO
#==============================================================================
# Coloque o seguinte comentário na caixa de notas do inimigo.
#
# <Boss HP Meter>
#
# Caso desejar ocultar o valor numérico do HP use o código abaixo.
#
# <Boss HP Hide Number>
#
#==============================================================================
# Caso precisar mudar a posição do medidor no meio do jogo use o código abaixo
#
# boss_hp_position(X,Y)
#
#==============================================================================
# Serão necessários as imagens.
#
# Battle_Boss_Meter.png
# Battle_Boss_Meter_Layout.png
#==============================================================================
# FACES (Opcional)
#==============================================================================
# Nomeie o arquivo da face da seguinte maneira. (Graphics/Faces/)
#
# Enemy_Name + _F.png         (Slime_F.png)
#
# ou
#
# BF_ + ID.png          (BF_11.png)
#
#==============================================================================
# Definindo o LEVEL (Opcional)
#==============================================================================
# Coloque o seguinte comentário na caixa de notas do inimigo.
#
# <Level = X>
#
#==============================================================================

#==============================================================================
# Histórico
#==============================================================================
# v1.5 - Definição do nome da face pelo ID do battler
# v1.4 - Melhoria de compatibilidade de scripts.
#==============================================================================

$imported = {} if $imported.nil?
$imported[:mog_blitz_commands] = true

module MOG_BOSS_HP_METER
    #Posição geral do layout.
    LAYOUT_POSITION = [60,30]
    #Posição do medidor.
    METER_POSITION = [3,3]
    #Posição do nome do inimigo.
    NAME_POSITION = [16,8]
    #Posição da face.
    FACE_POSITION = [0,-30]
    #Posição do level do inimigo.
    LEVEL_POSITION = [150, -24]#[290, 0]
    #Posição do numero  de HP
    HP_NUMBER_POSITION = [230, 5]
    #Definição do espaço da palavra HP e o valor de numérico.
    HP_STRING_SPACE = 36
    #Ativar efeito wave
    HP_NUMBER_WAVE_EFFECT = true
    #Definição da palavra Level.
    LEVEL_WORD = "Level "
    #Velocidade de animação do medidor
    METER_ANIMATION_SPEED = 10   
    #Definição do tamanho da fonte.
    FONT_SIZE = 16
    #Ativar contorno na fonte.
    FONT_BOLD = true
    #Fonte em itálico.
    FONT_ITALIC = true
    #Definição da cor da fonte.
    FONT_COLOR = Color.new(255,255,255)
    #Definição da prioridade da HUD.
    PRIORITY_Z = 50
end

#==============================================================================
# ■ Game System
#==============================================================================
class Game_System
  
attr_accessor :boss_hp_meter
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------  
alias mog_boss_hp_meter_initialize initialize
def initialize
     ix = MOG_BOSS_HP_METER::LAYOUT_POSITION[0]
     iy = MOG_BOSS_HP_METER::LAYOUT_POSITION[1]
     @boss_hp_meter = [ix,iy,false,"",0,1,0,nil,0,false]
     mog_boss_hp_meter_initialize
end
  
end

#==============================================================================
# ■ Game Enemy
#==============================================================================
class Game_Enemy < Game_Battler
   
  attr_accessor :boss_hp_meter
  attr_accessor :boss_hp_number
  attr_accessor :level
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  alias mog_boss_hp_meter_initialize initialize
  def initialize(index, enemy_id)
      mog_boss_hp_meter_initialize(index, enemy_id)
      @boss_hp_meter = enemy.note =~ /<Boss HP Meter>/ ? true : false
      @boss_hp_number = enemy.note =~ /<Boss HP Hide Number>/ ? false : true
      @level = enemy.note =~ /<Level = (\d+)>/i ? $1 : nil
  end  

end

#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp
  
  attr_accessor :battle_end
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------  
  alias mog_boss_hp_meter_initialize initialize
  def initialize
      @battle_end = false
      mog_boss_hp_meter_initialize
  end  

end

#==============================================================================
# ■ Game Interpreter
#==============================================================================
class Game_Interpreter
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------   
def boss_hp_position(x = 0,y = 0)
     $game_system.boss_hp_meter[0] = x
     $game_system.boss_hp_meter[1] = y
end
  
end

#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp

  attr_accessor :cache_boss_hp
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------   
  alias mog_boss_hp_initialize initialize
  def initialize
      mog_boss_hp_initialize
      cache_bosshp
  end
  
#--------------------------------------------------------------------------
# ● Cache Bosshp
#--------------------------------------------------------------------------  
  def cache_bosshp
      @cache_boss_hp = []
      @cache_boss_hp.push(Cache.system("Battle_Boss_Meter_Layout"))
      @cache_boss_hp.push(Cache.system("Battle_Boss_Meter"))
      @cache_boss_hp.push(Cache.system("Battle_Boss_Number"))
  end
  
end

#==============================================================================
# ■ Boss HP Meter
#==============================================================================
class Boss_HP_Meter
  include MOG_BOSS_HP_METER
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------  
  def initialize(viewport = nil)
      clear_enemy_setup
      @hp_vieport = nil
      check_boss_avaliable
  end
  
  #--------------------------------------------------------------------------
  # ● Clear Enemy Setup
  #--------------------------------------------------------------------------   
  def clear_enemy_setup
      @name = ""   
      @hp = 0
      @hp2 = 0
      @hp3 = 0
      @maxhp = 0
      @hp_old = 0
      @level = nil
      $game_system.boss_hp_meter[2] = false
      $game_system.boss_hp_meter[3] = ""
      $game_system.boss_hp_meter[4] = 0
      $game_system.boss_hp_meter[5] = 1
      $game_system.boss_hp_meter[7] = nil
      $game_system.boss_hp_meter[8] = 0
      $game_system.boss_hp_meter[9] = true
  end

  #--------------------------------------------------------------------------
  # ● Check Boss Avaliable
  #--------------------------------------------------------------------------   
  def check_boss_avaliable
      return if $game_troop.all_dead?
      for i in $game_troop.members
          if i.boss_hp_meter and !i.hidden? and i.hp > 0
             create_boss_hp_meter(i)
             break
          end
      end
  end

  #--------------------------------------------------------------------------
  # ● Create Boss HP Meter
  #--------------------------------------------------------------------------      
  def create_boss_hp_meter(i)
      $game_system.boss_hp_meter[2] = true
      $game_system.boss_hp_meter[3] = i.name
      $game_system.boss_hp_meter[4] = i.hp
      $game_system.boss_hp_meter[5] = i.mhp
      $game_system.boss_hp_meter[6] = i.hp
      $game_system.boss_hp_meter[7] = i.level rescue nil
      $game_system.boss_hp_meter[8] = 0
      $game_system.boss_hp_meter[9] = i.boss_hp_number
      $game_system.boss_hp_meter[10] = i.enemy_id
      refresh_hp_meter
      create_layout
      create_meter
      create_name
      create_face
      create_level
      create_hp_number
  end
   
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------        
  def create_layout
      return if @layout != nil
      @layout = Sprite.new
      @layout.bitmap = $game_temp.cache_boss_hp[0]
      @layout.x = $game_system.boss_hp_meter[0]
      @layout.y = $game_system.boss_hp_meter[1]
      @layout.viewport = @hp_vieport
      @layout.z = PRIORITY_Z
  end
  
  #--------------------------------------------------------------------------
  # ● Create Meter
  #--------------------------------------------------------------------------         
  def create_meter
      return if @meter_image != nil
      hp_setup
      @meter_image = $game_temp.cache_boss_hp[1]
      @meter_cw = @meter_image.width / 3
      @meter_ch = @meter_image.height / 2
      @meter = Sprite.new
      @meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
      @meter.z = @layout.z + 1
      @meter.x = @layout.x + METER_POSITION[0]
      @meter.y = @layout.y + METER_POSITION[1]
      @meter.viewport = @hp_vieport
      @hp_flow = 0
      @hp_flow_max = @meter_cw * 2
      update_hp_meter
  end

  #--------------------------------------------------------------------------
  # ● Create Name
  #--------------------------------------------------------------------------            
  def create_name
      @name_sprite = Sprite.new
      @name_sprite.bitmap = Bitmap.new(200,32)
      @name_sprite.z = @layout.z + 2
      @name_sprite.x = @layout.x + NAME_POSITION[0]
      @name_sprite.y = @layout.y + NAME_POSITION[1]
      @name_sprite.bitmap.font.size = FONT_SIZE
      @name_sprite.bitmap.font.bold = FONT_BOLD
      @name_sprite.bitmap.font.italic = FONT_ITALIC
      @name_sprite.bitmap.font.color = FONT_COLOR
      @name_sprite.viewport = @hp_vieport
      refresh_name
  end
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------
  def create_face
      @face_sprite = Sprite.new
      @face_sprite.x = @layout.x + FACE_POSITION[0]
      @face_sprite.y = @layout.y + FACE_POSITION[1]
      @face_sprite.z = @layout.z + 2
      @face_sprite.viewport = @hp_vieport
      refresh_face
  end

  #--------------------------------------------------------------------------
  # ● Create Level
  #--------------------------------------------------------------------------  
  def create_level
      @level_sprite = Sprite.new
      @level_sprite.bitmap = Bitmap.new(120,32)
      @level_sprite.z = @layout.z + 2
      @level_sprite.x = @layout.x + LEVEL_POSITION[0]
      @level_sprite.y = @layout.y + LEVEL_POSITION[1]
      @level_sprite.bitmap.font.size = FONT_SIZE
      @level_sprite.bitmap.font.bold = FONT_BOLD
      @level_sprite.bitmap.font.italic = FONT_ITALIC
      @level_sprite.bitmap.font.color = FONT_COLOR
      @level_sprite.viewport = @hp_vieport
      refresh_level
  end
  
  #--------------------------------------------------------------------------
  # ● Create HP Number
  #--------------------------------------------------------------------------   
  def create_hp_number
      @hp2 = $game_system.boss_hp_meter[4]
      @hp3 = @hp2
      @hp_old2 = @hp2
      @hp_ref = @hp_old2
      @hp_refresh = false   
      @hp_number_image = $game_temp.cache_boss_hp[2]
      @hp_cw = @hp_number_image.width / 10
      @hp_ch = @hp_number_image.height / 2
      @hp_ch2 = 0
      @hp_ch_range = HP_NUMBER_WAVE_EFFECT == true ? @hp_ch / 3 : 0
      @hp_number_sprite = Sprite.new
      @hp_number_sprite.bitmap = Bitmap.new(@hp_number_image.width, @hp_ch * 2)
      @hp_number_sprite.z = @layout.z + 2
      @hp_number_sprite.x = @layout.x + HP_NUMBER_POSITION[0]
      @hp_number_sprite.y = @layout.y + HP_NUMBER_POSITION[1]
      @hp_number_sprite.viewport = @hp_vieport
      @hp_number_sprite.visible = $game_system.boss_hp_meter[9]
      refresh_hp_number
  end
  
  #--------------------------------------------------------------------------
  # ● update_hp_number
  #--------------------------------------------------------------------------
  def update_hp_number
      return if @hp_number_sprite == nil
      @hp_number_sprite.visible = $game_system.boss_hp_meter[9]
      if @hp_old2 < $game_system.boss_hp_meter[4]
         number_refresh_speed
         @hp2 += @hp_ref     
         reset_hp_number  if @hp2 >= $game_system.boss_hp_meter[4]
      elsif @hp_old2 > $game_system.boss_hp_meter[4]           
         number_refresh_speed
         @hp2 -= @hp_ref               
         reset_hp_number if @hp2 <= $game_system.boss_hp_meter[4]
      end  
  end   
  
  #--------------------------------------------------------------------------
  # ● Number Refresh Speed
  #--------------------------------------------------------------------------
  def number_refresh_speed
      @hp_refresh = true  
      @hp_ref = (3 * (@hp_old2 - $game_system.boss_hp_meter[4]).abs / 100) rescue nil
      @hp_ref = 1 if @hp_ref == nil or @hp_ref < 1
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh HP Number
  #--------------------------------------------------------------------------      
  def refresh_hp_number
      return if @hp_number_sprite == nil
      @hp_refresh = false
      @hp_number_sprite.bitmap.clear
      number = @hp2.abs.to_s.split(//)
      @hp_ch2 = 0
      for r in 0..number.size - 1
          number_abs = number[r].to_i
          nsrc_rect = Rect.new(@hp_cw * number_abs, 0, @hp_cw, @hp_ch)
          @hp_ch2 = @hp_ch2 == @hp_ch_range ? 0 : @hp_ch_range
          @hp_number_sprite.bitmap.blt(HP_STRING_SPACE + (@hp_cw *  r), @hp_ch2, @hp_number_image, nsrc_rect)        
      end      
      nsrc_rect = Rect.new(0, @hp_ch, @hp_number_image.width, @hp_ch)
      @hp_number_sprite.bitmap.blt(0, 0, @hp_number_image, nsrc_rect)     
  end
  
  #--------------------------------------------------------------------------
  # ● Reset HP Number
  #--------------------------------------------------------------------------        
  def reset_hp_number
      @hp_refresh = true
      @hp_old2 = $game_system.boss_hp_meter[4]
      @hp2 = $game_system.boss_hp_meter[4]
      @hp_ref = 0
      refresh_hp_number
  end
   
  #--------------------------------------------------------------------------
  # ● Refresh Level
  #--------------------------------------------------------------------------   
  def refresh_level
      return if @level_sprite == nil
      @level_sprite.bitmap.clear
      @level = $game_system.boss_hp_meter[7]
      return if @level == nil
      level_text = LEVEL_WORD + @level.to_s
      @level_sprite.bitmap.draw_text(0,0,120,32,level_text.to_s)
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Face
  #--------------------------------------------------------------------------  
  def refresh_face
      return if @face_sprite == nil
      dispose_bitmap_face
      @face_sprite.bitmap = Cache.face(@name + "_f") rescue nil
      @face_sprite.bitmap = Cache.face("BF_" + $game_system.boss_hp_meter[10].to_s) rescue nil if @face_sprite.bitmap == nil
      @face_sprite.bitmap = Cache.face("") if @face_sprite.bitmap == nil
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Name
  #--------------------------------------------------------------------------              
  def refresh_name
      return if @name_sprite == nil
      @name = $game_system.boss_hp_meter[3]   
      @name_sprite.bitmap.clear
      @name_sprite.bitmap.draw_text(0,0,190,32,@name.to_s)
      refresh_face
      refresh_level
      reset_hp_number
      @hp_old = @meter_cw * @hp / @maxhp
  end
  
  #--------------------------------------------------------------------------
  # ● HP Setup
  #--------------------------------------------------------------------------            
  def hp_setup
      @hp = $game_system.boss_hp_meter[4]
      @maxhp = $game_system.boss_hp_meter[5]
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------  
  def dispose
      dispose_layout
      dispose_meter
      dispose_name
      dispose_face
      dispose_level
      dispose_hp_number      
  end

  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------              
  def dispose_name
      return if @name_sprite == nil
      @name_sprite.bitmap.dispose
      @name_sprite.dispose
      @name_sprite = nil
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------   
  def dispose_layout
      return if @layout == nil
      @layout.dispose
      @layout = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Meter
  #--------------------------------------------------------------------------      
  def dispose_meter
      return if @meter == nil
      @meter.bitmap.dispose
      @meter.dispose
      @meter = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Face
  #--------------------------------------------------------------------------  
  def dispose_face
      return if @face_sprite == nil
      dispose_bitmap_face
      @face_sprite.dispose
      @face_sprite = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Bitmap Face
  #--------------------------------------------------------------------------   
  def dispose_bitmap_face
      return if @face_sprite == nil
      return if @face_sprite.bitmap == nil
      @face_sprite.bitmap.dispose rescue nil
      @face_sprite.bitmap = nil
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Level
  #--------------------------------------------------------------------------   
  def dispose_level
      return if @level_sprite == nil
      @level_sprite.bitmap.dispose
      @level_sprite.dispose
      @level_sprite = nil
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose HP Number
  #--------------------------------------------------------------------------      
  def dispose_hp_number
      return if @hp_number_sprite == nil
      @hp_number_sprite.bitmap.dispose
      @hp_number_sprite.dispose
  end   
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update
      refresh_hp_meter
      refresh_hp_number if @hp_refresh
      update_hp_meter
      update_hp_number
      update_fade_end
      update_visible
  end
  
  #--------------------------------------------------------------------------
  # ● Update Visible
  #--------------------------------------------------------------------------  
  def update_visible
      return if @meter_image == nil
      vis = bhp_visible?
      @layout.visible = vis   
      @meter.visible = vis   
      @name_sprite.visible = vis   
      @face_sprite.visible = vis   
      @level_sprite.visible = vis   
      @hp_number_sprite.visible = vis   
  end
  
  #--------------------------------------------------------------------------
  # ● Bhp Visible?
  #--------------------------------------------------------------------------  
  def bhp_visible?
      return false if $game_message.visible
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Update Fade End
  #--------------------------------------------------------------------------   
  def update_fade_end
      return if !$game_temp.battle_end
      return if @meter_image == nil
      @layout.opacity -= 5
      @meter.opacity -= 5
      @name_sprite.opacity -= 5
      @face_sprite.opacity -= 5
      @level_sprite.opacity -= 5
      @hp_number_sprite.opacity -= 5
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh HP Meter
  #--------------------------------------------------------------------------         
  def refresh_hp_meter
      return if !$game_system.boss_hp_meter[2]
      $game_system.boss_hp_meter[2] = false
      hp_setup
      refresh_name if @name != $game_system.boss_hp_meter[3]
  end
  
  #--------------------------------------------------------------------------
  # ● Update HP Meter
  #--------------------------------------------------------------------------            
  def update_hp_meter
      return if @meter_image == nil
      @meter.bitmap.clear
      hp_width = @meter_cw * @hp / @maxhp      
      execute_damage_flow(hp_width)      
      hp_src_rect = Rect.new(@hp_flow, 0,hp_width, @meter_ch)
      @meter.bitmap.blt(0,0, @meter_image, hp_src_rect)  
      @hp_flow += METER_ANIMATION_SPEED
      @hp_flow = 0 if @hp_flow >= @hp_flow_max
  end  
   
  #--------------------------------------------------------------------------
  # ● Execute Damage Flow
  #--------------------------------------------------------------------------
  def execute_damage_flow(hp_width)
      return if @hp_old == hp_width
      n = (@hp_old - hp_width).abs * 3 / 100
      damage_flow = [[n, 2].min,0.5].max
      @hp_old -= damage_flow      
      @hp_old = hp_width if @hp_old <= hp_width
      src_rect_old = Rect.new(0,@meter_ch, @hp_old, @meter_ch)
      @meter.bitmap.blt(0,0, @meter_image, src_rect_old)      
  end   
  
end

#==============================================================================
# ■ Spriteset Battle
#==============================================================================
class Spriteset_Battle
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------  
  alias mog_enemy_bhp_initialize initialize
  def initialize
      mog_enemy_bhp_initialize
      create_boss_hp_meter
  end
  
  #--------------------------------------------------------------------------
  # ● Create Boss HP Meter
  #--------------------------------------------------------------------------  
  def create_boss_hp_meter
      @boss_hp_meter = Boss_HP_Meter.new(@viewport1)
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------      
  alias mog_enemy_bhp_dispose dispose
  def dispose
      dispose_boss_hp_meter   
      mog_enemy_bhp_dispose
  end  

  #--------------------------------------------------------------------------
  # ● Dispose Boss HP Meter
  #--------------------------------------------------------------------------         
  def dispose_boss_hp_meter
      return if @boss_hp_meter == nil
      @boss_hp_meter.dispose
      @boss_hp_meter = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------        
  alias mog_enemy_bhp_update update
  def update
      mog_enemy_bhp_update
      update_boss_hp_meter
  end
  
  #--------------------------------------------------------------------------
  # ● Update Boss HP Meter
  #--------------------------------------------------------------------------            
  def update_boss_hp_meter
      return if @boss_hp_meter == nil
      @boss_hp_meter.update
  end
   
end

#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
  
  #--------------------------------------------------------------------------
  # ● Item Apply
  #--------------------------------------------------------------------------        
  alias mog_boss_hp_item_apply item_apply
  def item_apply(user, item)
      check_boss_hp_before
      mog_boss_hp_item_apply(user, item)
      check_boss_hp_after
  end
  
  #--------------------------------------------------------------------------
  # ● Regenerate HP
  #--------------------------------------------------------------------------
  alias mog_boss_hp_regenerate_hp regenerate_hp
  def regenerate_hp
      check_boss_hp_before
      mog_boss_hp_regenerate_hp
      check_boss_hp_after
  end  
  
  #--------------------------------------------------------------------------
  # ● Check Boss HP Before
  #--------------------------------------------------------------------------         
  def check_boss_hp_before
      return if self.is_a?(Game_Actor)
      return if !self.boss_hp_meter
      $game_system.boss_hp_meter[6] = self.hp
  end
  
  #--------------------------------------------------------------------------
  # ● Check Boss HP After
  #--------------------------------------------------------------------------            
  def check_boss_hp_after
      return if self.is_a?(Game_Actor)
      return if !self.boss_hp_meter
      $game_system.boss_hp_meter[2] = true
      $game_system.boss_hp_meter[3] = self.name
      $game_system.boss_hp_meter[4] = self.hp
      $game_system.boss_hp_meter[5] = self.mhp
      $game_system.boss_hp_meter[7] = self.level rescue nil     
      $game_system.boss_hp_meter[9] = self.boss_hp_number
  end
  
end

#==============================================================================
# ■ Game_Interpreter
#==============================================================================
class Game_Interpreter

  #--------------------------------------------------------------------------
  # ● Check Boss Meter
  #--------------------------------------------------------------------------   
  def check_boss_meter
      return if !SceneManager.scene_is?(Scene_Battle)
      iterate_enemy_index(@params[0]) do |enemy|
        if enemy.boss_hp_meter
           $game_system.boss_hp_meter[2] = true
           $game_system.boss_hp_meter[3] = enemy.name
           $game_system.boss_hp_meter[4] = enemy.hp
           $game_system.boss_hp_meter[5] = enemy.mhp
           $game_system.boss_hp_meter[6] = enemy.hp   
           $game_system.boss_hp_meter[7] = enemy.level rescue nil
           $game_system.boss_hp_meter[9] = enemy.boss_hp_number
        end
     end
  end

  #--------------------------------------------------------------------------
  # ● Command 331
  #--------------------------------------------------------------------------  
  alias mog_boss_meter_command_331 command_331
  def command_331
      mog_boss_meter_command_331
      check_boss_meter
  end
  
  #--------------------------------------------------------------------------
  # ● Command 334
  #--------------------------------------------------------------------------  
  alias mog_boss_meter_command_334 command_334
  def command_334
      mog_boss_meter_command_334
      check_boss_meter
  end   
  
end

#==============================================================================
# ■ BattleManager
#==============================================================================
class << BattleManager
  
  #--------------------------------------------------------------------------
  # ● Init Members
  #--------------------------------------------------------------------------         
  alias mog_boss_meter_init_members init_members
  def init_members
      $game_temp.battle_end = false
      mog_boss_meter_init_members
  end  
  
  #--------------------------------------------------------------------------
  # ● Process Victory
  #--------------------------------------------------------------------------            
  alias mog_boss_meter_process_victory process_victory
  def process_victory
      $game_temp.battle_end = true
      mog_boss_meter_process_victory
  end
  
  #--------------------------------------------------------------------------
  # ● Process Abort
  #--------------------------------------------------------------------------            
  alias mog_boss_meter_process_abort process_abort
  def process_abort
      $game_temp.battle_end = true
      mog_boss_meter_process_abort
  end

  #--------------------------------------------------------------------------
  # ● Process Defeat
  #--------------------------------------------------------------------------            
  alias mog_boss_meter_process_defeat process_defeat
  def process_defeat
      $game_temp.battle_end = true
      mog_boss_meter_process_defeat
  end
  
end[/pre]


这次帮你编辑了一下,下次请注意发代码的时候尽量使用代码框<>哦

点评

话说怎么私信taroxd大大,我找不到只能留言  发表于 2017-2-7 11:56
多谢解答VIPARCHER  发表于 2017-2-7 11:55
其实那些只是针对恶意扰乱秩序的人,你正常回答就好了。你对任何版务操作有异议都可以私信,艾特,举报,班务区发帖等方式提出疑问  发表于 2017-2-7 11:45
你可以一个回复里用代码框和折叠一起使用来发多个代码,另外如果非要连帖才能回答,正常是不会处罚的。你别看版规似乎非常严苛  发表于 2017-2-7 11:42
下次用代码框了。嘻嘻  发表于 2017-2-7 11:37
P1不太上了,有问题加个Q1286124843,不管是脚本还是游戏问题都可以来找我
回复 1 0

使用道具 举报

梦石
0
星屑
1345
在线时间
378 小时
注册时间
2015-6-16
回帖
526
发表于 2017-2-7 10:10:26 | 显示全部楼层
<Boss HP Meter>放到敌人的备注栏就行,你可以去插入图片来增加效果,不加也不会BUG。看你乐意了,要不是那个紫色头像管理太烦。这6R我都不想帮了,私下解决难道不行?
P1不太上了,有问题加个Q1286124843,不管是脚本还是游戏问题都可以来找我
回复

使用道具 举报

梦石
0
星屑
55
在线时间
21 小时
注册时间
2016-10-13
回帖
24
 楼主| 发表于 2017-2-7 13:37:47 | 显示全部楼层
感謝WWW    &不好意思沒看清楚要怎麼把它弄整齊  我試試看WW
回复

使用道具 举报

梦石
0
星屑
55
在线时间
21 小时
注册时间
2016-10-13
回帖
24
 楼主| 发表于 2017-2-7 13:54:26 | 显示全部楼层
然後我刪完這行換355行出錯QAQ  難道  相衝了?    ..不好意思不太會改腳本  新手一隻QQ   https://rpg.blue/forum.php?mod=attachment&aid=MzIyMDE4fGRhODQ0MjAwfDE3OTEwNTA5MDB8MHw%3D
求解.jpg

点评

VIPARCHER,这样算不算我水贴。我那么晚来发素材  发表于 2017-2-10 11:59
论坛的bug导致的,你看图书馆的Q&A里面有解释,你把 [url=home.php?mod=space&uid=1330256]@meter[/url] 改成 @meter 就好了  发表于 2017-2-7 14:43
回复

使用道具 举报

梦石
0
星屑
55
在线时间
21 小时
注册时间
2016-10-13
回帖
24
 楼主| 发表于 2017-2-8 03:11:48 | 显示全部楼层
本帖最后由 sam870716 于 2017-2-9 13:05 编辑

@300英雄
摁摁 首先有好幾個問題要問WWWW 不好意思  


簡單來說...求解這腳本詳細教學WWW(欠打
這腳本好像非常萬能 非常黑科技  但是要解決的問題也比較多一點(畢竟800多行嘛 揪咪)

p.s這三條長度都一樣 只是ps隨便塗塗的 #  印象中是100x20pixel

痾  不加也會bug喔 我目前用上去... 我把可能相衝的腳本拿下來試過 也是bug QAQ

01首先 這是跟食人花戰鬥 下面沒丟備註出來的東西 (史萊姆不丟備柱也不會bug 但也不會有血條) ... ... ... ...

01首先 這是跟食人花戰鬥 下面沒丟備註出來的東西 (史萊姆不丟備柱也不會bug 但也不會有血條) ... ... ...  ...

02這是我不知道它的圖要幹嘛 隨便丟幾個出來試試的圖(這腳本需要的圖)

02這是我不知道它的圖要幹嘛 隨便丟幾個出來試試的圖(這腳本需要的圖)

03它只會顯示史萊姆b 然後 先不論血量條 數字條那裡怪怪的 我放數字的圖上去也怪怪的(不會用) ... ... .. ...

03它只會顯示史萊姆b 然後 先不論血量條  數字條那裡怪怪的  我放數字的圖上去也怪怪的(不會用) ... ... .. ...

04打死史萊姆A的變化

04打死史萊姆A的變化

点评

素材已发  发表于 2017-2-10 11:49
@300英雄  发表于 2017-2-8 03:21
回复

使用道具 举报

梦石
0
星屑
1345
在线时间
378 小时
注册时间
2015-6-16
回帖
526
发表于 2017-2-10 11:47:39 | 显示全部楼层
BUG那么大啊。素材不是这样的,我发给你了。先试试看。我这边更改了坐标,所以会位置不一样
Battle_Boss_Meter.png
Battle_Boss_Meter_Layout.png
Battle_Boss_Number.png
P1不太上了,有问题加个Q1286124843,不管是脚本还是游戏问题都可以来找我
回复

使用道具 举报

梦石
0
星屑
1345
在线时间
378 小时
注册时间
2015-6-16
回帖
526
发表于 2017-2-10 11:54:15 | 显示全部楼层
本帖最后由 300英雄 于 2017-2-10 12:03 编辑
sam870716 发表于 2017-2-8 03:11
@300英雄
摁摁 首先有好幾個問題要問WWWW 不好意思  


你的munbers是需要数组的,而你全黑,显示肯定也是全黑的,这是正常现象,按照楼主的提出的,血条不够长,数字没调位置。我刚拿来的时候血条是超级长的。而楼主很短,数字记得极坐标大概在右边。所以会在右边显示。楼主的问题出在素材上面。
[]=for nillness,应该是没素材,他框不出了
效果预览图
QQ截图20170210115910.png
P1不太上了,有问题加个Q1286124843,不管是脚本还是游戏问题都可以来找我
回复 1 0

使用道具 举报

梦石
0
星屑
55
在线时间
21 小时
注册时间
2016-10-13
回帖
24
 楼主| 发表于 2017-2-11 09:22:59 | 显示全部楼层
300英雄 发表于 2017-2-10 11:54
你的munbers是需要数组的,而你全黑,显示肯定也是全黑的,这是正常现象,按照楼主的提出的,血条不够长 ...

@300英雄 非常感謝WWWW  這樣就算要改圖跟改腳本也知道要往哪個方向改了~~   


然後最後一個問題~  這麽血條模組是不是比較適用於單之怪物  (例如boss)
還是它有特殊的切換方法 (戰鬥中基本上它只會顯示最後一個攻擊你 或者是開場第一隻怪)
111.jpg

点评

一般带血条的只有显示血量度,而不显示数字,我这个脚本能显示还是不错的。而且多个怪也能看,就是默认显示1号怪为主。想看伤害别的怪即可  发表于 2017-2-11 11:08
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部