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

Project1

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

[已经解决] 【脚本请教】战斗血条为何没有显示

[复制链接]

Lv1.梦旅人

梦石
0
星屑
143
在线时间
62 小时
注册时间
2015-5-24
帖子
56
跳转到指定楼层
1
发表于 2017-4-14 09:00:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
小弟今天改游戏血条,在脚本异常中改改改。。
然而在测试过程中并没有出现脚本错误现象之后,战斗血条并没有显示在画面,
这是为什么呢? 该如何解决?
   在线等前辈高级回答。。。。

代码如下。
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Sprite_Battler
  3. #------------------------------------------------------------------------------
  4. #  战斗显示用活动块。Game_Battler 类的实例监视、
  5. # 活动块的状态的监视。
  6. #==============================================================================
  7.  
  8. class Sprite_Battler < RPG::Sprite
  9.   #--------------------------------------------------------------------------
  10.   # ● 定义实例变量
  11.   #--------------------------------------------------------------------------
  12.   attr_accessor :battler                  # 战斗者
  13.   #--------------------------------------------------------------------------
  14.   # ● 初始化对像
  15.   #     viewport : 显示端口
  16.   #     battler  : 战斗者 (Game_Battler)
  17.   #--------------------------------------------------------------------------
  18.   def initialize(viewport, battler = nil)
  19.     super(viewport)
  20.     @battler = battler
  21.     @battler_visible = false
  22.     #★★★★★★★★★★★★
  23.     @nx = 0
  24.     @xbit = 0
  25.     @sprite_contens = Sprite.new
  26.     @sprite_contens.x = 0
  27.     @sprite_contens.y = 0
  28.     @sprite_contens.bitmap = Bitmap.new(72,48)
  29.     @battler_hp = 0
  30.     @battler_sp = 0
  31.  
  32.     #★★★★★★★★★★★★
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 释放
  36.   #--------------------------------------------------------------------------
  37.   def dispose
  38.     if self.bitmap != nil
  39.       self.bitmap.dispose
  40.     end
  41.  
  42.  
  43.   if @sprite_contens !=nil
  44.     @sprite_contens.bitmap.dispose
  45.     @sprite_contens.dispose
  46.     @sprite_contens = nil
  47.    super
  48. end
  49.    end
  50.  
  51.  
  52.   def draw_battle_hp(actor, x, y)
  53.     # 底图描绘
  54.     battle_hp_bitmap = RPG::Cache.picture("战斗条框")
  55.     src_rect = Rect.new(0, 0, battle_hp_bitmap.width, battle_hp_bitmap.height)
  56.     @sprite_contens.bitmap.blt(x, y, battle_hp_bitmap, src_rect)
  57.     # 血条显示
  58.     battle_hp_bitmap = RPG::Cache.picture("战斗血条")
  59.     hp_width = battle_hp_bitmap.width * actor.hp / actor.maxhp
  60.     src_rect = Rect.new(0, 0, hp_width, battle_hp_bitmap.height)
  61.     @sprite_contens.bitmap.blt(x, y, battle_hp_bitmap, src_rect)
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 战斗法条描绘
  65.   #--------------------------------------------------------------------------
  66.   def draw_battle_sp(actor, x, y)
  67.     # 底图描绘
  68.     battle_sp_bitmap = RPG::Cache.picture("战斗条框")
  69.     src_rect = Rect.new(0, 0, battle_sp_bitmap.width, battle_sp_bitmap.height)
  70.     @sprite_contens.bitmap.blt(x, y, battle_sp_bitmap, src_rect)
  71.     # 法条显示
  72.     battle_sp_bitmap = RPG::Cache.picture("战斗法条")
  73.     sp_width = battle_sp_bitmap.width * actor.sp / actor.maxsp
  74.     src_rect = Rect.new(0, 0, sp_width, battle_sp_bitmap.height)
  75.     @sprite_contens.bitmap.blt(x, y, battle_sp_bitmap, src_rect)
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 战斗中名字的描绘
  79.   #--------------------------------------------------------------------------
  80.   def draw_actor_name(actor, x, y)
  81.     @sprite_contens.bitmap.font.color = Color.new(0, 230, 50, 255)
  82.     @sprite_contens.bitmap.font.size = 16
  83.     @sprite_contens.bitmap.draw_text(x, y, 60, 32, actor.name,1)
  84.   end
  85.  
  86.   #--------------------------------------------------------------------------
  87.   # ● 刷新画面
  88.   #--------------------------------------------------------------------------
  89.   def update
  90.     super
  91.     # 战斗者为 nil 的情况下
  92.     if @battler == nil
  93.       self.bitmap = nil
  94.       loop_animation(nil)
  95.       return
  96.     end
  97.     #刷新战斗血条
  98.     if @battler.is_a?(Game_Actor)
  99.       if not @sprite_contens.disposed?
  100.         if @battler_hp == 0 and not @battler.dead?
  101.           @sprite_contens.bitmap.clear
  102.           @sprite_contens.x = @battler.screen_x - 30
  103.           @sprite_contens.y = @battler.screen_y - 20
  104.           draw_actor_name(@battler, 0, 0)
  105.           draw_battle_sp(@battler, 0, 27)
  106.           draw_battle_hp(@battler, 0, 35)
  107.           @battler_hp = @battler.hp
  108.         elsif @battler_hp != @battler.hp #and $scene.phase4_step == 6
  109.           @sprite_contens.bitmap.clear
  110.           @sprite_contens.x = @battler.screen_x - 30
  111.           @sprite_contens.y = @battler.screen_y - 20
  112.           draw_actor_name(@battler, 0, 0)
  113.           draw_battle_sp(@battler, 0, 27)
  114.           draw_battle_hp(@battler, 0, 35)
  115.           @battler_hp = @battler.hp
  116.         elsif @battler_sp != @battler.sp #and $scene.phase4_step == 6
  117.           @sprite_contens.bitmap.clear
  118.           @sprite_contens.x = @battler.screen_x - 30
  119.           @sprite_contens.y = @battler.screen_y - 20
  120.           draw_actor_name(@battler, 0, 0)
  121.           draw_battle_sp(@battler, 0, 27)
  122.           draw_battle_hp(@battler, 0, 35)
  123.           @battler_sp = @battler.sp
  124.         end
  125.         if @wait_count.to_i != 0
  126.           @sprite_contens.visible = false
  127.         else
  128.           @sprite_contens.visible = true
  129.         end
  130.       end
  131.     elsif @battler.is_a?(Game_Enemy)
  132.       unless @sprite_contens.disposed?
  133.         if @battler.hp0?
  134.           @sprite_contens.bitmap.clear
  135.         end
  136.       if @wait_count.to_i != 0
  137.         @sprite_contens.visible = false
  138.       else
  139.         @sprite_contens.visible = true
  140.       end
  141.       end
  142.     end
  143.  
  144.  
  145.     # 文件名和色相与当前情况有差异的情况下
  146.     if @battler.battler_name != @battler_name or
  147.        @battler.battler_hue != @battler_hue
  148.       @battler_hue = @battler.battler_hue
  149.       # 获取、设置位图
  150.       @battler_name = @battler.battler_name
  151.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  152.       @width = bitmap.width
  153.       @height = bitmap.height
  154.       self.ox = @width / 2
  155.       self.oy = @height
  156.       # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  157.       if @battler.is_a?(Game_Enemy)
  158.         if @battler.dead? or @battler.hidden
  159.           #self.opacity = 0
  160.         end
  161.       end
  162.     end
  163.  
  164.     #★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  165.     #if  
  166.     @nx += 1
  167.       @nx %= 40
  168.       @xbit = @nx / 10 * self.bitmap.width/4
  169.       self.src_rect.set(@xbit, 0, self.bitmap.width/4, self.bitmap.height)
  170.     #end
  171.     #★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  172.  
  173.     # 动画 ID 与当前的情况有差异的情况下
  174.     if @battler.state_animation_id != @state_animation_id and @battler.damage == nil
  175.       @state_animation_id = @battler.state_animation_id
  176.       loop_animation($data_animations[@state_animation_id])
  177.     end
  178.     # 应该被显示的角色的情况下
  179.     if @battler.is_a?(Game_Actor) and @battler_visible
  180.       # 不是主状态的时候稍稍降低点透明度
  181.       if $game_temp.battle_main_phase
  182.         #self.opacity += 3 if self.opacity < 255
  183.       else
  184.         #self.opacity -= 3 if self.opacity > 207
  185.       end
  186.     end
  187.     if @battler.is_a?(Game_Actor) and self.xiaoshi != nil and self.xiaoshi > 0
  188.        @battler.xiaoshi = 0
  189.  
  190.        self.xiaoshi -= 1
  191.        if $status_shu == nil
  192.           $status_shu = 0
  193.        end
  194.     elsif @battler.xiaoshi == 0 and self.xiaoshi <= 0
  195.        @battler.xiaoshi = nil
  196.        $status_shu = nil
  197.     end
  198.  
  199.  
  200.  
  201.     # 明灭
  202.     if @battler.blink
  203.       blink_on
  204.     else
  205.       blink_off
  206.     end
  207.     # 不可见的情况下
  208.     unless @battler_visible
  209.       # 出现 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  210.       if not @battler.hidden and not @battler.dead? and
  211.          (@battler.damage == nil or @battler.damage_pop)
  212.         if @battler.is_a?(Game_Enemy)
  213.           appear
  214.         else
  215.           @battler.battler_name = @battler.battler_name.split(/★/)[0]
  216.         end
  217.         @battler_visible = true
  218.       end
  219.     end
  220.     # 可见的情况下
  221.     if @battler_visible
  222.       # 逃跑
  223.       if @battler.hidden
  224.         $game_system.se_play($data_system.escape_se)
  225.         escape
  226.         @battler_visible = false
  227.       end
  228.       # 白色闪烁
  229.       if @battler.white_flash
  230.         whiten
  231.         @battler.white_flash = false
  232.       end
  233.       # 动画
  234.       if @battler.animation_id != 0
  235.         animation = $data_animations[@battler.animation_id]
  236.         animation(animation, @battler.animation_hit)
  237.         @battler.animation_id = 0
  238.       end
  239.       # 伤害
  240.       if @battler.damage_pop
  241.         damage(@battler.damage, @battler.critical)
  242.         @battler.damage = nil
  243.         @battler.critical = false
  244.         @battler.damage_pop = false
  245.       end
  246.       # korapusu★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  247.       if @battler.damage == nil and @battler.dead?
  248.         if @battler.is_a?(Game_Enemy)
  249.           $game_system.se_play($data_system.enemy_collapse_se)
  250.           collapse
  251.         else
  252.           $game_system.se_play($data_system.actor_collapse_se)
  253.           @battler.battler_name = @battler.battler_name.split(/★/)[0]
  254.           @battler.battler_name = @battler.battler_name + "★2"
  255.         end
  256.         @battler_visible = false
  257.       end
  258.     end
  259.        if @flash_shake_switch == true
  260.       self.x = @battler.screen_x
  261.       self.y = @battler.screen_y
  262.       self.z = @battler.screen_z
  263.       @flash_shake_switch = false
  264.       if @battler.is_a?(Game_Actor)
  265.         @sprite_contens.bitmap.clear
  266.         @sprite_contens.x = @battler.screen_x - 30
  267.         @sprite_contens.y = @battler.screen_y - 20
  268.         draw_actor_name(@battler, 0, 0)
  269.         draw_battle_sp(@battler, 0, 27)
  270.         draw_battle_hp(@battler, 0, 35)
  271.       elsif @battler.is_a?(Game_Enemy)
  272.         @sprite_contens.bitmap.clear
  273.         @sprite_contens.x = @battler.screen_x - 30
  274.         @sprite_contens.y = @battler.screen_y - 20
  275.         draw_actor_name(@battler, 0, 0)
  276.       end
  277.     end
  278.     # 设置活动块的坐标
  279.     if @battler.is_a?(Game_Actor)
  280.      self.x = @battler.s_x
  281.      self.y = @battler.s_y
  282.      self.z = @battler.s_z
  283.     else
  284.      self.x = @battler.screen_x
  285.      self.y = @battler.screen_y
  286.      self.z = @battler.screen_z
  287.     end
  288.   end
  289. end

