Project1

标题: 扩充Bitmap类有关正则表达式的使用 [打印本页]

作者: 恐惧剑刃    时间: 2013-12-25 19:38
标题: 扩充Bitmap类有关正则表达式的使用
脚本如下
测试出现各种效果错误,HPSP数值,时间显示等等
求神触帮忙看下
谢谢

错误截图




一号角色名
\C[5]\N[2]\V[0]\I[010-Head01.png]
  1. =begin

  2. 仿VX
  3. 若str不是字符串对象,则会先调用 to_s 方法转换成字符串

  4. 控制符:
  5. \N[n] 显示ID为n的角色名
  6. \V[n] 显示n号变量值
  7. \C[n] 文字颜色改变(与显示文章同)
  8. \I[name] 显示名为name的图标

  9. 旧功能:
  10. 文字投影
  11. $color_floor  彩色底

  12. =end

  13. $color_floor = true
  14. class Bitmap
  15.   alias draw_yy draw_text unless method_defined? :draw_yy
  16.   def draw_text(*arg)
  17.     if arg[0].is_a?(Rect)
  18.       x,y,width,height,text = \
  19.       arg[0].x, arg[0].y, arg[0].width, arg[0].height, arg[1]
  20.       align = arg[2] == nil ? 0 : arg[2] ; x_copy = x
  21.     else
  22.       x,y,width,height,text = arg[0],arg[1],arg[2],arg[3],arg[4]
  23.       align = arg[5] == nil ? 0 : arg[5] ; x_copy = x
  24.     end
  25.     unless text.is_a?(String)
  26.       text = text.to_s
  27.     end
  28.     color_coo = self.font.color.clone
  29.     if $color_floor
  30.       ca = [[255, 128][rand(2)], [255, 128][rand(2)], [255, 128][rand(2)]]
  31.       for s in 0...width
  32.         self.fill_rect(x + s, y, 1, height, Color.new(
  33.         ca[0], ca[1], ca[2], 255 - s * 320 / width))
  34.       end
  35.     end
  36.     begin
  37.       last_text = text.clone
  38.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  39.     end until text == last_text
  40.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  41.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  42.     end
  43.     text.gsub!(/\\\\/) { "\000" }
  44.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  45.     text.gsub!(/\\[Ii]\[(.+)\]/) { "\002[#{$1}]" }
  46.     while ((c = text.slice!(/./m)) != nil)
  47.       if c == "\000"
  48.         c = "\\"
  49.       end
  50.       if c == "\001"
  51.         text.sub!(/\[([0-9]+)\]/, "")
  52.         color_coo = draw_color($1.to_i)
  53.         next
  54.       end
  55.       if c == "\002"
  56.         text.sub!(/\[(.+)\]/, "")
  57.         self.blt(x, y, RPG::Cache.icon($1), Rect.new(0, 0, 24, 24))
  58.         x += 24
  59.         next
  60.       end
  61.       self.font.color = Color.new(0, 0, 0)
  62.       draw_yy(x + 1, y, width, height, c, align)
  63.       draw_yy(x - 1, y, width, height, c, align)
  64.       draw_yy(x, y + 1, width, height, c, align)
  65.       draw_yy(x, y - 1, width, height, c, align)
  66.       self.font.color = color_coo
  67.       draw_yy(x, y, width, height, c, align)
  68.       x += self.text_size(c).width
  69.     end
  70.   end
  71.   def draw_color(n)
  72.     case n
  73.     when 0
  74.       return Color.new(255, 255, 255, 255)
  75.     when 1
  76.       return Color.new(128, 128, 255, 255)
  77.     when 2
  78.       return Color.new(255, 128, 128, 255)
  79.     when 3
  80.       return Color.new(128, 255, 128, 255)
  81.     when 4
  82.       return Color.new(128, 255, 255, 255)
  83.     when 5
  84.       return Color.new(255, 128, 255, 255)
  85.     when 6
  86.       return Color.new(255, 255, 128, 255)
  87.     when 7
  88.       return Color.new(192, 192, 192, 255)
  89.     else
  90.       normal_color
  91.     end
  92.   end
  93. end
复制代码

作者: fux2    时间: 2013-12-26 14:00
你的方法都是破坏性的,而继续这个字符串对象被你描绘一次之后,由于没有存档存在,所以调用了一次disable_item来重复描绘一次,而第二次的“继续”二字已经被你破坏掉了,所以字符串为空。
其他字也一样,描第二次就会变成空字符。
你全用破坏性方法,后果自负。




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