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

Project1

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

[已经解决] 敵血條腳本,求增加血條長度自訂功能!

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
448 小时
注册时间
2011-10-9
帖子
184
跳转到指定楼层
1
发表于 2014-9-1 02:53:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
希望能增加開關切換血條長度、或是依敵人編號定義長度的功能

例如1號敵人,血條長度100
         2號敵人,血條長度200...等

或者是1號開關開啟時,此腳本血條長度加倍

若能解決經驗奉上,謝謝!

RUBY 代码复制
  1. #==============================================================================
  2. # ★要啟用這個腳本
  3. #~ if false
  4. if true
  5. #==============================================================================
  6. # ■ Sprite_Battler
  7. #==============================================================================
  8.  
  9. class Sprite_Battler < Sprite_Base
  10.   # Word used in enemy Notes field to hide HP gauge 註解以隱藏HP條
  11.   GAUGE_M = "HIDEHP"
  12.   # 背景色                       [邊框顏色,                       內部顏色]
  13. #~   GAUGE_BC = [Color.new(100,0,0,255), Color.new(20,0,0,200)]  #155.205.155   
  14.   GAUGE_BC = [Color.new(100,0,0,255), Color.new(0,0,0,255)]  #155.205.155
  15.   # 面層色(漸變效果) [左端, 右端]
  16.   GAUGE_GC = [Color.new(150,0,0), Color.new(240,50,50)]
  17.   #
  18.  
  19.   GAUGE_W = 68 # 寬度
  20.   GAUGE_H = 4 # 高度 4
  21.   GAUGE_S = 30 # 扣減速度(超過2)40 越小越快
  22.   GAUGE_T = 1400 # 顯示幀數 1秒3000   10秒30000   30秒90000    60秒180000
  23.   GAUGE_O = 16 # 不透明度16
  24.   #
  25.   GAUGE_V = false # 當光標出現可疑損壞。需要STRxx光標。
  26.   #--------------------------------------------------------------------------
  27.   # ● 繪畫血條
  28.   #--------------------------------------------------------------------------
  29.   def create_enhpgauge
  30.     g_width = GAUGE_W  # 長
  31.     g_height = GAUGE_H # 高
  32.     f_color = GAUGE_BC # 背景色
  33.     g_color = GAUGE_GC # 面層色
  34.     # 圖畫繪製
  35.     bitmap = Bitmap.new(g_width, g_height * 2)
  36.     # 上半部分:圖畫定義,背景色
  37.     bitmap.fill_rect(0, 0, g_width, g_height, f_color[0])         # 外框
  38.     bitmap.fill_rect(1, 1, g_width - 2, g_height - 2, f_color[1]) # 內部
  39.     # 上半部分:圖畫定義,面層色
  40.     bitmap.gradient_fill_rect(1, g_height + 1, g_width - 2, g_height - 2,
  41.                               g_color[0], g_color[1])             # 層次
  42.     # 血條建立 # [0] = 背景色 ; [1] = 面層色
  43.     @hp_gauge = [Sprite.new, Sprite.new]
  44.  
  45.     for i in 0..1
  46.       sprite = @hp_gauge[i]   
  47.       sprite.viewport = self.viewport
  48.       sprite.bitmap = bitmap
  49.       sprite.src_rect.set(0, 0, g_width, g_height)
  50.       sprite.src_rect.y = g_height if i == 1
  51.       if $back_attack && N01::BACK_ATTACK && N01::BACK_ATTACK_NON_BACK_MIRROR
  52.         sprite.x = Graphics.width - @battler.screen_x
  53.       else
  54.   #----------------------------------------------------------------------------------------------------------------------------------------------------        
  55. #~           sprite.x = 10  #固定顯示位置
  56.           sprite.x = @battler.screen_x + 5  #顯示在敵人腳邊
  57.       end
  58.  
  59.       sprite.y = @battler.screen_y  - 10 #血條的高低
  60.  
  61.   #----------------------------------------------------------------------------------------------------------------------------------------------------      
  62.       sprite.ox = g_width / 2 - 4
  63.       sprite.oy = g_height / 2 - 1
  64. #~       sprite.z = @battler.screen_z + 1 #血條優先度
  65.     sprite.z = self.z =  battler.position_z + 10#血條優先度
  66.  
  67. #~       sprite.z = +20 if i == 1         
  68.       sprite.opacity = 0
  69.     end
  70.     # 各種
  71.     @enid = @battler.enemy_id
  72.     @hp = @battler.hp
  73.     @gauge_width = GAUGE_W + 1
  74.     @gauge_opacity = 0
  75.   end
  76.   #----------------------------------------------------------------------------------------------------------------------------------------------------
  77.   # ● 血條更新
  78.   #--------------------------------------------------------------------------
  79.   def enhpgauge_update
  80.     # 如果對應ID敵人被傷害的時候需要顯示
  81.     if @enid != @battler.enemy_id
  82.       @enid = @battler.enemy_id
  83.       @gauge_visible = true
  84. #~ ##      @gauge_visible = false if $data_enemies[@enid].note.include?(GAUGE_M)
  85. #~  ##     for i in @hp_gauge do i.visible = @gauge_visible end
  86.       end
  87.     return unless @gauge_visible
  88.     # 計算更新
  89.     if @hp != @battler.hp
  90.       g_width = (@battler.hp / (@battler.maxhp * 1.0))
  91.       @gauge_width = ((GAUGE_W * g_width) + 1).truncate
  92.       @gauge_opacity = GAUGE_T
  93.       @hp = @battler.hp
  94.     end
  95.     # 長
  96.     g_width = @hp_gauge[1].src_rect.width
  97.     speed = GAUGE_S
  98.     rect = @hp_gauge[1].src_rect
  99.     rect.width = (@gauge_width + (g_width * (speed - 1))) / speed
  100.     if rect.width != @gauge_width
  101.       if rect.width > @gauge_width
  102.         rect.width -= 1
  103.       else
  104.         rect.width += 1
  105.       end
  106.     end
  107.     rect.width = 2 if rect.width <= 1 and @hp > 0
  108.  
  109.  
  110.     # 透明度
  111.     if GAUGE_V and @battler.cursor_flash
  112.       @gauge_opacity += GAUGE_O * 2 if @gauge_opacity <= GAUGE_T / 2
  113.     else
  114.       @gauge_opacity -= GAUGE_O if @gauge_opacity > 0
  115.     end
  116.     # 透明度適用
  117.     for i in @hp_gauge do i.opacity = @gauge_opacity end
  118.  
  119.  
  120. #-----------------------------------------------------------------------------------------------------------------
  121.         if @battler.hp > 0#or @gauge_width > 1  #假如敵人存活就顯示血條
  122.                 @gauge_visible = true
  123.                 @gauge_opacity = 255
  124.                 end        
  125. #-----------------------------------------------------------------------------------------------------------------
  126.  
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 對象初始化
  130.   #--------------------------------------------------------------------------
  131.   alias initialize_str15 initialize
  132.   def initialize(viewport, battler = nil)
  133.     initialize_str15(viewport, battler)
  134.     if @battler.is_a?(Game_Enemy)
  135.       create_enhpgauge
  136.       @gauge_visible = true
  137. #~ ##      @gauge_visible = false if $data_enemies[@enid].note.include?(GAUGE_M)
  138. #~   ##    for i in @hp_gauge do i.visible = @gauge_visible end
  139.     end
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ● 解放(dispose)
  143.   #--------------------------------------------------------------------------
  144.   alias dispose_str15 dispose
  145.   def dispose
  146.     dispose_str15
  147.     if @battler.is_a?(Game_Enemy)
  148.       @hp_gauge[0].bitmap.dispose
  149.       @hp_gauge[0].dispose
  150.       @hp_gauge[1].dispose
  151.     end
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● 幀更新
  155.   #--------------------------------------------------------------------------
  156.   alias update_str15 update
  157.   def update
  158.     update_str15
  159.     enhpgauge_update if @battler.is_a?(Game_Enemy)
  160.   end
  161. end
  162. #
  163. end