Lv4.逐梦者 (版主)

梦石
0
星屑
9497
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

2
发表于 2017-4-14 09:33:43 | 只看该作者
脚本改动较多导致我在新工程下测试很痛苦。

如果是在 Sprite_Battler 下修改,请将生成的血条等图片放在同一个端口(viewport)下,否则会被端口遮挡从而看不到。

具体来说,脚本 25 行
RUBY 代码复制
  1. @sprite_contens = Sprite.new


需要变成
RUBY 代码复制
  1. @sprite_contens = Sprite.new(viewport)

其中 viewport 就是 initialize 参数那个 viewport。

另外代码里有变量名等小错误,请自行修正。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
143
在线时间
62 小时
注册时间
2015-5-24
帖子
56
3
 楼主| 发表于 2017-4-14 09:58:31 | 只看该作者
RyanBern 发表于 2017-4-14 09:33
脚本改动较多导致我在新工程下测试很痛苦。

如果是在 Sprite_Battler 下修改,请将生成的血条等图片放在同 ...

感谢版主回答,
但是看不懂阿, 之前我就改动过Sprite.new(viewport),但并没啥用阿.
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
32028
在线时间
5081 小时
注册时间
2012-11-19
帖子
4877

开拓者

4
发表于 2017-4-14 11:07:44 | 只看该作者
本帖最后由 芯☆淡茹水 于 2017-4-14 11:29 编辑

