查看: 3410|回复: 9

[已经解决] 敌人血条问题````求帮忙``

[复制链接]
梦石
0
星屑
50
在线时间
525 小时
注册时间
2012-2-23
回帖
139
发表于 2013-6-20 14:34:27 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 alwsheng 于 2013-7-1 16:00 编辑

这个敌人血条,如何让血条一直显示着,而不是打完之后才显示````
#==============================================================================
# +++ MOG - Enemy HP Meter  (v1.1) +++
#==============================================================================
# By Moghunter
# http://www.atelier-rgss.com/
#==============================================================================
# Apresenta um medidor animado com o HP do inimigo.
#==============================================================================
# Para ocultar o HP do inimigo use a TAG abaixo na caixa de notas.
#
# <Hide HP>
#
#==============================================================================
# Serão necessários as imagens.
#
# Battle_Enemy_HP_Layout.png
# Battle_Enemy_HP_Meter.png
#
#
#==============================================================================

#==============================================================================
# ● Histórico (Version History)
#==============================================================================
# v 1.1 - Corrigido o erro de crash randômico. (relativo a dispose de imagem.)
#==============================================================================

module MOG_ENEMY_HP
   #Posição geral do medidor em relação ao battler.
   POSITION_CORRECTION = [0,0]
   #Posição do medidor de HP.
   HP_METER_POSITION = [2,4]
   #Prioridade do medidor na tela.
   PRIORITY_Z = 101   
end

#==============================================================================
# ■ Game Enemy
#==============================================================================
class Game_Enemy < Game_Battler

  attr_accessor :hp_meter_active               
  
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  alias mog_enemy_hp_initialize initialize
  def initialize(index, enemy_id)
      mog_enemy_hp_initialize(index, enemy_id)
      hide = enemy.note =~ /<Hide HP>/i ? true : false
      @hp_meter_active = [true,hide]
  end  

end

#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
  
  #--------------------------------------------------------------------------
  # ● Item Apply
  #--------------------------------------------------------------------------  
   alias mog_enemy_hp_item_apply item_apply
   def item_apply(user, item)
       mog_enemy_hp_item_apply(user, item)
       if self.is_a?(Game_Enemy)
          self.hp_meter_active[0] = true if @result.hp_damage != 0
       end
   end

  #--------------------------------------------------------------------------
  # ● Regenerate HP
  #--------------------------------------------------------------------------
  alias mog_enemy_hp_regenerate_hp regenerate_hp
  def regenerate_hp
      mog_enemy_hp_regenerate_hp
      if self.is_a?(Game_Enemy)
         self.hp_meter_active[0] = true if @result.hp_damage != 0      
      end         
  end
   
end
  

