Project1

标题: 伤害值美化 [打印本页]

作者: 紫千修    时间: 2008-10-3 03:34
标题: 伤害值美化
这是我的伤害脚本:
  1. module RPG
  2. class Sprite < ::Sprite
  3.    @@_animations = []
  4.    @@_reference_count = {}
  5.    def damage(value, critical)
  6.      dispose_damage
  7.      if value.is_a?(Numeric)
  8.        damage_string = value.abs.to_s
  9.      else
  10.        damage_string = value.to_s
  11.      end
  12.      bitmap = Bitmap.new(160, 48)
  13.      bitmap.font.name = "黑体"
  14.      bitmap.font.size = 20
  15.      bitmap.font.color.set(0, 0, 0)
  16.      bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  17.      bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  18.      bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  19.      bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  20.      if value.is_a?(Numeric) and value < 0
  21.        bitmap.font.color.set(255, 0, 0)
  22.      else
  23.        bitmap.font.color.set(255, 0, 0)
  24.      end
  25.      bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  26.      if critical
  27.        bitmap.font.size = 20
  28.        bitmap.font.color.set(0, 0, 0)
  29.        bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  30.        bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  31.        bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  32.        bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  33.        bitmap.font.color.set(255, 255, 255)
  34.        bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  35.      end
  36.      @_damage_sprite = ::Sprite.new(self.viewport)
  37.      @_damage_sprite.bitmap = bitmap
  38.      @_damage_sprite.ox = 100
  39.      @_damage_sprite.oy = 40
  40.      @_damage_sprite.x = self.x
  41.      @_damage_sprite.y = self.y - self.oy / 2
  42.      @_damage_sprite.z = 3000
  43.      
  44.      @_damage_duration = 40
  45.    end
  46.    def update
  47.      super
  48.      if @_whiten_duration > 0
  49.        @_whiten_duration -= 1
  50.        self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  51.      end
  52.      if @_appear_duration > 0
  53.        @_appear_duration -= 1
  54.        self.opacity = (16 - @_appear_duration) * 16
  55.      end
  56.      if @_escape_duration > 0
  57.        @_escape_duration -= 1
  58.        self.opacity = 256 - (32 - @_escape_duration) * 10
  59.      end
  60.      if @_collapse_duration > 0
  61.        @_collapse_duration -= 1
  62.        self.opacity = 256 - (48 - @_collapse_duration) * 6
  63.      end
  64.      if @_damage_duration > 0
  65.        @_damage_duration -= 1
  66.        case @_damage_duration
  67.        when 38..39
  68.          @_damage_sprite.y -= 10
  69.        when 36..37
  70.          @_damage_sprite.y -= 5
  71.        when 34..35
  72.          @_damage_sprite.y += 0
  73.        when 28..33
  74.          @_damage_sprite.y += 0
  75.        end
  76.        @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
  77.        if @_damage_duration == 0
  78.          dispose_damage
  79.        end
  80.      end
  81.      if @_animation != nil and (Graphics.frame_count % 2 == 0)
  82.        @_animation_duration -= 1
  83.        update_animation
  84.      end
  85.      if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  86.        update_loop_animation
  87.        @_loop_animation_index += 1
  88.        @_loop_animation_index %= @_loop_animation.frame_max
  89.      end
  90.      if @_blink
  91.        @_blink_count = (@_blink_count + 1) % 32
  92.        if @_blink_count < 16
  93.          alpha = (16 - @_blink_count) * 6
  94.        else
  95.          alpha = (@_blink_count - 16) * 6
  96.        end
  97.        self.color.set(255, 255, 255, alpha)
  98.      end
  99.      @@_animations.clear
  100.    end
  101. end
  102. end