粗略看了下,可能是显示端口问题,还有可能是没赋值 Z 值给血条。

对于写惯了血条的来说,完全可以简略很多,也很容易找出问题所在。

前面初始化只留两条,其它都不需要
@sprite_contens = Sprite.new(viewport)
@sprite_contens.bitmap = Bitmap.new(72,48)

  1. #==============================================================================
  2. class Sprite_Battler < RPG::Sprite
  3.   #--------------------------------------------------------------------------
  4.   def update
  5.     unless @battler.nil?  #战斗者存在的情况下
  6.       #在用于记录血量的 @data_hp 与战斗者血量有变动的情况下,重新描绘血槽。
  7.       draw_battle_hp(x, y) if @data_hp != @battler.hp
  8.       #在用于记录法术值的 @data_sp 与战斗者法术值有变动的情况下,重新描绘法槽。
  9.       draw_battle_sp(x, y) if @data_sp != @battler.sp
  10.     end
  11.     #以下默认脚本
  12.     #。
  13.     #。
  14.     #。
  15.     #。
  16.     #然后确定血条图片什么情况下显示(比如和战斗图片一同显示)
  17.     @sprite_contens.visible = @battler_visible
  18.     #最后要随时确定血条图片的位置。
  19.     @sprite_contens.x = @battler.screen_x - 30
  20.     @sprite_contens.y = @battler.screen_y - 20
  21.     @sprite_contens.z = @battler.screen_z #或者可以再加一点,比如+5,比战斗图片高点。
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 战斗血条描绘
  25.   #--------------------------------------------------------------------------
  26.   def draw_battle_hp(x, y)
  27.     #记录当前血量
  28.     @data_hp = @battler.hp
  29.     #清除以前显示的。
  30.     @sprite_contens.bitmap.clear
  31.     # 底图描绘
  32.     battle_hp_bitmap = RPG::Cache.picture("战斗条框")
  33.     src_rect = Rect.new(0, 0, battle_hp_bitmap.width, battle_hp_bitmap.height)
  34.     @sprite_contens.bitmap.blt(x, y, battle_hp_bitmap, src_rect)
  35.     # 血条显示
  36.     battle_hp_bitmap = RPG::Cache.picture("战斗血条")
  37.     hp_width = battle_hp_bitmap.width * @battler.hp / @battler.maxhp
  38.     src_rect = Rect.new(0, 0, hp_width, battle_hp_bitmap.height)
  39.     @sprite_contens.bitmap.blt(x, y, battle_hp_bitmap, src_rect)
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # ● 战斗法条描绘
  43.   #--------------------------------------------------------------------------
  44.   def draw_battle_sp(x, y)
  45.     #记录当前法术值
  46.     @data_sp = @battler.sp
  47.     #清除以前显示的。
  48.     @sprite_contens.bitmap.clear
  49.     # 底图描绘
  50.     battle_sp_bitmap = RPG::Cache.picture("战斗条框")
  51.     src_rect = Rect.new(0, 0, battle_sp_bitmap.width, battle_sp_bitmap.height)
  52.     @sprite_contens.bitmap.blt(x, y, battle_sp_bitmap, src_rect)
  53.     # 法条显示
  54.     battle_sp_bitmap = RPG::Cache.picture("战斗法条")
  55.     sp_width = battle_sp_bitmap.width * @battler.sp / @battler.maxsp
  56.     src_rect = Rect.new(0, 0, sp_width, battle_sp_bitmap.height)
  57.     @sprite_contens.bitmap.blt(x, y, battle_sp_bitmap, src_rect)
  58.   end
  59. end
  60. #==============================================================================
