Project1

标题: 该敌人显血脚本是否可以改成动画显示结束后才减血 [打印本页]

作者: hcm    时间: 2013-4-9 15:53
标题: 该敌人显血脚本是否可以改成动画显示结束后才减血
本帖最后由 hcm 于 2013-4-14 23:04 编辑

如下,该脚本是在显示动画开始的同时就开始减血(经核实是因为附带了横版1.7的脚本,和显示敌人被打图片部分冲突),
是否可以在和横版1.7一起使用的前提下修改为动画结束后。

工程http://rpg.blue/forum.php?mod=attachment&aid=MTEwNDcxfDM2YTliMmIzfDEzNDE2MjQ3NTJ8MjM0ODQ2fDIzMTQyMQ%3D%3D
  1. #==============================================================================
  2. # +++ MOG - Enemy HP Meter  (v1.0) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # http://www.atelier-rgss.com/
  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. # ■ Game Enemy
  30. #==============================================================================
  31. class Game_Enemy < Game_Battler

  32.   attr_accessor :hp_meter_active               
  33.   
  34.   #--------------------------------------------------------------------------
  35.   # ● Initialize
  36.   #--------------------------------------------------------------------------
  37.   alias mog_enemy_hp_initialize initialize
  38.   def initialize(index, enemy_id)
  39.       mog_enemy_hp_initialize(index, enemy_id)
  40.       hide = enemy.note =~ /<Hide HP>/i ? true : false
  41.       @hp_meter_active = [false,hide]
  42.   end  

  43. end

  44. #==============================================================================
  45. # ■ Game_Battler
  46. #==============================================================================
  47. class Game_Battler < Game_BattlerBase
  48.   
  49.   #--------------------------------------------------------------------------
  50.   # ● Item Apply
  51.   #--------------------------------------------------------------------------  
  52.    alias mog_enemy_hp_item_apply item_apply
  53.    def item_apply(user, item)
  54.        mog_enemy_hp_item_apply(user, item)
  55.        if self.is_a?(Game_Enemy)
  56.           self.hp_meter_active[0] = true if @result.hp_damage != 0
  57.        end
  58.    end

  59.   #--------------------------------------------------------------------------
  60.   # ● Regenerate HP
  61.   #--------------------------------------------------------------------------
  62.   alias mog_enemy_hp_regenerate_hp regenerate_hp
  63.   def regenerate_hp
  64.       mog_enemy_hp_regenerate_hp
  65.       if self.is_a?(Game_Enemy)
  66.          self.hp_meter_active[0] = true if @result.hp_damage != 0      
  67.       end         
  68.   end
  69.    
  70. end
  71.   

  72. #==============================================================================
  73. # ■ Battle_Hud
  74. #==============================================================================
  75. class Enemy_HP
  76.   include MOG_ENEMY_HP
  77.   
  78.   #--------------------------------------------------------------------------
  79.   # ● Initialize
  80.   #--------------------------------------------------------------------------   
  81.   def initialize(viewport = nil,enemy,image)
  82.       @enemy = enemy
  83.       @image = image
  84.       @fade_time = -1
  85.       create_layout   
  86.       create_hp_meter      
  87.       b_pos = [enemy.screen_x - (@layout.width / 2) + POSITION_CORRECTION[0], enemy.screen_y + POSITION_CORRECTION[1] - (@layout.height / 2)]
  88.       @layout.opacity = 0
  89.       @org_pos1 = [b_pos[0],b_pos[1]]
  90.       @layout.x = @org_pos1[0]
  91.       @layout.y = @org_pos1[1]
  92.       @layout.visible = false
  93.       @hp_meter.opacity = 0
  94.       @hp_meter.visible = false
  95.       @org_pos2 = [b_pos[0] + HP_METER_POSITION[0], b_pos[1] + HP_METER_POSITION[1]]
  96.       @hp_meter.x = @org_pos2[0]
  97.       @hp_meter.y = @org_pos2[1]
  98.       @hp_meter.viewport = viewport
  99.       @hp_meter.z = PRIORITY_Z
  100.       @layout.viewport = viewport
  101.       @layout.z = PRIORITY_Z
  102.       @enemy.hp_meter_active[0] = false
  103.       [url=home.php?mod=space&uid=94902]@Hide[/url] = @enemy.hp_meter_active[1]
  104.   end
  105.   
  106.   #--------------------------------------------------------------------------
  107.   # ● Create HP Meter
  108.   #--------------------------------------------------------------------------        
  109.   def create_layout
  110.       @layout = Sprite.new
  111.       @layout.bitmap = @image[0]
  112.   end
  113.    
  114.   #--------------------------------------------------------------------------
  115.   # ● Create HP Meter
  116.   #--------------------------------------------------------------------------      
  117.   def create_hp_meter
  118.       @meter_cw = @image[1].width
  119.       @meter_ch = @image[1].height / 2      
  120.       @hp_meter = Sprite.new
  121.       @hp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
  122.       @hp_width_old = @meter_cw * @enemy.hp / @enemy.mhp
  123.     end  
  124.   
  125.   #--------------------------------------------------------------------------
  126.   # ● Hp Flow Update
  127.   #--------------------------------------------------------------------------
  128.   def update_hp_flow
  129.       return if [email protected]     
  130.       hp_width = @meter_cw * @enemy.hp / @enemy.mhp
  131.       @hp_meter.bitmap.clear      
  132.       execute_damage_flow(hp_width)
  133.       hp_src_rect = Rect.new(0, 0,hp_width, @meter_ch)
  134.       @hp_meter.bitmap.blt(0,0, @image[1], hp_src_rect)
  135.   end
  136.    
  137.   #--------------------------------------------------------------------------
  138.   # ● Execute Damage Flow
  139.   #--------------------------------------------------------------------------
  140.   def execute_damage_flow(hp_width)
  141.       n = (@hp_width_old - hp_width).abs * 3 / 100
  142.       damage_flow = [[n, 2].min,0.5].max
  143.       @hp_width_old -= damage_flow
  144.       if @hp_width_old <= hp_width
  145.          @hp_width_old = hp_width
  146.       end   
  147.       src_rect_old = Rect.new(0,@meter_ch,@hp_width_old, @meter_ch)
  148.       @hp_meter.bitmap.blt(0,0, @image[1], src_rect_old)      
  149.   end   
  150.   
  151.   #--------------------------------------------------------------------------
  152.   # ● Dispose
  153.   #--------------------------------------------------------------------------      
  154.   def dispose
  155.       @layout.bitmap.dispose
  156.       @layout.dispose
  157.       @hp_meter.bitmap.dispose
  158.       @hp_meter.dispose
  159.   end
  160.   
  161.   #--------------------------------------------------------------------------
  162.   # ● Update
  163.   #--------------------------------------------------------------------------      
  164.   def update
  165.       return if @hide
  166.       update_fade   
  167.       update_visible
  168.       update_hp_flow
  169.       refresh if @enemy.hp_meter_active[0]
  170.   end  
  171.   
  172.   #--------------------------------------------------------------------------
  173.   # ● Update Fade
  174.   #--------------------------------------------------------------------------        
  175.   def update_fade
  176.       @fade_time -= 1 if @fade_time > 0
  177.       return if @fade_time != 0
  178.       @layout.opacity -= 10
  179.       @hp_meter.opacity -= 10
  180.       @layout.x += 1
  181.       @hp_meter.x += 1
  182.       @fade_time = -1 if @layout.opacity == 0
  183.   end  
  184.   
  185.   #--------------------------------------------------------------------------
  186.   # ● Update Visible
  187.   #--------------------------------------------------------------------------        
  188.   def update_visible
  189.       return if [email protected]
  190.       vis = can_visible?
  191.       @layout.visible = vis
  192.       @hp_meter.visible = vis
  193.   end
  194.   
  195.   #--------------------------------------------------------------------------
  196.   # ● Refresh
  197.   #--------------------------------------------------------------------------         
  198.   def refresh     
  199.       @enemy.hp_meter_active[0] = false
  200.       @layout.opacity = 255
  201.       @hp_meter.opacity = 255   
  202.       @layout.visible = true
  203.       @hp_meter.visible = true
  204.       @fade_time = 60
  205.       @layout.x = @org_pos1[0]
  206.       @layout.y = @org_pos1[1]
  207.       @hp_meter.x = @org_pos2[0]
  208.       @hp_meter.y = @org_pos2[1]      
  209.       hp_width = @meter_cw * @enemy.hp / @enemy.mhp
  210.       @hp_width_old = hp_width if @hp_width_old < hp_width
  211.       update_hp_flow
  212.   end
  213.   
  214.   #--------------------------------------------------------------------------
  215.   # ● Can Visible?
  216.   #--------------------------------------------------------------------------         
  217.   def can_visible?
  218.       return false if @layout.opacity == 0      
  219.       return true
  220.   end
  221.    
  222. end

  223. #==============================================================================
  224. # ■ Spriteset Battle
  225. #==============================================================================
  226. class Spriteset_Battle
  227.   
  228.   #--------------------------------------------------------------------------
  229.   # ● Initialize
  230.   #--------------------------------------------------------------------------  
  231.   alias mog_enemy_hp_initialize initialize
  232.   def initialize
  233.       mog_enemy_hp_initialize
  234.       create_enemy_hp      
  235.   end
  236.   
  237.   #--------------------------------------------------------------------------
  238.   # ● Create Battle Hud
  239.   #--------------------------------------------------------------------------   
  240.   def create_enemy_hp   
  241.       ie1 = Cache.system("Battle_Enemy_HP_Layout")
  242.       ie2 = Cache.system("Battle_Enemy_HP_Meter")
  243.       @enemy_hp_images = [ie1,ie2]
  244.       @enemy_hp = []      
  245.       for i in $game_troop.members
  246.           @enemy_hp.push(Enemy_HP.new(@viewport1,i,@enemy_hp_images))
  247.       end
  248.   end
  249.   
  250.   #--------------------------------------------------------------------------
  251.   # ● Dispose
  252.   #--------------------------------------------------------------------------      
  253.   alias mog_enemy_hp_dispose dispose
  254.   def dispose
  255.       mog_enemy_hp_dispose
  256.       dispose_enemy_hp
  257.   end  
  258.   
  259.   #--------------------------------------------------------------------------
  260.   # ● Dispose Enemy HP
  261.   #--------------------------------------------------------------------------        
  262.   def dispose_enemy_hp
  263.       return if @enemy_hp_images == nil
  264.       @enemy_hp_images.each {|sprite| sprite.dispose }
  265.       @enemy_hp_images.clear
  266.       @enemy_hp.each {|sprite| sprite.dispose }
  267.       @enemy_hp.clear
  268.   end
  269.   
  270.   #--------------------------------------------------------------------------
  271.   # ● Update
  272.   #--------------------------------------------------------------------------        
  273.   alias mog_enemy_hp_update update
  274.   def update
  275.       mog_enemy_hp_update
  276.       update_enemy_hp
  277.   end
  278.   
  279.   #--------------------------------------------------------------------------
  280.   # ● Update Enemy HP
  281.   #--------------------------------------------------------------------------         
  282.   def update_enemy_hp
  283.       return if @enemy_hp_images == nil
  284.       @enemy_hp.each {|sprite| sprite.update }
  285.   end  
  286. end

  287. $mog_rgss3_enemy_hp_meter = true
复制代码

作者: Sion    时间: 2013-4-9 19:44
本帖最后由 Sion 于 2013-4-10 14:30 编辑

@hcm 这个ID有bug? - -b
是后知后觉那个横版1.7吧?
作者: Sion    时间: 2013-4-10 14:34
本帖最后由 Sion 于 2013-4-10 14:48 编辑
Sion 发表于 2013-4-9 19:44
@hcm 这个ID有bug? - -b
是后知后觉那个横版1.7吧?


可否发送一个能直接使用的范例给我,说明一大堆不想慢慢看~~~

我用q加你了
作者: hcm    时间: 2013-4-10 19:07
Sion 发表于 2013-4-10 14:34
可否发送一个能直接使用的范例给我,说明一大堆不想慢慢看~~~

我用q加你了 ...

未发现验证提示,上传度娘了
http://pan.baidu.com/share/link?shareid=442900&uk=1647587967




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