Lv1.梦旅人

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
帖子
1524
2
发表于 2014-9-4 15:47:06 | 只看该作者
本帖最后由 克莉丝 于 2014-9-5 09:28 编辑

代码未测试,因为这个脚本因该是你哪里截取出来的没法测试
说明:指定某号变量为非0时某号敌人血条长度与该变量相同
       例如1号变量值为150,那么1号敌人的血条长度为150.
             1号变量值为0,那么1号敌人的血条长度为默认的68.
变量编号可以再说明
  1. #==============================================================================
  2. # ★要啟用這個腳本
  3. #~ if false
  4. if true
  5. #==============================================================================
  6. # ■ Sprite_Battler
  7. #==============================================================================

  8. class Sprite_Battler < Sprite_Base
  9.   # Word used in enemy Notes field to hide HP gauge 註解以隱藏HP條
  10.   GAUGE_M = "HIDEHP"
  11.   # 背景色                       [邊框顏色,                       內部顏色]
  12. #~   GAUGE_BC = [Color.new(100,0,0,255), Color.new(20,0,0,200)]  #155.205.155   
  13.   GAUGE_BC = [Color.new(100,0,0,255), Color.new(0,0,0,255)]  #155.205.155
  14.   # 面層色(漸變效果) [左端, 右端]
  15.   GAUGE_GC = [Color.new(150,0,0), Color.new(240,50,50)]
  16.   #

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

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

  55.       sprite.y = @battler.screen_y  - 10 #血條的高低

  56.   #----------------------------------------------------------------------------------------------------------------------------------------------------      
  57.       sprite.ox = g_width / 2 - 4
  58.       sprite.oy = g_height / 2 - 1
  59. #~       sprite.z = @battler.screen_z + 1 #血條優先度
  60.       sprite.z = self.z =  battler.position_z + 10#血條優先度

  61. #~       sprite.z = +20 if i == 1         
  62.       sprite.opacity = 0
  63.     end
  64.     # 各種
  65.     @enid = @battler.enemy_id
  66.     @hp = @battler.hp
  67.     @gauge_width = $game_variables[@battler.index] == 0?  GAUGE_W : $game_variables[@battler.index] + 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 = (($game_variables[@battler.index] == 0? 68 : $game_variables[@battler.index] * 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.     if GAUGE_V and @battler.cursor_flash
  104.       @gauge_opacity += GAUGE_O * 2 if @gauge_opacity <= GAUGE_T / 2
  105.     else
  106.       @gauge_opacity -= GAUGE_O if @gauge_opacity > 0
  107.     end
  108.     # 透明度適用
  109.     for i in @hp_gauge do i.opacity = @gauge_opacity end


  110. #-----------------------------------------------------------------------------------------------------------------
  111.         if @battler.hp > 0#or @gauge_width > 1  #假如敵人存活就顯示血條
  112.                 @gauge_visible = true
  113.                 @gauge_opacity = 255
  114.                 end        
  115. #-----------------------------------------------------------------------------------------------------------------

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

点评

如果是套用敵人編號的話,會導致顯示的不正確,個人修改為以指定變數更改就可以了,非常感謝您!  发表于 2014-9-5 13:19
已修正语法错误  发表于 2014-9-5 09:29
非常期待您的幫忙!  发表于 2014-9-5 02:40
但測試時出現了錯誤,30行: SyntaxError occurred.  发表于 2014-9-5 02:39
這是屬於橫向戰鬥使用的,不需要依賴其他腳本  发表于 2014-9-5 02:38

评分

参与人数 2星屑 +120 收起 理由
丿梁丶小柒 + 100 认可答案
冷徹心扉 + 20 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 17:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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