#==============================================================================
# ■ Battle_Hud
#==============================================================================
class Enemy_HP
  include MOG_ENEMY_HP
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------   
  def initialize(viewport = nil,enemy)
      dispose
      @enemy = enemy
      @fade_time = -1
      create_layout   
      create_hp_meter      
      b_pos = [enemy.screen_x - (@layout.width / 2) + POSITION_CORRECTION[0], enemy.screen_y + POSITION_CORRECTION[1] - (@layout.height / 2)]
      @layout.opacity = 0
      @org_pos1 = [b_pos[0],b_pos[1]]
      @layout.x = @org_pos1[0]
      @layout.y = @org_pos1[1]
      @layout.visible = false
      @hp_meter.opacity = 0
      @hp_meter.visible = false
      @org_pos2 = [b_pos[0] + HP_METER_POSITION[0], b_pos[1] + HP_METER_POSITION[1]]
      @hp_meter.x = @org_pos2[0]
      @hp_meter.y = @org_pos2[1]
      @hp_meter.viewport = viewport
      @hp_meter.z = PRIORITY_Z
      @layout.viewport = viewport
      @layout.z = PRIORITY_Z
      @enemy.hp_meter_active[0] = false
      @Hide = @enemy.hp_meter_active[1]
  end
  
  #--------------------------------------------------------------------------
  # ● Create HP Meter
  #--------------------------------------------------------------------------        
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = Cache.system("Battle_Enemy_HP_Layout")
  end
   
  #--------------------------------------------------------------------------
  # ● Create HP Meter
  #--------------------------------------------------------------------------      
  def create_hp_meter
      @meter_image = Cache.system("Battle_Enemy_HP_Meter")
      @meter_cw = @meter_image.width
      @meter_ch = @meter_image.height / 2      
      @hp_meter = Sprite.new
      @hp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
      @hp_width_old = @meter_cw * @enemy.hp / @enemy.mhp
    end  
  
  #--------------------------------------------------------------------------
  # ● Hp Flow Update
  #--------------------------------------------------------------------------
  def update_hp_flow
      return if !@layout.visible     
      hp_width = @meter_cw * @enemy.hp / @enemy.mhp
      @hp_meter.bitmap.clear      
      execute_damage_flow(hp_width)
      hp_src_rect = Rect.new(0, 0,hp_width, @meter_ch)
      @hp_meter.bitmap.blt(0,0, @meter_image, hp_src_rect)
  end
   
  #--------------------------------------------------------------------------
  # ● Execute Damage Flow
  #--------------------------------------------------------------------------
  def execute_damage_flow(hp_width)
      n = (@hp_width_old - hp_width).abs * 3 / 100
      damage_flow = [[n, 2].min,0.5].max
      @hp_width_old -= damage_flow
      if @hp_width_old <= hp_width
         @hp_width_old = hp_width
      end   
      src_rect_old = Rect.new(0,@meter_ch,@hp_width_old, @meter_ch)
      @hp_meter.bitmap.blt(0,0, @meter_image, src_rect_old)      
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------      
  def dispose
      return if @meter_image == nil
      @layout.bitmap.dispose
      @layout.dispose
      @hp_meter.bitmap.dispose
      @hp_meter.dispose
      @meter_image.dispose
      @meter_image = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      return if @meter_image == nil
      return if @hide
      update_fade   
      update_visible
      update_hp_flow
      refresh if @enemy.hp_meter_active[0]
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Fade
  #--------------------------------------------------------------------------        
  def update_fade
      @fade_time -= 1 if @fade_time > 0
      return if @fade_time != 0
      @layout.opacity -= 10
      @hp_meter.opacity -= 10
      @layout.x += 1
      @hp_meter.x += 1
      @fade_time = -1 if @layout.opacity == 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Visible
  #--------------------------------------------------------------------------        
  def update_visible
      return if !@layout.visible
      vis = can_visible?
      @layout.visible = vis
      @hp_meter.visible = vis
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------         
  def refresh     
      @enemy.hp_meter_active[0] = false
      @layout.opacity = 255
      @hp_meter.opacity = 255   
      @layout.visible = true
      @hp_meter.visible = true
      @fade_time = 60
      @layout.x = @org_pos1[0]
      @layout.y = @org_pos1[1]
      @hp_meter.x = @org_pos2[0]
      @hp_meter.y = @org_pos2[1]      
      hp_width = @meter_cw * @enemy.hp / @enemy.mhp
      @hp_width_old = hp_width if @hp_width_old < hp_width
      update_hp_flow
  end
  
  #--------------------------------------------------------------------------
  # ● Can Visible?
  #--------------------------------------------------------------------------         
  def can_visible?
      return false if @layout.opacity == 0      
      return true
  end
   
end

#==============================================================================
# ■ Spriteset Battle
#==============================================================================
class Spriteset_Battle
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------  
  alias mog_enemy_hp_initialize initialize
  def initialize
      mog_enemy_hp_initialize
      create_enemy_hp      
  end
  
  #--------------------------------------------------------------------------
  # ● Create Battle Hud
  #--------------------------------------------------------------------------   
  def create_enemy_hp
      dispose_enemy_hp
      @enemy_hp = []      
      for i in $game_troop.members
          @enemy_hp.push(Enemy_HP.new(@viewport1,i))
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------      
  alias mog_enemy_hp_dispose dispose
  def dispose
      mog_enemy_hp_dispose
      dispose_enemy_hp
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Enemy HP
  #--------------------------------------------------------------------------        
  def dispose_enemy_hp
      return if @enemy_hp == nil
      @enemy_hp.each {|sprite| sprite.dispose }
      @enemy_hp.clear
      @enemy_hp = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------        
  alias mog_enemy_hp_update update
  def update
      mog_enemy_hp_update
      update_enemy_hp
  end
  
  #--------------------------------------------------------------------------
  # ● Update Enemy HP
  #--------------------------------------------------------------------------         
  def update_enemy_hp
      return if @enemy_hp == nil
      @enemy_hp.each {|sprite| sprite.update }
  end  