复制代码

点评

怎么说呢,就跟截图的方法是 map_shop 那种一样~  发表于 2017-4-14 13:08
没写错啊,变量名是随便取的。  发表于 2017-4-14 13:06
原来是作者自己写错了>_<  发表于 2017-4-14 12:56
是 contents 吧  发表于 2017-4-14 12:40
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
143
在线时间
62 小时
注册时间
2015-5-24
帖子
56
5
 楼主| 发表于 2017-4-14 18:59:39 | 只看该作者
芯☆淡茹水 发表于 2017-4-14 11:07
粗略看了下,可能是显示端口问题,还有可能是没赋值 Z 值给血条。

对于写惯了血条的来说,完全可以简略很 ...

非常感谢版主又耐心回答我的问题,
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
32028
在线时间
5081 小时
注册时间
2012-11-19
帖子
4877

开拓者

6
发表于 2017-4-14 19:49:43 | 只看该作者
本帖最后由 芯☆淡茹水 于 2017-4-14 19:52 编辑
梦想始终会醒 发表于 2017-4-14 18:59
非常感谢版主又耐心回答我的问题,


我忽略了一个问题,描绘血和法的精灵是同一个,那么应该改为:

RUBY 代码复制
  1. #==============================================================================
  2. class Sprite_Battler < RPG::Sprite
  3.   #--------------------------------------------------------------------------
  4.   def update
  5.     unless @battler.nil?  
  6.       if @data_hp != @battler.hp or if @data_sp != @battler.sp
  7.         @sprite_contens.bitmap.clear
  8.         draw_battle_hp(x, y)
  9.         draw_battle_sp(x, y)
  10.       end
  11.     end
  12.     #以下默认脚本
  13.     #。
  14.     #。
  15.     #。
  16.     #。
  17.     #然后确定血条图片什么情况下显示(比如和战斗图片一同显示)
  18.     @sprite_contens.visible = @battler_visible
  19.     #最后要随时确定血条图片的位置。
  20.     @sprite_contens.x = @battler.screen_x - 30
  21.     @sprite_contens.y = @battler.screen_y - 20
  22.     @sprite_contens.z = @battler.screen_z #或者可以再加一点,比如+5,比战斗图片高点。
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 战斗血条描绘
  26.   #--------------------------------------------------------------------------
  27.   def draw_battle_hp(x, y)
  28.     #记录当前血量
  29.     @data_hp = @battler.hp
  30.     # 底图描绘
  31.     battle_hp_bitmap = RPG::Cache.picture("战斗条框")
  32.     src_rect = Rect.new(0, 0, battle_hp_bitmap.width, battle_hp_bitmap.height)
  33.     @sprite_contens.bitmap.blt(x, y, battle_hp_bitmap, src_rect)
  34.     # 血条显示
  35.     battle_hp_bitmap = RPG::Cache.picture("战斗血条")
  36.     hp_width = battle_hp_bitmap.width * @battler.hp / @battler.maxhp
  37.     src_rect = Rect.new(0, 0, hp_width, battle_hp_bitmap.height)
  38.     @sprite_contens.bitmap.blt(x, y, battle_hp_bitmap, src_rect)
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 战斗法条描绘
  42.   #--------------------------------------------------------------------------
  43.   def draw_battle_sp(x, y)
  44.     #记录当前法术值
  45.     @data_sp = @battler.sp
  46.     # 底图描绘
  47.     battle_sp_bitmap = RPG::Cache.picture("战斗条框")
  48.     src_rect = Rect.new(0, 0, battle_sp_bitmap.width, battle_sp_bitmap.height)
  49.     @sprite_contens.bitmap.blt(x, y, battle_sp_bitmap, src_rect)
  50.     # 法条显示
  51.     battle_sp_bitmap = RPG::Cache.picture("战斗法条")
  52.     sp_width = battle_sp_bitmap.width * @battler.sp / @battler.maxsp
  53.     src_rect = Rect.new(0, 0, sp_width, battle_sp_bitmap.height)
  54.     @sprite_contens.bitmap.blt(x, y, battle_sp_bitmap, src_rect)
  55.   end
  56. end

评分

参与人数 1星屑 +100 梦石 +1 收起 理由
RyanBern + 100 + 1 认可答案

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
143
在线时间
62 小时
注册时间
2015-5-24
帖子
56
7
 楼主| 发表于 2017-4-16 08:35:22 | 只看该作者
芯☆淡茹水 发表于 2017-4-14 19:49
我忽略了一个问题,描绘血和法的精灵是同一个,那么应该改为:

#===================================== ...

非常感谢!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
8 小时
注册时间
2017-4-16
帖子
14
8
发表于 2017-4-16 18:48:06 | 只看该作者
芯☆淡茹水 发表于 2017-4-14 19:49
我忽略了一个问题,描绘血和法的精灵是同一个,那么应该改为:

#===================================== ...

请问一下大佬,这个代码能直接用吗?如果能的话,应该在那哪?之前复制了一次,但还是不行,不知道是不是把代码放错位置了……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-8 20:08

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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