Project1

标题: 請問橫戰敵血條腳本,如何添加HP值顯示? [打印本页]

作者: 冷徹心扉    时间: 2015-11-27 22:36
标题: 請問橫戰敵血條腳本,如何添加HP值顯示?
本帖最后由 冷徹心扉 于 2015-11-28 17:03 编辑

這是我的橫戰顯示敵血條腳本 (橫戰版本3.4E)
想在血條上顯示敵人當前的HP數值、以及將敵人的狀態圖標一併顯示
請問該怎麼修改呢?
萬分感謝!
  1. #==============================================================================
  2. # ★要啟用這個腳本
  3. #==============================================================================
  4. # ■ Sprite_Battler
  5. #==============================================================================

  6. class Sprite_Battler < Sprite_Base
  7.   # Word used in enemy Notes field to hide HP gauge 註解以隱藏HP條
  8.   GAUGE_M = "HIDEHP"
  9.   # 背景色                       [邊框顏色,                       內部顏色]
  10.   GAUGE_BC = [Color.new(100,0,0,255), Color.new(0,0,0,255)]  #155.205.155

  11.   # 面層色(漸變效果) [左端, 右端]
  12.   GAUGE_GC = [Color.new(150,0,0), Color.new(240,50,50)]
  13.   
  14.   GAUGE_W = 82 # 寬度
  15.   GAUGE_H = 5 # 高度 4
  16.   GAUGE_S = 70 # 扣減速度(超過2)40 越小越快
  17.   GAUGE_T = 1200 # 顯示幀數 1秒3000   10秒30000   30秒90000    60秒180000
  18.   GAUGE_O = 16 # 不透明度16
  19.   #
  20.   GAUGE_V = false # 當光標出現可疑損壞。需要STRxx光標。
  21.   #--------------------------------------------------------------------------
  22.   # ● 繪畫血條
  23.   #--------------------------------------------------------------------------
  24.   def create_enhpgauge
  25.     g_width = GAUGE_W  # 長
  26.     g_height = GAUGE_H # 高
  27.     f_color = GAUGE_BC # 背景色
  28.     g_color = GAUGE_GC # 面層色
  29.     # 圖畫繪製
  30.     bitmap = Bitmap.new(g_width, g_height * 2)
  31.     # 上半部分:圖畫定義,背景色
  32.     bitmap.fill_rect(0, 0, g_width, g_height, f_color[0])         # 外框
  33.     bitmap.fill_rect(1, 1, g_width - 2, g_height - 2, f_color[1]) # 內部
  34.     # 上半部分:圖畫定義,面層色
  35.     bitmap.gradient_fill_rect(1, g_height + 1, g_width - 2, g_height - 2,
  36.                               g_color[0], g_color[1])             # 層次
  37.     # 血條建立 # [0] = 背景色 ; [1] = 面層色
  38.     @hp_gauge = [Sprite.new, Sprite.new]

  39.     for i in 0..1
  40.       sprite = @hp_gauge[i]   
  41.       sprite.viewport = self.viewport
  42.       sprite.bitmap = bitmap
  43.       sprite.src_rect.set(0, 0, g_width, g_height)
  44.       sprite.src_rect.y = g_height if i == 1
  45.       if $back_attack && N01::BACK_ATTACK && N01::BACK_ATTACK_NON_BACK_MIRROR
  46.         sprite.x = Graphics.width - @battler.screen_x
  47.       else
  48.   #----------------------------------------------------------------------------------------------------------------------------------------------------        
  49. #~           sprite.x = 10  #固定顯示位置
  50. #~           sprite.x = @battler.screen_x + 5  #血條位置
  51.           sprite.x = @battler.screen_x + 12  #血條位置
  52.       end

  53.       sprite.y = @battler.screen_y  + 15 #血條高低

  54. #----------------------------------------------------------------------------------------------------------------------------------------------------      
  55.       sprite.ox = g_width / 2 - 4
  56.       sprite.oy = g_height / 2 - 1
  57. #~       sprite.z = @battler.screen_z + 1 #血條優先度
  58.     sprite.z = self.z =  battler.position_z + 10#血條優先度
  59.   
  60. #~       sprite.z = +20 if i == 1         
  61.       sprite.opacity = 0
  62.     end
  63.     # 各種
  64.     @enid = @battler.enemy_id
  65.     @hp = @battler.hp
  66.    
  67.     @gauge_width = GAUGE_W + 1   
  68.     @gauge_opacity = 0
  69.   end
  70.   #----------------------------------------------------------------------------------------------------------------------------------------------------
  71.   # ● 血條更新
  72.   #--------------------------------------------------------------------------
  73.   def enhpgauge_update
  74.     # 如果對應ID敵人被傷害的時候需要顯示
  75.     if @enid != @battler.enemy_id
  76.       @enid = @battler.enemy_id
  77.       @gauge_visible = true
  78. #~ ##      @gauge_visible = false if $data_enemies[@enid].note.include?(GAUGE_M)
  79. #~  ##     for i in @hp_gauge do i.visible = @gauge_visible end
  80.       end
  81.     return unless @gauge_visible
  82.     # 計算更新
  83.     if @hp != @battler.hp
  84.       g_width = (@battler.hp / (@battler.maxhp * 1.0))
  85.       @gauge_width = ((GAUGE_W * g_width) + 1).truncate
  86.       @gauge_opacity = GAUGE_T
  87.       @hp = @battler.hp
  88.     end
  89.     # 長
  90.     g_width = @hp_gauge[1].src_rect.width
  91.     speed = GAUGE_S
  92.     rect = @hp_gauge[1].src_rect
  93.     rect.width = (@gauge_width + (g_width * (speed - 1))) / speed
  94.     if rect.width != @gauge_width
  95.       if rect.width > @gauge_width
  96.         rect.width -= 1
  97.       else
  98.         rect.width += 1
  99.       end
  100.     end
  101.     rect.width = 2 if rect.width <= 1 and @hp > 0
  102.    
  103.    
  104.     # 透明度
  105.     if GAUGE_V and @battler.cursor_flash
  106.       @gauge_opacity += GAUGE_O * 2 if @gauge_opacity <= GAUGE_T / 2
  107.     else
  108.       @gauge_opacity -= GAUGE_O if @gauge_opacity > 0
  109.     end
  110.     # 透明度適用
  111.     for i in @hp_gauge do i.opacity = @gauge_opacity end
  112.       

  113. #-----------------------------------------------------------------------------------------------------------------
  114.         if @battler.hp > 0#or @gauge_width > 1  #假如敵人存活就顯示血條
  115.                 @gauge_visible = true
  116.                 @gauge_opacity = 255
  117.               end        
  118. #-----------------------------------------------------------------------------------------------------------------
  119.       
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   # ● 對象初始化
  123.   #--------------------------------------------------------------------------
  124.   alias initialize_str15 initialize
  125.   def initialize(viewport, battler = nil)
  126.     initialize_str15(viewport, battler)
  127.     if @battler.is_a?(Game_Enemy)
  128.       create_enhpgauge
  129.       @gauge_visible = true
  130. #~ ##      @gauge_visible = false if $data_enemies[@enid].note.include?(GAUGE_M)
  131. #~   ##    for i in @hp_gauge do i.visible = @gauge_visible end
  132.     end
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 解放(dispose)
  136.   #--------------------------------------------------------------------------
  137.   alias dispose_str15 dispose
  138.   def dispose
  139.     dispose_str15
  140.     if @battler.is_a?(Game_Enemy)
  141.       @hp_gauge[0].bitmap.dispose
  142.       @hp_gauge[0].dispose
  143.       @hp_gauge[1].dispose
  144.     end
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● 幀更新
  148.   #--------------------------------------------------------------------------
  149.   alias update_str15 update
  150.   def update
  151.     update_str15
  152.     enhpgauge_update if @battler.is_a?(Game_Enemy)
  153.   end
  154. end
复制代码





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