Project1

标题: 请问一下,脚本怎么执行这样的图片数字的 [打印本页]

作者: 美丽晨露    时间: 2013-2-18 18:09
标题: 请问一下,脚本怎么执行这样的图片数字的
本帖最后由 美丽晨露 于 2013-2-20 17:06 编辑

明明是一张图片
怎么分割成多张,并且能用做计数?
脚本是怎么执行的?


作者: cinderelmini    时间: 2013-2-18 18:33
记得是把具体数字分割了~
之后根据分割出来的数字获取图片……
总之很久之前弄过~
现在大体忘记怎么弄了~
  1. # ダメージ表示改造(RTAB用) ver 1.02
  2. # 配布元・サポートURL
  3. # http://members.jcom.home.ne.jp/cogwheel/

  4. class Scene_Battle
  5.   alias :atb_setup_original :atb_setup
  6.   def atb_setup
  7.     for path in ["num", "critical", "miss", "levelup", "newskill", "learning"]
  8.       RPG::Cache.numeric(path)
  9.     end
  10.     atb_setup_original
  11.   end
  12. end

  13. module RPG
  14.   class Sprite < ::Sprite
  15.     WIDTH = 18                  # 文字幅
  16.     HEIGHT = 20                 # クリティカルの文字・高さ
  17.     def damage(value, critical, type = 0)
  18.       if value.is_a?(Numeric)
  19.         damage_string = value.abs.to_s
  20.       else
  21.         damage_string = value.to_s
  22.       end
  23.       if value.is_a?(Numeric) and value >= 0
  24.         if type == 0
  25.           if critical
  26.             d_bitmap = draw_damage(value, 1)
  27.           else
  28.             d_bitmap = draw_damage(value, 0)
  29.           end
  30.         else
  31.           d_bitmap = draw_damage(value, 2)
  32.         end
  33.       else
  34.         if type == 0
  35.           d_bitmap = draw_damage(value, 3)
  36.         else
  37.           d_bitmap = draw_damage(value, 4)
  38.         end
  39.       end
  40.       if type == 2
  41.         d_bitmap = draw_damage(value, 5)
  42.       end
  43.       num = @_damage.size
  44.       if type != 2
  45.         @_damage.push([::Sprite.new, 40, 0, rand(40) - 20, rand(30) + 50])
  46.       else
  47.         @_damage.push([::Sprite.new, 40, 0, rand(20) - 10, rand(20) + 60])
  48.       end
  49.       @_damage[num][0].bitmap = d_bitmap
  50.       @_damage[num][0].ox = d_bitmap.width / 2
  51.       @_damage[num][0].oy = d_bitmap.height / 2
  52.       if self.battler.is_a?(Game_Actor)
  53.         @_damage[num][0].x = self.x + self.viewport.ox
  54.         @_damage[num][0].y = self.y - self.oy / 2
  55.       else
  56.         @_damage[num][0].x = self.x + self.viewport.rect.x -
  57.                             self.ox + self.src_rect.width / 2
  58.         @_damage[num][0].y = self.y - self.oy * self.zoom_y / 2 +
  59.                             self.viewport.rect.y
  60.         @_damage[num][0].zoom_x = self.zoom_x
  61.         @_damage[num][0].zoom_y = self.zoom_y
  62.         @_damage[num][0].z = 3000
  63.       end
  64.     end
  65.     def draw_damage(value, element)
  66.       width = 0
  67.       if value.is_a?(Numeric)
  68.         value = value.abs
  69.         fig = value.to_s.size - 1
  70.         file = RPG::Cache.numeric("num")
  71.         d_width = WIDTH * fig + file.rect.width / 10
  72.         if element == 1
  73.           critical = RPG::Cache.numeric("critical")
  74.           d_width = [d_width, critical.rect.width].max
  75.           d_bitmap = Bitmap.new(d_width+36, HEIGHT + file.rect.height / 5)
  76.           d_x = 0#(width - critical.rect.width / 10) / 2
  77.           d_bitmap.blt(d_x+fig*(fig/1.6), 0, critical, critical.rect)
  78.           Audio.se_play("Audio/SE/"+"Clip10",100,100)
  79.     #  $game_screen.start_flash(Color.new(255,255,255),2)
  80.        $game_screen.start_shake(3,9,2)
  81.         else
  82.           d_bitmap = Bitmap.new(d_width, HEIGHT + file.rect.height / 5)
  83.         end
  84.         d_x = ((d_width) - (WIDTH * fig + file.rect.width / 10)) / 2
  85.         while fig >= 0
  86.           d_bitmap.blt(d_x, HEIGHT, file, Rect.new((value / (10 ** fig)) *
  87.             file.rect.width / 10, element * file.rect.height / 5,
  88.             file.rect.width / 10, file.rect.height / 5))
  89.           d_x += WIDTH
  90.           value %= 10 ** fig
  91.           fig -= 1
  92.         end
  93.       else
  94.         case value
  95.         when "Miss"
  96.           file = RPG::Cache.numeric("miss")
  97.         when "Level up!"
  98.           file = RPG::Cache.numeric("levelup")
  99.         when "New Skill!"
  100.           file = RPG::Cache.numeric("newskill")
  101.         when "Learning!"
  102.           file = RPG::Cache.numeric("learning")
  103.         else
  104.           return Bitmap.new(1, 1)
  105.         end
  106.         d_bitmap = file
  107.       end
  108.       return d_bitmap
  109.     end
  110.   end
  111.   module Cache
  112.     def self.numeric(filename)
  113.       self.load_bitmap("Graphics/String/", filename)
  114.     end
  115.   end
  116. end
复制代码
这个是 RTAB的伤害美化脚本~
具体可以看看中间那段分割数字和获取图片的内容~


作者: 美丽晨露    时间: 2013-2-18 18:36
cinderelmini 发表于 2013-2-18 18:33
记得是把具体数字分割了~
之后根据分割出来的数字获取图片……
总之很久之前弄过~

这是彩虹神剑的一段脚本
  1. # 显示伤害数字
  2.        bitmap.blt(hits_x, 0, RPG::Cache.picture("Numbers"),
  3.        Rect.new(number * 36.2, rect_y, 36.2, 50))
  4.      end
复制代码
于是不懂是通过什么操作执行的
作者: 弗雷德    时间: 2013-2-18 18:59
首先把伤害转换成字符串,然后代入damage_string
damage_string = value.abs.to_s
然后for循环,代入每一个数字,切割图片为
Rect.new(数字 *每个数字图片的宽, rect_y, 36.2, 50))


作者: 美丽晨露    时间: 2013-2-18 21:19
弗雷德 发表于 2013-2-18 18:59
首先把伤害转换成字符串,然后代入damage_string
damage_string = value.abs.to_s
然后for循环,代入每一个 ...

谢谢啊。
可是我显示两位数时会出现数字重叠的情况
可以解决吗?




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