查看: 5114|回复: 8

[已经解决] 如何描绘颜色渐变的文字

[复制链接]

梦石
1
星屑
23241
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2013-10-10 18:57:06 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 喵呜喵5 于 2013-10-11 09:06 编辑

RT,默认的显示文字更改颜色只能改成纯色的,如何修改才能使用渐变颜色?

梦石
0
星屑
407
在线时间
1291 小时
注册时间
2013-1-12
回帖
3349

贵宾

发表于 2013-10-11 07:44:53 | 显示全部楼层

回复

使用道具 举报

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
回帖
2257

贵宾

发表于 2013-10-11 13:44:32 | 显示全部楼层
本帖最后由 Sion 于 2013-10-11 20:54 编辑

直接绘制即可
134424tt2ubc57cl05lpbh.png
[pre lang="ruby" line="1"]# 绘制色彩渐变v1.1 更新取消了脚本基需求,脑残了 - -b
# 说明:文字中输入\u[颜色1,颜色2...] 就以渐变色绘制文字,结束渐变插入\u,大小写均可
# 插入文本框测试例子:\u[0,18,9,8]这是渐变文字\u渐变结束
class Window_Base
GRADUAL_SYM = 'U' #修改控制符,需大写。
#-
  alias_method :process_escape_character_NOgradual, :process_escape_character
  def process_escape_character(code, text, pos)
    code.upcase == GRADUAL_SYM ?
      obtain_gradual_param(text, pos) :
      process_escape_character_NOgradual(code, text, pos)
  end
  def obtain_gradual_param(text, pos)
    text = text.slice!(/^\[.*]/)
    if text
      pos[:colors] = []
      text.scan(/\d+/).each_with_index {|c, i| pos[:colors] = c.to_i}
      return if pos[:colors].size >= 2
    end
    pos[:colors] = nil
  end
  #
  alias_method :process_nomarl_character_NOgradual, :process_normal_character
  def process_normal_character(c, pos)
    pos[:colors] ?
      process_nomarl_character_gradual(c, pos) :
      process_nomarl_character_NOgradual(c, pos)
  end
  def process_nomarl_character_gradual(c, pos)
    text_width = text_size(c).width
    draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], c)
    colors = pos[:colors].collect {|c| text_color(c)}
    csz = colors.size
    uy = pos[:y]
    l = (pos[:y] + pos[:height] - uy).fdiv(csz - 1)
    for x in pos[:x]...(pos[:x] + text_width)
      sy = uy
      colors.each_with_index {|c1, i|
        for y in sy.round...(sy + l).round
          c = contents.get_pixel(x, y)
          next if c.alpha == 0
          r = (y - sy) / l
          c2 = colors[i + 1]
          c.red *= calc_gradual_rgb(r, c1.red, c2.red)
          c.blue *= calc_gradual_rgb(r, c1.blue, c2.blue)
          c.green *= calc_gradual_rgb(r, c1.green, c2.green)
          contents.set_pixel(x, y, c)
        end
        break if i == csz - 2
        sy += l
      }
    end
    pos[:x] += text_width
  end
  def calc_gradual_rgb(r, v1,v2)
    (v2 > v1 ? (r * (v2-v1) + v1) : ((1-r) * (v1-v2) + v2)) / 255
  end
end[/pre]
@喵呜喵5 现在可以绘制多种颜色渐变。

点评

诶……好像真的没有么= =小正太又骗我= =  发表于 2013-10-12 18:24
有浮点数哦,set_pixel不能操作但是他的确有的  发表于 2013-10-12 12:10
谢谢,明天塞糖……另外有办法实现一种文字多层渐变色吗?啊如果会更占资源的话就算了……  发表于 2013-10-11 17:54

评分

参与人数 1星屑 +60 收起 理由
喵呜喵5 + 60

查看全部评分

回复

使用道具 举报

菜鸟飞呀飞 该用户已被删除
发表于 2013-10-13 16:45:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
回帖
2257

贵宾

发表于 2013-10-10 22:55:27 | 显示全部楼层
Photoshop;
每个字一种颜色;
单字也要渐变的话,只能想到 get_pixel / set_pixel,同时绘制大量文字很卡。
回复

使用道具 举报

梦石
0
星屑
407
在线时间
1291 小时
注册时间
2013-1-12
回帖
3349

贵宾

发表于 2013-10-11 05:50:49 | 显示全部楼层
記得看過用圖片代替字體...
不過要讀很久ORZ

回复

使用道具 举报

梦石
1
星屑
23241
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

 楼主| 发表于 2013-10-11 08:59:11 | 显示全部楼层
本帖最后由 喵呜喵5 于 2013-10-11 09:00 编辑

主要是看到今年短8有一个游戏就使用了这种颜色渐变的字体,很好奇究竟是怎么做到的……


@Sion
@数字

点评

跟我想到一樣的遊戲....  发表于 2013-10-11 10:52
回复

使用道具 举报

梦石
0
星屑
122
在线时间
552 小时
注册时间
2012-8-18
回帖
1392
发表于 2013-10-11 12:18:11 | 显示全部楼层
原来是切片组合,涨姿势了,不知道使用者感觉效率如何?
在下会尝试整合到在下的ColorStrip里面去

点评

貌似脚本会像Cache那样记录每一个之前描绘过的文字加快下次描绘时的速度……壮哉我大中文……  发表于 2015-1-6 20:04
我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复

使用道具 举报

梦石
0
星屑
122
在线时间
552 小时
注册时间
2012-8-18
回帖
1392
发表于 2013-10-11 23:34:38 来自手机 | 显示全部楼层
Sion 发表于 2013-10-11 13:44
直接绘制即可

# 绘制色彩渐变v1.1 更新取消了脚本基需求,脑残了 - -b

既然用了set_pixel也就是说基本无视效率问题么?好吧对RPG来说无所谓╮(╯_╰)╭
另外set_pixel的话会让字带上锯齿吧,貌似只有blt才能让小于1像素的图像细节保留下来

点评

大哥哦,32bit RGB真彩色也就只有 255^4 种颜色哦,哪里有记录浮点数信息哦?  发表于 2013-10-12 12:23
应该说是图片呈现信息的单位都是像素。  发表于 2013-10-12 10:41
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部