end

$mog_rgss3_enemy_hp_meter = true   
梦石
0
星屑
50
在线时间
150 小时
注册时间
2010-10-22
回帖
48
发表于 2013-6-20 15:39:30 | 显示全部楼层
把Dispose干掉就好了
XAS GYRO努力制造中
代码什么的最讨厌了!去改别人的才最好玩!
回复

使用道具 举报

梦石
0
星屑
50
在线时间
525 小时
注册时间
2012-2-23
回帖
139
 楼主| 发表于 2013-6-20 15:47:25 | 显示全部楼层
wuchangdao55 发表于 2013-6-20 15:39
把Dispose干掉就好了

怎么干掉?能详细点么?
回复

使用道具 举报

头像被屏蔽
梦石
0
星屑
50
在线时间
6 小时
注册时间
2013-6-12
回帖
4
发表于 2013-6-20 15:55:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

梦石
0
星屑
50
在线时间
525 小时
注册时间
2012-2-23
回帖
139
 楼主| 发表于 2013-6-21 18:25:15 | 显示全部楼层
没人来解答了?`````
回复

使用道具 举报

梦石
1
星屑
2088
在线时间
920 小时
注册时间
2012-10-18
回帖
416

开拓者

发表于 2013-6-21 19:10:57 | 显示全部楼层
本帖最后由 芙蕾娅 于 2013-6-21 19:12 编辑

def update_fade里有两行脚本
@layout.opacity -= 10
@hp_meter.opacity -= 10
删掉即可
还有def initialize(viewport = nil,enemy)
@layout.opacity = 0
@hp_meter.opacity = 0
后面的0改为255即可

评分

参与人数 1星屑 +50 收起 理由
Sion + 50 感谢帮忙

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
525 小时
注册时间
2012-2-23
回帖
139
 楼主| 发表于 2013-6-21 22:38:52 来自手机 | 显示全部楼层
芙蕾娅 发表于 2013-6-21 19:10 def update_fade里有两行脚本 @layout.opacity -= 10 @hp_meter.opacity -= 10

不行吧,照你说的那样弄,血条还是要打一下才会出现,而且会从左往右一直滑过去
回复

使用道具 举报

梦石
0
星屑
50
在线时间
64 小时
注册时间
2013-6-6
回帖
66
发表于 2013-6-22 04:43:46 | 显示全部楼层
[pre lang="ruby" line="1"]#==============================================================================
# +++ MOG - Enemy HP Meter  (v1.1) +++
#==============================================================================
# By Moghunter
# http://www.atelier-rgss.com/
#==============================================================================
# Apresenta um medidor animado com o HP do inimigo.
#==============================================================================
# Para ocultar o HP do inimigo use a TAG abaixo na caixa de notas.
#
# <Hide HP>
#
#==============================================================================
# Serão necessários as imagens.
#
# Battle_Enemy_HP_Layout.png
# Battle_Enemy_HP_Meter.png
#
#
#==============================================================================

#==============================================================================
# ● Histórico (Version History)
#==============================================================================
# v 1.1 - Corrigido o erro de crash randômico. (relativo a dispose de imagem.)
#==============================================================================

module MOG_ENEMY_HP
   #Posição geral do medidor em relação ao battler.
   POSITION_CORRECTION = [0,0]
   #Posição do medidor de HP.
   HP_METER_POSITION = [2,4]
   #Prioridade do medidor na tela.
   PRIORITY_Z = 101   
end

#==============================================================================
# ■ Game Enemy
#==============================================================================
class Game_Enemy < Game_Battler

  attr_accessor :hp_meter_active               
  
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  alias mog_enemy_hp_initialize initialize
  def initialize(index, enemy_id)
      mog_enemy_hp_initialize(index, enemy_id)
      hide = enemy.note =~ /<Hide HP>/i ? true : false ###
      @hp_meter_active = [true,hide]  #[true,hide]
  end  

end

#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
  
  #--------------------------------------------------------------------------
  # ● Item Apply
  #--------------------------------------------------------------------------  
   alias mog_enemy_hp_item_apply item_apply
   def item_apply(user, item)
       mog_enemy_hp_item_apply(user, item)
       if self.is_a?(Game_Enemy)
          self.hp_meter_active[0] = true if @result.hp_damage != 0
       end
   end

  #--------------------------------------------------------------------------
  # ● Regenerate HP
  #--------------------------------------------------------------------------
  alias mog_enemy_hp_regenerate_hp regenerate_hp
  def regenerate_hp
      mog_enemy_hp_regenerate_hp
      if self.is_a?(Game_Enemy)
         self.hp_meter_active[0] = true if @result.hp_damage != 0      
      end         
  end
   
end
  

#==============================================================================
# ■ Battle_Hud
#==============================================================================
class Enemy_HP
  include MOG_ENEMY_HP
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------   
  def initialize(viewport = nil,enemy)
      dispose
      @enemy = enemy
      @fade_time = -1
      create_layout   
      create_hp_meter      
      b_pos = [enemy.screen_x - (@layout.width / 2) + POSITION_CORRECTION[0], enemy.screen_y + POSITION_CORRECTION[1] - (@layout.height / 2)]
      @layout.opacity = 0
      @org_pos1 = [b_pos[0],b_pos[1]]
      @layout.x = @org_pos1[0]
      @layout.y = @org_pos1[1]
      @layout.visible = false
      @hp_meter.opacity = 0
      #@hp_meter.visible = true     #
      @hp_meter.visible = false
      @org_pos2 = [b_pos[0] + HP_METER_POSITION[0], b_pos[1] + HP_METER_POSITION[1]]
      @hp_meter.x = @org_pos2[0]
      @hp_meter.y = @org_pos2[1]
      @hp_meter.viewport = viewport
      @hp_meter.z = PRIORITY_Z
      @layout.viewport = viewport
      @layout.z = PRIORITY_Z
      @enemy.hp_meter_active[0] = true  #@enemy.hp_meter_active[0] = false
      @Hide = @enemy.hp_meter_active[1]
  end
  
  #--------------------------------------------------------------------------
  # ● Create HP Layout
  #--------------------------------------------------------------------------        
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = Cache.system("Battle_Enemy_HP_Layout")
  end
   
  #--------------------------------------------------------------------------
  # ● Create HP Meter
  #--------------------------------------------------------------------------      
  def create_hp_meter
      @meter_image = Cache.system("Battle_Enemy_HP_Meter")
      @meter_cw = @meter_image.width
      @meter_ch = @meter_image.height / 2      
      @hp_meter = Sprite.new
      @hp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
      @hp_width_old = @meter_cw * @enemy.hp / @enemy.mhp
    end  
  
  #--------------------------------------------------------------------------
  # ● Hp Flow Update
  #--------------------------------------------------------------------------
  def update_hp_flow
      return if !@layout.visible     
      hp_width = @meter_cw * @enemy.hp / @enemy.mhp
      @hp_meter.bitmap.clear      
      execute_damage_flow(hp_width)
      hp_src_rect = Rect.new(0, 0,hp_width, @meter_ch)
      @hp_meter.bitmap.blt(0,0, @meter_image, hp_src_rect)
  end
   
  #--------------------------------------------------------------------------
  # ● Execute Damage Flow
  #--------------------------------------------------------------------------
  def execute_damage_flow(hp_width)
      n = (@hp_width_old - hp_width).abs * 3 / 100
      damage_flow = [[n, 2].min,0.5].max
      @hp_width_old -= damage_flow
      if @hp_width_old <= hp_width
         @hp_width_old = hp_width
      end   
      src_rect_old = Rect.new(0,@meter_ch,@hp_width_old, @meter_ch)
      @hp_meter.bitmap.blt(0,0, @meter_image, src_rect_old)      
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------      
  def dispose
      return if @meter_image == nil
      @layout.bitmap.dispose
      @layout.dispose
      @hp_meter.bitmap.dispose
      @hp_meter.dispose
      @meter_image.dispose
      @meter_image = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      return if @meter_image == nil
      return if @hide
      update_fade   
      update_visible
      update_hp_flow
      refresh if @enemy.hp_meter_active[0]
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Fade
  #--------------------------------------------------------------------------        
  def update_fade
      @fade_time -= 1 if @fade_time > 0
      return if @fade_time != 0
      @layout.opacity -= 10
      @hp_meter.opacity -= 10
      @layout.x += 1
      @hp_meter.x += 1
      @fade_time = -1 if @layout.opacity == 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Visible
  #--------------------------------------------------------------------------        
  def update_visible

      return if !@layout.visible
      vis = can_visible?
      @layout.visible = vis
      @hp_meter.visible = vis
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------         
  def refresh     
      @enemy.hp_meter_active[0] = false
      @layout.opacity = 255
      @hp_meter.opacity = 255   
      @layout.visible = true
      @hp_meter.visible = true
      @fade_time = 60 if @enemy.hp == 0 ##
      @layout.x = @org_pos1[0]
      @layout.y = @org_pos1[1]
      @hp_meter.x = @org_pos2[0]
      @hp_meter.y = @org_pos2[1]      
      hp_width = @meter_cw * @enemy.hp / @enemy.mhp
      @hp_width_old = hp_width if @hp_width_old < hp_width
      update_hp_flow
  end
  
  #--------------------------------------------------------------------------
  # ● Can Visible?
  #--------------------------------------------------------------------------         
  def can_visible?
      ##return false if @enemy.hp == 0 ##
      return false if @layout.opacity == 0   
      return true
  end   
end

#==============================================================================
# ■ Spriteset Battle
#==============================================================================
class Spriteset_Battle
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------  
  alias mog_enemy_hp_initialize initialize
  def initialize
      mog_enemy_hp_initialize
      create_enemy_hp      
  end
  
  #--------------------------------------------------------------------------
  # ● Create Battle Hud
  #--------------------------------------------------------------------------   
  def create_enemy_hp
      dispose_enemy_hp
      @enemy_hp = []      
      for i in $game_troop.members
          @enemy_hp.push(Enemy_HP.new(@viewport1,i))
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------      
  alias mog_enemy_hp_dispose dispose
  def dispose
      mog_enemy_hp_dispose
      dispose_enemy_hp
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Enemy HP
  #--------------------------------------------------------------------------        
  def dispose_enemy_hp
      return if @enemy_hp == nil
      @enemy_hp.each {|sprite| sprite.dispose }
      @enemy_hp.clear
      @enemy_hp = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------        
  alias mog_enemy_hp_update update
  def update
      mog_enemy_hp_update
      update_enemy_hp
  end
  
  #--------------------------------------------------------------------------
  # ● Update Enemy HP
  #--------------------------------------------------------------------------         
  def update_enemy_hp
      return if @enemy_hp == nil
      @enemy_hp.each {|sprite| sprite.update }
  end  
end

$mog_rgss3_enemy_hp_meter = true [/pre]

评分

参与人数 1星屑 +50 收起 理由
Sion + 50 感谢帮忙

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
64 小时
注册时间
2013-6-6
回帖
66
发表于 2013-6-22 04:47:01 | 显示全部楼层
本帖最后由 圆寂丨不羁的风 于 2013-6-22 04:49 编辑

额……那个呢,贫道各种更改之后才改成这个版本。改掉多少都忘记了。反正某行代码后面有些奇怪的##,基本就是改过的字段。要是想看懂的话,撸主自己对比一下吧。贫道只能帮到这里了。假如代码还有其它问题,贫道下次回来再看看咋改。
实际上按楼主的要求的话,很多代码是可以直接删掉的……贫道就懒得动手了……
回复

使用道具 举报

david_ng223 该用户已被删除
发表于 2013-7-12 11:08:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部