Project1

标题: 1V求将所有字体改为“描边字”的方法 [打印本页]

作者: 各种压力的猫君    时间: 2011-9-21 23:06
标题: 1V求将所有字体改为“描边字”的方法
所谓“描边字”就是“[FSL][VX]再更新!对话框加强版 v1.09.1031”(http://rpg.blue/thread-158161-1-1.html)中的一种文字效果。
现在咱希望能用这种方式描绘所有的文字。

方法而不是范例

PS:别告诉我只能一个一个窗口去改 = = b 最好能直接对draw_text下手,但是要考虑到描边字的实现也是调用了draw_text的 =w=dsu_plus_rewardpost_czw
作者: RPGmaster    时间: 2011-9-22 00:20
难道不用那个脚本不行吗=w=
作者: DeathKing    时间: 2011-9-22 00:21
  沉影不器的那个脚本遵循了FSL,你完全可以拿来主义。你可以在这里查看源代码。
  1. class Bitmap  
  2.   #--------------------------------------------------------------------------  
  3.   # ○ 描边字  
  4.   #--------------------------------------------------------------------------  
  5.   def draw_edge_text(x, y, width, height, str, align = 0, color = nil)  
  6.     font_backup = self.font.clone  
  7.     self.font.color.set(color.red,color.green,color.blue) if color  
  8.     self.font.shadow = false  
  9.     # 描绘边缘  
  10.     self.draw_text(x-1, y-1, width, height, str, align)  
  11.     self.draw_text(x-1, y+1, width, height, str, align)  
  12.     self.draw_text(x+1, y-1, width, height, str, align)  
  13.     self.draw_text(x+1, y+1, width, height, str, align)  
  14.     self.draw_text(x, y-1, width, height, str, align)  
  15.     self.draw_text(x, y+1, width, height, str, align)  
  16.     self.draw_text(x-1, y, width, height, str, align)  
  17.     self.draw_text(x+1, y, width, height, str, align)  
  18.     # 描绘主文字  
  19.     self.font.color = font_backup.color  
  20.     self.draw_text(x, y, width, height, str, align)  
  21.     # 还原默认字体  
  22.     self.font = font_backup  
  23.   end  
  24. end
复制代码
脚本第782行的样子有个描边字调用。自己封装一下就完事了。给出一个可供参考的方法:

  1. class Bitmap
  2.   alias old_draw_text draw_text
  3.   def draw_text(draw_edge_text的参数列表)
  4.     draw_edge_text的源码,不过把其中 draw_text方法调用全变成old_draw_text
  5.   end
  6. end
复制代码
思路应该是这样……头有点昏,不保证正确性……做作业去。
作者: 各种压力的猫君    时间: 2011-9-22 00:39
  1. 脚本错误:ArgumentError
  2. wrong number of arguments(2 for 5)
复制代码
╮(╯_╰)╭ 果然没这么简单……
另外咱有用那个脚本的,还要考虑到兼容性啊……
作者: 月夜神音    时间: 2011-9-22 05:43
  1. alias org_draw_text draw_text unless $!
  2.   def draw_text(*n)
  3.     if n[0].is_a?(Rect)#判断是否Rect
  4.       draw_text_type_a(*n)
  5.     else
  6.       draw_text_type_b(*n)
  7.     end
  8.     #美化啥的内容
  9.     org_draw_text(*n)
  10.   end
复制代码
def draw_text_type_a(rect, text, align = 0)
  end

  def draw_text_type_b(x, y, width, height, text, align = 0)
  end

看懂吗?
作者: 各种压力的猫君    时间: 2011-9-22 17:45
月夜神音 发表于 2011-9-22 05:43
def draw_text_type_a(rect, text, align = 0)
  end

^ ^ ! 虽然能改改简单的脚本但是很遗憾不能完全看懂……
描边字的实现代码在3L了,可以的话麻烦帮我填进去……

话说Bitmap类的定义在哪里能找到啊……
作者: 月夜神音    时间: 2011-9-22 18:22
本帖最后由 月夜神音 于 2011-9-22 18:22 编辑
各种压力的猫君 发表于 2011-9-22 17:45
^ ^ ! 虽然能改改简单的脚本但是很遗憾不能完全看懂……
描边字的实现代码在3L了,可以的话麻烦帮我填进 ...


看了一看,沉影大神的描边语句是对应他的对话脚本而设的,直接搬运当然会出问题……
由于时间问题,小生直接搬出自己工程里的字体描边脚本= =
  1. class Bitmap  
  2.   alias org_draw_text draw_text unless $!
  3.   def draw_text(*n)
  4.     if n[0].is_a?(Rect)
  5.       draw_text_a(*n)
  6.     else
  7.       draw_text_b(*n)
  8.     end
  9.     org_draw_text(*n)
  10.   end
  11.   #--------------------------------------------------------------------------  
  12.   # ○ 描边字  A
  13.   #--------------------------------------------------------------------------  
  14.   def draw_text_a(rect, text, align = 0, color = nil)  
  15.     rect.x = rect.x + 1 if rect.x == 0
  16.     temp = Bitmap.new(rect.width, rect.height)
  17.     temp.font = font.dup
  18.     maxi = [font.color.red, font.color.green, font.color.blue].max
  19.     mini = [font.color.red, font.color.green, font.color.blue].min
  20.     if maxi == mini
  21.       if maxi > 127
  22.         temp.font.color = Color.new(0, 0, 0)
  23.       else
  24.         temp.font.color = Color.new(255, 255, 255)
  25.       end
  26.     else
  27.       m = maxi > 127 ? 48 : 255
  28.       l = maxi > 127 ?  0 : 128
  29.       c = maxi > 127 ? 24 : 192
  30.       temp.font.color.red = font.color.red == maxi ? m : font.color.red == mini ? l : c
  31.       temp.font.color.green = font.color.green == maxi ? m : font.color.green == mini ? l : c
  32.       temp.font.color.blue = font.color.blue == maxi ? m : font.color.blue == mini ? l : c
  33.     end
  34.     temp.org_draw_text(0, 0, rect.width, rect.height, text, align)
  35.     temp.blur
  36.     blt(rect.x, rect.y - 1, temp, temp.rect, font.color.alpha)
  37.     blt(rect.x - 1, rect.y, temp, temp.rect, font.color.alpha)
  38.     blt(rect.x + 1, rect.y, temp, temp.rect, font.color.alpha)
  39.     blt(rect.x, rect.y + 1, temp, temp.rect, font.color.alpha)
  40.     temp.dispose
  41.   end
  42.   #--------------------------------------------------------------------------  
  43.   # ○ 描边字 B
  44.   #--------------------------------------------------------------------------  
  45.   def draw_text_b(x, y, width, height, text, align = 0, color = nil)  
  46.     x = x + 1 if x == 0
  47.     width = 32 if width <= 0
  48.     temp = Bitmap.new(width, height)
  49.     temp.font = font.dup
  50.     maxi = [font.color.red, font.color.green, font.color.blue].max
  51.     mini = [font.color.red, font.color.green, font.color.blue].min
  52.     if maxi == mini
  53.       if maxi > 127
  54.         temp.font.color = Color.new(0, 0, 0)
  55.       else
  56.         temp.font.color = Color.new(255, 255, 255)
  57.       end
  58.     else
  59.       m = maxi > 127 ? 48 : 255
  60.       l = maxi > 127 ?  0 : 128
  61.       c = maxi > 127 ? 24 : 192
  62.       temp.font.color.red = font.color.red == maxi ? m : font.color.red == mini ? l : c
  63.       temp.font.color.green = font.color.green == maxi ? m : font.color.green == mini ? l : c
  64.       temp.font.color.blue = font.color.blue == maxi ? m : font.color.blue == mini ? l : c
  65.     end
  66.     temp.org_draw_text(0, 0, width, height, text, align)
  67.     temp.blur
  68.     blt(x, y - 1, temp, temp.rect, font.color.alpha)
  69.     blt(x - 1, y, temp, temp.rect, font.color.alpha)
  70.     blt(x + 1, y, temp, temp.rect, font.color.alpha)
  71.     blt(x, y + 1, temp, temp.rect, font.color.alpha)
  72.     temp.dispose
  73.   end  
  74. end
复制代码





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