查看: 73|回复: 0

[转载发布] 【新版伤害美化】波形跳动显示时尚版(图片数字)

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月四日(秋) | 显示全部楼层 |阅读模式
    发现一个BUG,使用解除状态的技能会出现MISS图片,现在已经解决,已经使用过的可以直接更新,(大概在64行,102行,150行有改动)
    ———————————————————————————————————————————————————————————————————————————
    我找遍了很多地方也没看有伤害这样显示的,所以研究了下,可能比较时尚哦。刚做出来,可暂时称为1.0测试版,脚本可能不够简洁,感兴趣的可以帮忙简化一下,感谢了!
    另外,不知道有没有BUG,用了很久还没发现,如果有发现的话,还请提出来噢。因为这个是图片版的,考虑到有些新手可能没有数字图片,所以范例工程带了图片,可以直接使用。


    下面是实现的效果:
    比如,伤害为 236  , 2先出来跳到最高点,此时3跳动到了最高点的一半,6刚好出来,当2再次回到原来的位置时,3从最高点到了一半的位置,6到了最高点的位置。然后2不动,3和6陆续回到原来的位置。

    效果:



    使用说明:
    FMS = 2    # 第一次移动的速度
      Num = 3    # 第二第三次移动的速度
      XS = 15    # 第二次移动的像素
      XT = 9     # 第三次移动的像素
      NU = 10   # 数字间的间距 ps:它的三倍也是第一次移动的距离
      FNH = 30   # 第一个数字的高度 这个别乱改,改动了其他坐标也要改
      MAX_D = 70 # 显示的时间的最大值.
    准备三张图片放在Pictures文件夹里,会心一击图片大小为:200 X 28 , 恢复图片和普通伤害图片为150 X 21 ,数字从0排到9,MISS图片为 55 X 20 修改在代码的80到105行之间

    改上面着些数字的时候一定要把握好NU、FMS、Num、MAX_D这些数值之间的配合,详细的就不说了,大家改改试试效果就知道了。

    测试工程:http://115.com/file/anbhygbu#Project.zip

    把下面的脚本代码直接插入Main的前面,[code]# 转载请注明出处————666RPG-盛尘恋-修改制作———————————————#——————————————————————————————————————module RPG#——————————————————————————————————————# 初始化数值  FMS = 2    # 第一次移动的速度  Num = 3    # 第二第三次移动的速度  XS = 15    # 第二次移动的像素  XT = 9     # 第三次移动的像素  NU = 10   # 数字间的间距 ps:它的三倍也是第一次移动的距离  FNH = 30   # 第一个数字的高度  MAX_D = 65 # 显示的时间的最大值#——————————————————————————————————————class Sprite < ::Sprite#--------------------------------------------------------------------------# ● 初始化对像#-------------------------------------------------------------------------- def initialize(viewport = nil)      super(viewport)      @_whiten_duration = 0      @_appear_duration = 0      @_escape_duration = 0      @_collapse_duration = 0      @_damage_duration = 0      @_animation_duration = 0      @_damage_show = false      @_blink = false end#--------------------------------------------------------------------------# ● 伤害#-------------------------------------------------------------------------- def damage(value, critical)           # 释放伤害及转化变量      dispose_damage      @value = value      @critical = critical        # 伤害值定位      @_damage_sprite = ::Sprite.new(self.viewport)      @_damage_sprite.bitmap = Bitmap.new(200, 100)      @_damage_show = true            @_damage_sprite.ox = 0      @_damage_sprite.oy = 0      @_damage_sprite.x = self.x - 82      x1 = (self.bitmap.width-self.bitmap.width/4)/2      @_damage_sprite.x -= x1 - 10 if @battler.is_a?(Game_Actor)            @_damage_sprite.y = self.y - self.oy - 30      @_damage_sprite.y += self.oy/2-45 if @battler.is_a?(Game_Actor)      @_damage_sprite.z = 3000            # 与移动有关的变量初始化      @_damage_duration = MAX_D      @_damage_nb1t = []      @_damage_rect = []      @_damage_nb1t[0] = FNH - 3*NU      @_damage_nb1t[1] = FNH - 2*NU      @_damage_nb1t[2] = FNH - NU      @_damage_nb1t[3] = FNH      @XV = 3*NU / FMS      @XE = 2*NU / FMS      @XR = NU / FMS      if @value.is_a?(Numeric)        damage_string = @value.abs.to_s      else        # 转为字符串        damage_string = @value.to_s      end      @damage_string = damage_string      # 如果是数值的情况下      if value.is_a?(Numeric)                @_damage_x = 80 - damage_string.size * 9        @ax = 0        @ay = 0        # 分割        damage_array = damage_string.split(//)        for i in 0...damage_array.size          damage_array = damage_array.to_i        end                # 会心一击的情况下        if @critical == true          @_damage_bmp = Bitmap.new("Graphics/Pictures/white_Number_l")          for i in 0...damage_array.size            @_damage_rect = Rect.new(damage_array * 20, 0, 20, 28)          end                  #其他情况,包括恢复        else           if value < 0              @_damage_bmp = Bitmap.new("Graphics/Pictures/green_Number_m")           else              @_damage_bmp = Bitmap.new("Graphics/Pictures/white_Number_m")           end           for i in 0...damage_array.size            @_damage_rect = Rect.new(damage_array * 15, 0, 15, 21)           end        end            #不是数值的情况      elsif value == "Miss"        @_damage_bmp = Bitmap.new("Graphics/Pictures/miss1")      end  end#--------------------------------------------------------------------------# ● 刷新画面#-------------------------------------------------------------------------- def update   super   if @_whiten_duration > 0     @_whiten_duration -= 1     self.color.alpha = 128 - (16 - @_whiten_duration) * 10   end   if @_appear_duration > 0     @_appear_duration -= 1     self.opacity = (16 - @_appear_duration) * 16   end   if @_escape_duration > 0     @_escape_duration -= 1   self.opacity = 256 - (32 - @_escape_duration) * 10   end   if @_collapse_duration > 0     @_collapse_duration -= 1   self.opacity = 256 - (48 - @_collapse_duration) * 6   end   #——————————————————————————————————————            # 以下为伤害显示部分   #——————————————————————————————————————   if @_damage_show == true     @_damage_sprite.bitmap.clear     if @value.is_a?(Numeric)       if @critical == true         for i in 0...@_damage_rect.size           @_damage_nb1t[i+4] = @_damage_nb1t            ay = @_damage_nb1t            ax = @_damage_x+i*22           @_damage_sprite.bitmap.blt(ax, ay, @_damage_bmp, @_damage_rect)         end       else         for i in 0...@_damage_rect.size           @_damage_nb1t[i+4] = @_damage_nb1t            ay = @_damage_nb1t            ax = @_damage_x+i*17           @_damage_sprite.bitmap.blt(ax, ay, @_damage_bmp, @_damage_rect)         end        end      else        unless @value == "Miss"             # 系统默认描画字符串          @_damage_sprite.bitmap.font.color.set(0, 0, 0)          @_damage_sprite.bitmap.draw_text(-1, 27, 162, 36, @damage_string, 1)          @_damage_sprite.bitmap.draw_text(+1, 27, 162, 36, @damage_string, 1)          @_damage_sprite.bitmap.draw_text(-1, 29, 162, 36, @damage_string, 1)          @_damage_sprite.bitmap.draw_text(+1, 29, 162, 36, @damage_string, 1)          @_damage_sprite.bitmap.font.color.set(255, 255, 255)          @_damage_sprite.bitmap.draw_text(0, 28, 162, 36, @damage_string, 1)         else         @_damage_sprite.bitmap.blt(45, @_damage_nb1t[1], @_damage_bmp, Rect.new(0, 0, 55, 20))        end            end        if @_damage_duration > 0    @_damage_duration -= 1#————————————————移动代码部分———————————————————    if MAX_D-@XV
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-13 01:42 , Processed in 0.048790 second(s), 43 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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