设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1686|回复: 6
打印 上一主题 下一主题

[已经解决] 1V求将所有字体改为“描边字”的方法

 关闭 [复制链接]

Lv2.观梦者

(?????)

梦石
0
星屑
736
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

跳转到指定楼层
1
发表于 2011-9-21 23:06:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
所谓“描边字”就是“[FSL][VX]再更新!对话框加强版 v1.09.1031”(http://rpg.blue/thread-158161-1-1.html)中的一种文字效果。
现在咱希望能用这种方式描绘所有的文字。

方法而不是范例

PS:别告诉我只能一个一个窗口去改 = = b 最好能直接对draw_text下手,但是要考虑到描边字的实现也是调用了draw_text的 =w=

点评

看成“猫边字”什么水平 = =  发表于 2011-9-22 13:24

Lv1.梦旅人

梦石
0
星屑
48
在线时间
678 小时
注册时间
2010-8-11
帖子
1533
2
发表于 2011-9-22 00:20:13 | 只看该作者
难道不用那个脚本不行吗=w=
小艾工作室开张= =
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1210
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

3
发表于 2011-9-22 00:21:16 | 只看该作者
  沉影不器的那个脚本遵循了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
复制代码
思路应该是这样……头有点昏,不保证正确性……做作业去。

点评

draw_edge_text 原来这写法已有先例咩,不过现在已经改为draw_outline_text了。  发表于 2011-9-23 18:56

评分

参与人数 1星屑 +40 收起 理由
各种压力的猫君 + 40 今天只剩20分了 :P

查看全部评分


See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复

使用道具 举报

Lv2.观梦者

(?????)

梦石
0
星屑
736
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

4
 楼主| 发表于 2011-9-22 00:39:13 | 只看该作者
  1. 脚本错误:ArgumentError
  2. wrong number of arguments(2 for 5)
复制代码
╮(╯_╰)╭ 果然没这么简单……
另外咱有用那个脚本的,还要考虑到兼容性啊……
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1071 小时
注册时间
2011-5-12
帖子
2317

贵宾

5
发表于 2011-9-22 05:43:46 | 只看该作者
  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

看懂吗?
找我请找芙蕾娅
顺带一提,完全看得懂我头像请捡起你自己的节操哟(自重
回复

使用道具 举报

Lv2.观梦者

(?????)

梦石
0
星屑
736
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

6
 楼主| 发表于 2011-9-22 17:45:23 | 只看该作者
月夜神音 发表于 2011-9-22 05:43
def draw_text_type_a(rect, text, align = 0)
  end

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

话说Bitmap类的定义在哪里能找到啊……
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1071 小时
注册时间
2011-5-12
帖子
2317

贵宾

7
发表于 2011-9-22 18:22: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
复制代码

点评

到最后都整合不了= =放弃了,悬赏可以还给你,要吗?  发表于 2011-9-23 09:57
目前是没时间了(某些事情),因为小生暂时看不明沉影前辈的脚本,只好明天说了…………我这脚本的描边还真混,居然还能认可= =  发表于 2011-9-22 18:33
对照这个咱看看怎么改沉影大的脚本吧 =w= 更喜欢那个效果的说 另外:如果对话的文字想用原来对话框脚本的效果的话,该怎么做?  发表于 2011-9-22 18:27
找我请找芙蕾娅
顺带一提,完全看得懂我头像请捡起你自己的节操哟(自重
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-9 16:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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