复制代码
请问伤害值前如何 显示 "-" 或"+"
也就是 造成伤害时 显示 -"伤害值" 回血时显示+"伤害值" [LINE]1,#dddddd[/LINE]此贴于 2008-10-3 13:44:52 被版主darkten提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]此贴于 2008-10-4 11:42:19 被版主darkten提醒,请楼主看到后对本贴做出回应。
作者: 婉转深渊    时间: 2008-10-3 05:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: 紫千修    时间: 2008-10-3 05:52
我用了连击的脚本,连击后就会出现计算错误。
脚本 中第 26行 发生了
NomethodError undefined method +' for nil NilClass
作者: dbshy    时间: 2008-10-3 05:58
  1. module RPG
  2. class Sprite < ::Sprite
  3.    @@_animations = []
  4.    @@_reference_count = {}
  5.    def damage(value, critical)
  6.      dispose_damage
  7.      a = ""
  8.      if value.is_a?(Numeric)
  9.        damage_string = value.abs.to_s
  10.       
  11.       if value > 0
  12.        a = "-"
  13.      else
  14.        a = "+"
  15.      end

  16.      else
  17.        damage_string = value.to_s
  18.      end
  19.      

  20.      
  21.      bitmap = Bitmap.new(160, 48)
  22.      bitmap.font.name = "黑体"
  23.      bitmap.font.size = 20
  24.      bitmap.font.color.set(0, 0, 0)
  25.      bitmap.draw_text(-1, 12-1, 160, 36, a+damage_string, 1)
  26.      bitmap.draw_text(+1, 12-1, 160, 36, a+damage_string, 1)
  27.      bitmap.draw_text(-1, 12+1, 160, 36, a+damage_string, 1)
  28.      bitmap.draw_text(+1, 12+1, 160, 36, a+damage_string, 1)
  29.      if value.is_a?(Numeric) and value < 0
  30.        bitmap.font.color.set(255, 0, 0)
  31.      else
  32.        bitmap.font.color.set(255, 0, 0)
  33.      end
  34.      bitmap.draw_text(0, 12, 160, 36, a+damage_string, 1)
  35.      if critical
  36.        bitmap.font.size = 20
  37.        bitmap.font.color.set(0, 0, 0)
  38.        bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  39.        bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  40.        bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  41.        bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  42.        bitmap.font.color.set(255, 255, 255)
  43.        bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  44.      end
  45.      @_damage_sprite = ::Sprite.new(self.viewport)
  46.      @_damage_sprite.bitmap = bitmap
  47.      @_damage_sprite.ox = 100
  48.      @_damage_sprite.oy = 40
  49.      @_damage_sprite.x = self.x
  50.      @_damage_sprite.y = self.y - self.oy / 2
  51.      @_damage_sprite.z = 3000
  52.      
  53.      @_damage_duration = 40
  54.    end
  55.    def update
  56.      super
  57.      if @_whiten_duration > 0
  58.        @_whiten_duration -= 1
  59.        self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  60.      end
  61.      if @_appear_duration > 0
  62.        @_appear_duration -= 1
  63.        self.opacity = (16 - @_appear_duration) * 16
  64.      end
  65.      if @_escape_duration > 0
  66.        @_escape_duration -= 1
  67.        self.opacity = 256 - (32 - @_escape_duration) * 10
  68.      end
  69.      if @_collapse_duration > 0
  70.        @_collapse_duration -= 1
  71.        self.opacity = 256 - (48 - @_collapse_duration) * 6
  72.      end
  73.      if @_damage_duration > 0
  74.        @_damage_duration -= 1
  75.        case @_damage_duration
  76.        when 38..39
  77.          @_damage_sprite.y -= 10
  78.        when 36..37
  79.          @_damage_sprite.y -= 5
  80.        when 34..35
  81.          @_damage_sprite.y += 0
  82.        when 28..33
  83.          @_damage_sprite.y += 0
  84.        end
  85.        @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
  86.        if @_damage_duration == 0
  87.          dispose_damage
  88.        end
  89.      end
  90.      if @_animation != nil and (Graphics.frame_count % 2 == 0)
  91.        @_animation_duration -= 1
  92.        update_animation
  93.      end
  94.      if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  95.        update_loop_animation
  96.        @_loop_animation_index += 1
  97.        @_loop_animation_index %= @_loop_animation.frame_max
  98.      end
  99.      if @_blink
  100.        @_blink_count = (@_blink_count + 1) % 32
  101.        if @_blink_count < 16
  102.          alpha = (16 - @_blink_count) * 6
  103.        else
  104.          alpha = (@_blink_count - 16) * 6
  105.        end
  106.        self.color.set(255, 255, 255, alpha)
  107.      end
  108.      @@_animations.clear
  109.    end
  110. end
  111. end
复制代码
[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~




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