Project1

标题: 怪物血条MOG_Enemy_HP脚本的问题 [打印本页]

作者: yjl494356020    时间: 2012-12-28 17:48
标题: 怪物血条MOG_Enemy_HP脚本的问题
我使用MOG_Enemy_HP脚本,发现当怪物模型比较大时,会把血条挡住,可否将血条设置在怪物图片的上一层?

这个是脚本
RUBY 代码复制
  1. #==============================================================================
  2. # +++ MOG - Enemy HP Meter  (v1.0) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # [url]http://www.atelier-rgss.com/[/url]
  6. #==============================================================================
  7. # Apresenta um medidor animado com o HP do inimigo.
  8. #==============================================================================
  9. # Para ocultar o HP do inimigo use a TAG abaixo na caixa de notas.
  10. #
  11. # <Hide HP>
  12. #
  13. #==============================================================================
  14. # Serão necessários as imagens.
  15. #
  16. # Battle_Enemy_HP_Layout.png
  17. # Battle_Enemy_HP_Meter.png
  18. #
  19. #==============================================================================
  20. module MOG_ENEMY_HP
  21.    #Posição geral do medidor em relação ao battler.
  22.    POSITION_CORRECTION = [0,0]
  23.    #Posição do medidor de HP.
  24.    HP_METER_POSITION = [2,4]
  25.    #Prioridade do medidor na tela.
  26.    PRIORITY_Z = 101   
  27. end
  28.  
  29. #==============================================================================
  30. # ■ Game Enemy
  31. #==============================================================================
  32. class Game_Enemy < Game_Battler
  33.  
  34.   attr_accessor :hp_meter_active               
  35.  
  36.   #--------------------------------------------------------------------------
  37.   # ● Initialize
  38.   #--------------------------------------------------------------------------
  39.   alias mog_enemy_hp_initialize initialize
  40.   def initialize(index, enemy_id)
  41.       mog_enemy_hp_initialize(index, enemy_id)
  42.       hide = enemy.note =~ /<Hide HP>/i ? true : false
  43.       @hp_meter_active = [false,hide]
  44.   end  
  45.  
  46. end
  47.  
  48. #==============================================================================
  49. # ■ Game_Battler
  50. #==============================================================================
  51. class Game_Battler < Game_BattlerBase
  52.  
  53.   #--------------------------------------------------------------------------
  54.   # ● Item Apply
  55.   #--------------------------------------------------------------------------  
  56.    alias mog_enemy_hp_item_apply item_apply
  57.    def item_apply(user, item)
  58.        mog_enemy_hp_item_apply(user, item)
  59.        if self.is_a?(Game_Enemy)
  60.           self.hp_meter_active[0] = true if @result.hp_damage != 0
  61.        end
  62.    end
  63.  
  64.   #--------------------------------------------------------------------------
  65.   # ● Regenerate HP
  66.   #--------------------------------------------------------------------------
  67.   alias mog_enemy_hp_regenerate_hp regenerate_hp
  68.   def regenerate_hp
  69.       mog_enemy_hp_regenerate_hp
  70.       if self.is_a?(Game_Enemy)
  71.          self.hp_meter_active[0] = true if @result.hp_damage != 0      
  72.       end         
  73.   end
  74.  
  75. end
  76.  
  77.  
  78. #==============================================================================
  79. # ■ Battle_Hud
  80. #==============================================================================
  81. class Enemy_HP
  82.   include MOG_ENEMY_HP
  83.  
  84.   #--------------------------------------------------------------------------
  85.   # ● Initialize
  86.   #--------------------------------------------------------------------------   
  87.   def initialize(viewport = nil,enemy,image)
  88.       @enemy = enemy
  89.       @image = image
  90.       @fade_time = -1
  91.       create_layout   
  92.       create_hp_meter      
  93.       b_pos = [enemy.screen_x - (@layout.width / 2) + POSITION_CORRECTION[0], enemy.screen_y + POSITION_CORRECTION[1] - (@layout.height / 2)]
  94.       @layout.opacity = 0
  95.       @org_pos1 = [b_pos[0],b_pos[1]]
  96.       @layout.x = @org_pos1[0]
  97.       @layout.y = @org_pos1[1]
  98.       @layout.visible = false
  99.       @hp_meter.opacity = 0
  100.       @hp_meter.visible = false
  101.       @org_pos2 = [b_pos[0] + HP_METER_POSITION[0], b_pos[1] + HP_METER_POSITION[1]]
  102.       @hp_meter.x = @org_pos2[0]
  103.       @hp_meter.y = @org_pos2[1]
  104.       @hp_meter.viewport = viewport
  105.       @hp_meter.z = PRIORITY_Z
  106.       @layout.viewport = viewport
  107.       @layout.z = PRIORITY_Z
  108.       @enemy.hp_meter_active[0] = false
  109.       [url=home.php?mod=space&uid=94902]@Hide[/url] = @enemy.hp_meter_active[1]
  110.   end
  111.  
  112.   #--------------------------------------------------------------------------
  113.   # ● Create HP Meter
  114.   #--------------------------------------------------------------------------        
  115.   def create_layout
  116.       @layout = Sprite.new
  117.       @layout.bitmap = @image[0]
  118.   end
  119.  
  120.   #--------------------------------------------------------------------------
  121.   # ● Create HP Meter
  122.   #--------------------------------------------------------------------------      
  123.   def create_hp_meter
  124.       @meter_cw = @image[1].width
  125.       @meter_ch = @image[1].height / 2      
  126.       @hp_meter = Sprite.new
  127.       @hp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
  128.       @hp_width_old = @meter_cw * @enemy.hp / @enemy.mhp
  129.     end  
  130.  
  131.   #--------------------------------------------------------------------------
  132.   # ● Hp Flow Update
  133.   #--------------------------------------------------------------------------
  134.   def update_hp_flow
  135.       return if !@layout.visible     
  136.       hp_width = @meter_cw * @enemy.hp / @enemy.mhp
  137.       @hp_meter.bitmap.clear      
  138.       execute_damage_flow(hp_width)
  139.       hp_src_rect = Rect.new(0, 0,hp_width, @meter_ch)
  140.       @hp_meter.bitmap.blt(0,0, @image[1], hp_src_rect)
  141.   end
  142.  
  143.   #--------------------------------------------------------------------------
  144.   # ● Execute Damage Flow
  145.   #--------------------------------------------------------------------------
  146.   def execute_damage_flow(hp_width)
  147.       n = (@hp_width_old - hp_width).abs * 3 / 100
  148.       damage_flow = [[n, 2].min,0.5].max
  149.       @hp_width_old -= damage_flow
  150.       if @hp_width_old <= hp_width
  151.          @hp_width_old = hp_width
  152.       end   
  153.       src_rect_old = Rect.new(0,@meter_ch,@hp_width_old, @meter_ch)
  154.       @hp_meter.bitmap.blt(0,0, @image[1], src_rect_old)      
  155.   end   
  156.  
  157.   #--------------------------------------------------------------------------
  158.   # ● Dispose
  159.   #--------------------------------------------------------------------------      
  160.   def dispose
  161.       @layout.bitmap.dispose
  162.       @layout.dispose
  163.       @hp_meter.bitmap.dispose
  164.       @hp_meter.dispose
  165.   end
  166.  
  167.   #--------------------------------------------------------------------------
  168.   # ● Update
  169.   #--------------------------------------------------------------------------      
  170.   def update
  171.       return if @hide
  172.       update_fade   
  173.       update_visible
  174.       update_hp_flow
  175.       refresh if @enemy.hp_meter_active[0]
  176.   end  
  177.  
  178.   #--------------------------------------------------------------------------
  179.   # ● Update Fade
  180.   #--------------------------------------------------------------------------        
  181.   def update_fade
  182.       @fade_time -= 1 if @fade_time > 0
  183.       return if @fade_time != 0
  184.       @layout.opacity -= 10
  185.       @hp_meter.opacity -= 10
  186.       @layout.x += 1
  187.       @hp_meter.x += 1
  188.       @fade_time = -1 if @layout.opacity == 0
  189.   end  
  190.  
  191.   #--------------------------------------------------------------------------
  192.   # ● Update Visible
  193.   #--------------------------------------------------------------------------        
  194.   def update_visible
  195.       return if !@layout.visible
  196.       vis = can_visible?
  197.       @layout.visible = vis
  198.       @hp_meter.visible = vis
  199.   end
  200.  
  201.   #--------------------------------------------------------------------------
  202.   # ● Refresh
  203.   #--------------------------------------------------------------------------         
  204.   def refresh     
  205.       @enemy.hp_meter_active[0] = false
  206.       @layout.opacity = 255
  207.       @hp_meter.opacity = 255   
  208.       @layout.visible = true
  209.       @hp_meter.visible = true
  210.       @fade_time = 60
  211.       @layout.x = @org_pos1[0]
  212.       @layout.y = @org_pos1[1]
  213.       @hp_meter.x = @org_pos2[0]
  214.       @hp_meter.y = @org_pos2[1]      
  215.       hp_width = @meter_cw * @enemy.hp / @enemy.mhp
  216.       @hp_width_old = hp_width if @hp_width_old < hp_width
  217.       update_hp_flow
  218.   end
  219.  
  220.   #--------------------------------------------------------------------------
  221.   # ● Can Visible?
  222.   #--------------------------------------------------------------------------         
  223.   def can_visible?
  224.       return false if @layout.opacity == 0      
  225.       return true
  226.   end
  227.  
  228. end
  229.  
  230. #==============================================================================
  231. # ■ Spriteset Battle
  232. #==============================================================================
  233. class Spriteset_Battle
  234.  
  235.   #--------------------------------------------------------------------------
  236.   # ● Initialize
  237.   #--------------------------------------------------------------------------  
  238.   alias mog_enemy_hp_initialize initialize
  239.   def initialize
  240.       mog_enemy_hp_initialize
  241.       create_enemy_hp      
  242.   end
  243.  
  244.   #--------------------------------------------------------------------------
  245.   # ● Create Battle Hud
  246.   #--------------------------------------------------------------------------   
  247.   def create_enemy_hp   
  248.       ie1 = Cache.system("Battle_Enemy_HP_Layout")
  249.       ie2 = Cache.system("Battle_Enemy_HP_Meter")
  250.       @enemy_hp_images = [ie1,ie2]
  251.       @enemy_hp = []      
  252.       for i in $game_troop.members
  253.           @enemy_hp.push(Enemy_HP.new(@viewport1,i,@enemy_hp_images))
  254.       end
  255.   end
  256.  
  257.   #--------------------------------------------------------------------------
  258.   # ● Dispose
  259.   #--------------------------------------------------------------------------      
  260.   alias mog_enemy_hp_dispose dispose
  261.   def dispose
  262.       mog_enemy_hp_dispose
  263.       dispose_enemy_hp
  264.   end  
  265.  
  266.   #--------------------------------------------------------------------------
  267.   # ● Dispose Enemy HP
  268.   #--------------------------------------------------------------------------        
  269.   def dispose_enemy_hp
  270.       return if @enemy_hp_images == nil
  271.       @enemy_hp_images.each {|sprite| sprite.dispose }
  272.       @enemy_hp_images.clear
  273.       @enemy_hp.each {|sprite| sprite.dispose }
  274.       @enemy_hp.clear
  275.   end
  276.  
  277.   #--------------------------------------------------------------------------
  278.   # ● Update
  279.   #--------------------------------------------------------------------------        
  280.   alias mog_enemy_hp_update update
  281.   def update
  282.       mog_enemy_hp_update
  283.       update_enemy_hp
  284.   end
  285.  
  286.   #--------------------------------------------------------------------------
  287.   # ● Update Enemy HP
  288.   #--------------------------------------------------------------------------         
  289.   def update_enemy_hp
  290.       return if @enemy_hp_images == nil
  291.       @enemy_hp.each {|sprite| sprite.update }
  292.   end  
  293. end
  294.  
  295. $mog_rgss3_enemy_hp_meter = true

作者: 幽兰戴尔    时间: 2012-12-28 18:14
我也遇到过类似的问题,可以改变血条图片的显示位置,比如向右下角拉一些,这样看起来可能会好一些。
我尝试过之后就没再遇到过问题了。
此外,如果此脚本用于横版战斗,画面左右翻转时,血条显示位置会出现问题。这种情况下,最好将血条隐藏。
作者: 双黄连2    时间: 2012-12-28 18:37
把第26行"PRIORITY_Z = 101"的"101"改大,试试201?301?...1010?
作者: yjl494356020    时间: 2012-12-28 18:51
双黄连2 发表于 2012-12-28 18:37
把第26行"PRIORITY_Z = 101"的"101"改大,试试201?301?...1010?

解决了,PRIORITY数值改大了一些,血条确实置于顶层了
作者: xq12121    时间: 2013-6-14 12:32
LZ你好,我搜索怪物血条脚本找到了你的帖子,你的脚本我能拿去用吗?




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1