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

Project1

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

[有事请教] 怎么把敌人血条显示在敌人战斗图脚下

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1561
在线时间
195 小时
注册时间
2019-10-4
帖子
286
跳转到指定楼层
1
发表于 2023-6-4 09:29:04 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
RUBY 代码复制
  1. bitmap = RPG::Cache.windowskin"你的图片名")
  2. cw = bitmap.width
  3. ch = bitmap.height
  4. n = HP现在值 <= 0 ? 1 : HP现在值.to_f / HP最大值
  5. src_rect = Rect.new(0, 0 , cw * n, ch)
  6. self.contents.blt(0,0, bitmap, src_rect)

之前问过己方的图片血条怎么显示,但是就不知道如何实现,敌方血条显示了

Lv4.逐梦者

梦石
0
星屑
7827
在线时间
1346 小时
注册时间
2015-8-15
帖子
753
5
发表于 2023-6-5 17:10:55 | 只看该作者
本帖最后由 金芒芒 于 2023-6-5 17:14 编辑


5号开关一打开就有血条显示了位置自己调
  1. #==============================================================================
  2. # ■ 事件头上显血条 RMXP
  3.   #--------------------------------------------------------------------------
  4.   #  作者:后知后觉
  5.   #  日期:2012-6-26
  6.   #  版本:1.0
  7.   #  申明:刺夜之枪定制 正太君改
  8.   #        http://bbs.66rpg.com/thread-237126-1-1.html  
  9. #==============================================================================
  10. #==============================================================================
  11. # ■ Sprite_Character
  12. #==============================================================================

  13. class Sprite_Character < RPG::Sprite
  14.   #--------------------------------------------------------------------------
  15.   # ● 参数设置 正太君改
  16.   #--------------------------------------------------------------------------
  17.   # 设置图片文件名.不想要底图就让底图完全透明或设置为 ""
  18.   # 图片放在 Graphics/Pictures/ 文件夹下
  19.   HPBarFileName = "HPBar"
  20.   HPBarBackFileName = "HPBarBack"
  21.   MPBarFileName = "MPBar"
  22.   MPBarBackFileName = "MPBarBack"
  23.   # 设置显示友军血条的开关号
  24.   #TeamHPBarSwitchID = 5
  25.   # 设置显示敌军血条的开关号
  26.   #EnemyHPBarSwitchID = 6
  27.   
  28.   # 设置显示血条的开关号
  29.   HPBarSwitchID = 5
  30.   
  31.   #禁止显示血条 开关
  32.   HPBarDOESNOTSwitchID = 6
  33.   
  34.   
  35.   # 被攻击后血条显示多久
  36.   HPbarTimeDisplay = 60
  37.   
  38.   
  39.   #--------------------------------------------------------------------------
  40.   # ● 初始化对像
  41.   #--------------------------------------------------------------------------
  42.   alias hzhj_old_init_make_event_param_bar initialize
  43.   def initialize(*args)
  44.     @hp_sprite = Sprite.new(args[0])
  45.     @hp_back_sprite = Sprite.new(args[0])
  46.     @mp_sprite = Sprite.new(args[0])
  47.     @mp_back_sprite = Sprite.new(args[0])
  48.     @param_sprites = []
  49.     @param_sprites << @hp_sprite
  50.     @param_sprites << @hp_back_sprite
  51.     @param_sprites << @mp_sprite
  52.     @param_sprites << @mp_back_sprite
  53.     @hp_sprite.bitmap = RPG::Cache.picture(HPBarFileName)
  54.     @hp_back_sprite.bitmap = RPG::Cache.picture(HPBarBackFileName)
  55.     @mp_sprite.bitmap = RPG::Cache.picture(MPBarFileName)
  56.     @mp_back_sprite.bitmap = RPG::Cache.picture(MPBarBackFileName)
  57.     hzhj_old_init_make_event_param_bar(*args)
  58.   end
  59.   #--------------------------------------------------------------------------
  60.   # ● 释放
  61.   #--------------------------------------------------------------------------
  62.   alias hzhj_old_dispose_make_event_param_bar dispose unless $@
  63.   def dispose
  64.     @param_sprites.each{|sprite|sprite.dispose}
  65.     hzhj_old_dispose_make_event_param_bar
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 获取事件 HP # 正太君改
  69.   #--------------------------------------------------------------------------
  70.   def event_hp
  71.      return 0 if @character.nil?
  72.      return @character.hp
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 获取事件 MHP # 正太君改
  76.   #--------------------------------------------------------------------------
  77.   def event_mhp
  78.     return 0 if @character.nil?
  79.     return @character.hp_max
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 获取事件 MP # 正太君改
  83.   #--------------------------------------------------------------------------
  84.   def event_mp
  85.     return 0 if @character.nil?
  86.     return @character.sp if @character.is_a?(EFS_Hero)
  87.     return @character.ammo
  88.     #return @character.get_group.morale
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 获取事件 MMP # 正太君改
  92.   #--------------------------------------------------------------------------
  93.   def event_mmp
  94.     return 0 if @character.nil?
  95.     return @character.sp_max if @character.is_a?(EFS_Hero)
  96.     return @character.ammo_max
  97.     #return 100
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● 判断是否显示 HP 条
  101.   #--------------------------------------------------------------------------
  102.   def show_hp_bar?
  103.     #return false if @character.is_a?(EFS_Hero)
  104.     return false if $scene.efs_story_mode
  105.     if event_hp > 0 && [email protected]
  106.       return $game_switches[HPBarSwitchID] || @character.hp_counter > 0 #) && ! $game_switches[HPBarDOESNOTSwitchID]
  107.     else
  108.       return false
  109.     end  
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 判断是否显示 MP 条
  113.   #--------------------------------------------------------------------------
  114.   def show_mp_bar?
  115.     #return false if @character.is_a?(EFS_Hero)
  116.      return false if $scene.efs_story_mode
  117.     if event_mmp > 0 && [email protected]
  118.       return $game_switches[HPBarSwitchID] || @character.hp_counter > 0 #) && ! $game_switches[HPBarDOESNOTSwitchID]
  119.     else
  120.       return false
  121.     end  
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ● 更新画面
  125.   #--------------------------------------------------------------------------
  126.   alias hzhj_old_update_make_event_param_bar update
  127.   def update
  128.     hzhj_old_update_make_event_param_bar
  129.     if [email protected]_a?(EFS_Battler)
  130.       @param_sprites.each{|sprite|sprite.visible = false}
  131.     else
  132.       
  133.       # 刷新 HP 可见状态
  134.       if show_hp_bar?
  135.         
  136.         @hp_sprite.visible = @hp_back_sprite.visible = true
  137.         @hp_sprite.bitmap = RPG::Cache.picture("HPBar-E") if @character.team != 1 #wtf you doing
  138.         
  139.         
  140.         #减少计数
  141.         unless $game_switches[HPBarSwitchID]
  142.         
  143.           if @character.hp_counter == HPbarTimeDisplay
  144.             @param_sprites.each do |sprite|
  145.               sprite.opacity = 255
  146.             end
  147.           elsif  @character.hp_counter < HPbarTimeDisplay/3
  148.             @param_sprites.each do |sprite|
  149.               sprite.opacity -= 255/(HPbarTimeDisplay/3)
  150.             end
  151.           end
  152.           @character.hp_counter -= 1
  153.         else
  154.             @param_sprites.each do |sprite|
  155.               sprite.opacity = 255
  156.             end
  157.          
  158.         end
  159.         
  160.         # 刷新坐标
  161.         @param_sprites.each do |sprite|
  162.           sprite.ox = sprite.bitmap.width / 2
  163.           sprite.oy = sprite.bitmap.height
  164.           sprite.x = x
  165.           #sprite.y = y - 52
  166.          
  167.           #sprite.opacity = 255
  168.           shif = @character.is_cal
  169.           sprite.y = y - (shif ? 82 : 52)
  170.           sprite.z = z
  171.         end
  172.         @hp_sprite.z += 1
  173.         @mp_sprite.z += 1
  174.         # 计算 HP 显示区域
  175.         hpw = (@hp_sprite.bitmap.width * 1.0 * event_hp / event_mhp).round
  176.         hpw = [[hpw, @hp_sprite.bitmap.width].min, 0].max
  177.         hph = @hp_sprite.bitmap.height
  178.         @hp_sprite.src_rect.set(0, 0, hpw, hph)
  179.         # 刷新 MP 可见状态
  180.         @mp_sprite.visible = @mp_back_sprite.visible = (show_mp_bar? and event_mmp > 0) # 正太君改
  181.         
  182.         
  183.         
  184.         # MP 可见的情况
  185.         if show_mp_bar?
  186.           # 修正 HP 坐标
  187.           @hp_sprite.y -= (@mp_sprite.oy + 1)
  188.           @hp_back_sprite.y = @hp_sprite.y
  189.           # 计算 MP 显示区域
  190.           if event_mmp > 0 # 正太君改
  191.             mpw = (@mp_sprite.bitmap.width * 1.0 * event_mp / event_mmp).round
  192.             mpw = [[mpw, @mp_sprite.bitmap.width].min, 0].max
  193.             mph = @mp_sprite.bitmap.height
  194.             @mp_sprite.src_rect.set(0, 0, mpw, mph)
  195.           end
  196.         end
  197.       else
  198.         @param_sprites.each{|sprite|sprite.visible = false}
  199.       end
  200.     end
  201.   end
  202. end
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4721
在线时间
387 小时
注册时间
2012-11-8
帖子
276
4
发表于 2023-6-5 16:12:40 | 只看该作者
Window_BattleStatus里加入描绘敌人血条
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
24
星屑
7497
在线时间
249 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

3
发表于 2023-6-5 16:03:53 | 只看该作者
本帖最后由 纯属小虫 于 2023-6-5 16:05 编辑

有个思路,Scenebattle的时候,在敌人下方的位置建一个 new window 类。
然后这个window类里面的内容,跟我们常见的血条类一致。
然后在update里面做一个判定,当对象hp发生变化的时候,window.refresh 一次就好了
如果对象消失,这个window的透明度和内容也变成 0
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36442
在线时间
10799 小时
注册时间
2009-3-15
帖子
4814
2
发表于 2023-6-4 13:03:38 | 只看该作者
论坛搜血条应该有现成脚本

点评

你想自定义什么..我想应该都可以吧  发表于 2023-6-5 17:01
显示敌人HP脚本现成的,无法做到自定义  发表于 2023-6-4 17:10
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 15:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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