设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1421|回复: 0
打印 上一主题 下一主题

[已经过期] 关于战斗中显示问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
65
在线时间
56 小时
注册时间
2013-8-12
帖子
16
跳转到指定楼层
1
发表于 2015-9-10 00:40:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
  1. #==============================================================================
  2. # +++ MOG - Enemy HP Meter  (v1.1) +++
  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. #==============================================================================

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

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

  34. #==============================================================================
  35. # ■ Game Enemy
  36. #==============================================================================
  37. class Game_Enemy < Game_Battler

  38.   attr_accessor :hp_meter_active               
  39.   
  40.   #--------------------------------------------------------------------------
  41.   # ● Initialize
  42.   #--------------------------------------------------------------------------
  43.   alias mog_enemy_hp_initialize initialize
  44.   def initialize(index, enemy_id)
  45.       mog_enemy_hp_initialize(index, enemy_id)
  46.       hide = enemy.note =~ /<Hide HP>/i ? true : false
  47.       @hp_meter_active = [false,hide]
  48.   end  

  49. end

  50. #==============================================================================
  51. # ■ Game_Battler
  52. #==============================================================================
  53. class Game_Battler < Game_BattlerBase
  54.   
  55.   #--------------------------------------------------------------------------
  56.   # ● Item Apply
  57.   #--------------------------------------------------------------------------  
  58.    alias mog_enemy_hp_item_apply item_apply
  59.    def item_apply(user, item)
  60.        mog_enemy_hp_item_apply(user, item)
  61.        if self.is_a?(Game_Enemy)
  62.           self.hp_meter_active[0] = true if @result.hp_damage != 0
  63.        end
  64.    end

  65.   #--------------------------------------------------------------------------
  66.   # ● Regenerate HP
  67.   #--------------------------------------------------------------------------
  68.   alias mog_enemy_hp_regenerate_hp regenerate_hp
  69.   def regenerate_hp
  70.       mog_enemy_hp_regenerate_hp
  71.       if self.is_a?(Game_Enemy)
  72.          self.hp_meter_active[0] = true if @result.hp_damage != 0      
  73.       end         
  74.   end
  75.    
  76. end
  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)
  88.       dispose
  89.       @enemy = enemy
  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.       @hide = @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 = Cache.system("Battle_Enemy_HP_Layout")
  118.   end
  119.    
  120.   #--------------------------------------------------------------------------
  121.   # ● Create HP Meter
  122.   #--------------------------------------------------------------------------      
  123.   def create_hp_meter
  124.       @meter_image = Cache.system("Battle_Enemy_HP_Meter")
  125.       @meter_cw = @meter_image.width
  126.       @meter_ch = @meter_image.height / 2      
  127.       @hp_meter = Sprite.new
  128.       @hp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
  129.       @hp_width_old = @meter_cw * @enemy.hp / @enemy.mhp
  130.     end  
  131.   
  132.   #--------------------------------------------------------------------------
  133.   # ● Hp Flow Update
  134.   #--------------------------------------------------------------------------
  135.   def update_hp_flow
  136.       return if [email protected]     
  137.       hp_width = @meter_cw * @enemy.hp / @enemy.mhp
  138.       @hp_meter.bitmap.clear      
  139.       execute_damage_flow(hp_width)
  140.       hp_src_rect = Rect.new(0, 0,hp_width, @meter_ch)
  141.       @hp_meter.bitmap.blt(0,0, @meter_image, hp_src_rect)
  142.   end
  143.    
  144.   #--------------------------------------------------------------------------
  145.   # ● Execute Damage Flow
  146.   #--------------------------------------------------------------------------
  147.   def execute_damage_flow(hp_width)
  148.       n = (@hp_width_old - hp_width).abs * 3 / 100
  149.       damage_flow = [[n, 2].min,0.5].max
  150.       @hp_width_old -= damage_flow
  151.       if @hp_width_old <= hp_width
  152.          @hp_width_old = hp_width
  153.       end   
  154.       src_rect_old = Rect.new(0,@meter_ch,@hp_width_old, @meter_ch)
  155.       @hp_meter.bitmap.blt(0,0, @meter_image, src_rect_old)      
  156.   end   
  157.   
  158.   #--------------------------------------------------------------------------
  159.   # ● Dispose
  160.   #--------------------------------------------------------------------------      
  161.   def dispose
  162.       return if @meter_image == nil
  163.       @layout.bitmap.dispose
  164.       @layout.dispose
  165.       @hp_meter.bitmap.dispose
  166.       @hp_meter.dispose
  167.       @meter_image.dispose
  168.       @meter_image = nil
  169.   end
  170.   
  171.   #--------------------------------------------------------------------------
  172.   # ● Update
  173.   #--------------------------------------------------------------------------      
  174.   def update
  175.       return if @meter_image == nil
  176.       return if @hide
  177.       update_fade   
  178.       update_visible
  179.       update_hp_flow
  180.       refresh if @enemy.hp_meter_active[0]
  181.   end  
  182.   
  183.   #--------------------------------------------------------------------------
  184.   # ● Update Fade
  185.   #--------------------------------------------------------------------------        
  186.   def update_fade
  187.       @fade_time -= 1 if @fade_time > 0
  188.       return if @fade_time != 0
  189.       @layout.opacity -= 10
  190.       @hp_meter.opacity -= 10
  191.       @layout.x += 1
  192.       @hp_meter.x += 1
  193.       @fade_time = -1 if @layout.opacity == 0
  194.   end  
  195.   
  196.   #--------------------------------------------------------------------------
  197.   # ● Update Visible
  198.   #--------------------------------------------------------------------------        
  199.   def update_visible
  200.       return if [email protected]
  201.       vis = can_visible?
  202.       @layout.visible = vis
  203.       @hp_meter.visible = vis
  204.   end
  205.   
  206.   #--------------------------------------------------------------------------
  207.   # ● Refresh
  208.   #--------------------------------------------------------------------------         
  209.   def refresh     
  210.       @enemy.hp_meter_active[0] = false
  211.       @layout.opacity = 255
  212.       @hp_meter.opacity = 255   
  213.       @layout.visible = true
  214.       @hp_meter.visible = true
  215.       @fade_time = 60
  216.       @layout.x = @org_pos1[0]
  217.       @layout.y = @org_pos1[1]
  218.       @hp_meter.x = @org_pos2[0]
  219.       @hp_meter.y = @org_pos2[1]      
  220.       hp_width = @meter_cw * @enemy.hp / @enemy.mhp
  221.       @hp_width_old = hp_width if @hp_width_old < hp_width
  222.       update_hp_flow
  223.   end
  224.   
  225.   #--------------------------------------------------------------------------
  226.   # ● Can Visible?
  227.   #--------------------------------------------------------------------------         
  228.   def can_visible?
  229.       return false if @layout.opacity == 0      
  230.       return true
  231.   end
  232.    
  233. end

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

  295. $mog_rgss3_enemy_hp_meter = true
复制代码
我用了这个显示敌人血量的脚本,范例中血量条是显示在敌人的脚下,可是我显示在敌人身中(即血量条和敌人重叠了)

我的游戏是640x480,谢谢
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 19:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表