Project1

标题: 显示SP伤害 [打印本页]

作者: swhswh    时间: 2010-9-1 19:02
标题: 显示SP伤害
本帖最后由 swhswh 于 2010-9-1 19:04 编辑

       有一个整合SP伤害的伤害值美化脚本,pictures里面有damage和damage-sp,但是实际用起来,只有HP的回复显示。
        我没见过有RM游戏能有HP/SP双重显示!
        比如,吃一种药,效果是HP、SP均恢复9999,希望战斗中(尤其是地图上显示伤害)能够冒出来两个数字9999是补血,9999是补魔法值。
        请问能实现这种效果吗?
作者: azdet54639    时间: 2010-9-1 22:17
不明白尤其是地图上???
RTAB可以做到
作者: swhswh    时间: 2010-9-2 08:23
简单说,就是我想让补魔法时也能显示回复量,而且是蓝色的,同时也可以显示生命回复量……
作者: fux2    时间: 2010-9-2 11:45
回复 swhswh 的帖子

Sprite_Battler里自行修改
    (可能还要修改别的地方才能算出SP减少量)
作者: swhswh    时间: 2010-9-2 13:00
本帖最后由 swhswh 于 2010-9-2 13:45 编辑

能不能给个具体解法……我觉得这个效果所有的RM游戏都不具备啊,难道没有人想实现吗?
显示SP回复量,貌似应该不难吧?



#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================


# ============================================================================
# 伤害效果美化 v1.0 by SailCat
# ============================================================================

# 脚本使用说明:

# 1.使用时需要将Damage.png复制到你的游戏的Graphics/Pictures目录下

# 2.Damage.png文件的格式:

#   大小为180 x 96

#   (0, 0) - (179, 31)为伤害值的数字表,其中每个数字宽18,高32

#   (0, 32) - (179, 63)为回复值(伤害负值)的数字表,其中每个数字宽18,高32

#   (0, 64) - (89, 95)为会心一击标记的图画,长宽为90 x 32

#   (90, 64) - (179, 95)为未命中标记的图画,长宽为90 x 32

# ============================================================================

module RPG

  class Sprite < ::Sprite
    #--------------------------------------------------------------------------
    # ● 伤害值描画
    #--------------------------------------------------------------------------
    def damage(value, critical, sp_damage = false)

     # 释放伤害
      dispose_damage
      # 如果伤害值是数值
      if value.is_a?(Numeric)
        # 绝对值转为字符串
        damage_string = value.abs.to_s
      else
        # 转为字符串
        damage_string = value.to_s
      end
      # 初始化位图
      bitmap = Bitmap.new(162, 64)
      bitmap.font.name = "Arial Black"
      bitmap.font.size = 32
      # 伤害值是数值的情况下
      if value.is_a?(Numeric)
        # 分割伤害值字符串
        damage_array = damage_string.scan(/./)
        damage_x = 81 - damage_string.size * 9
        # 伤害值为负的情况下
        if value < 0
          # 调用回复数字表
          rect_y = 32
        else
          # 调用伤害数字表
          rect_y = 0
        end
        # 循环伤害值字符串

       for char in damage_array
         number = char.to_i
          # 显示伤害数字
       if sp_damage
         bitmap.blt(damage_x, 32, RPG::Cache.picture("Damagesp"),
         Rect.new(number * 18, rect_y, 18, 32))
         damage_x += 18
      else
         bitmap.blt(damage_x, 32, RPG::Cache.picture("Damage"),
         Rect.new(number * 18, rect_y, 18, 32))
         damage_x += 18
      end
end
      # 伤害值不是数值的情况
      else
        # 如果伤害值不是 Miss
        unless value == "Miss"
          # 系统默认描画字符串
          bitmap.font.color.set(0, 0, 0)
          bitmap.draw_text(-1, 27, 162, 36, damage_string, 1)
          bitmap.draw_text(+1, 27, 162, 36, damage_string, 1)
          bitmap.draw_text(-1, 29, 162, 36, damage_string, 1)
          bitmap.draw_text(+1, 29, 162, 36, damage_string, 1)
          bitmap.font.color.set(255, 255, 255)
          bitmap.draw_text(0, 28, 162, 36, damage_string, 1)
        # Miss 的情况下
        else
          # 显示未击中图画
          bitmap.blt(36, 28, RPG::Cache.picture("Damage"), Rect.new(90, 64, 90, 32))
        end
      end
      # 会心一击标志打开的情况
      if critical
        # 显示会心一击图画
        bitmap.blt(36, 0, RPG::Cache.picture("Damage"), Rect.new(0, 64, 90, 32))
      end
      # 伤害值定位
      @_damage_sprite = ::Sprite.new(self.viewport)
      @_damage_sprite.bitmap = bitmap
      @_damage_sprite.ox = 81
      @_damage_sprite.oy = 20
      @_damage_sprite.x = self.x
      @_damage_sprite.y = self.y - self.oy / 2
      @_damage_sprite.z = 3000
      @_damage_duration = 40
    end
  end
end

#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================



为什么回复SP根本不显示数值呢?
作者: 韩云溪    时间: 2010-9-2 13:29
本帖最后由 韩云溪 于 2010-9-2 13:41 编辑

在RPG::Sprite之中修改damage函数

module RPG
class ::Sprite < Sprite
def damage(value,critical)#改为def damage(hp_damage,sp_damage,critical)
#把damage函数中的bitmap扩大为(160*128)
#以下hp_damage部分和sp_damage部分仿照帮助文件中value部分的写法写
#把sp_damage的y坐标调整一下
#sp_damage的颜色 = Color.new(0,0,255,128)
end
end
end

然后将Game_Battler里新增一个变量,attr_accessor:sp_damage,
在initialize中添加“@sp_damage = 0” 这一句。
有需要的地方添加“self.sp_damage = 具体数字”这一句。

Sprite_Battler中将damage(value,critical)改为damage(hp_damage,sp_damage,critical)

作者: zhouyuov    时间: 2010-9-2 14:35
恩 不错 学习到一点
作者: swhswh    时间: 2010-9-2 18:18
那个……“有需要的地方”,比如一个物品名叫“小魔法瓶”,战斗中我使用了它,sp回复量50,能不能自动显示啊?
作者: swhswh    时间: 2010-9-5 11:39
伤害值美化脚本不是号称整合了SP吗?怎么显示不了呢?
作者: 逸豫    时间: 2010-9-5 13:37
http://www.diyrpg.net/bbs/viewth ... D%CF%A6%CD%ED%BB%E1
请看4L
作者: swhswh    时间: 2010-9-5 17:55
楼上给的真是好东西!谢过!




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