赞 | 13 |
VIP | 320 |
好人卡 | 64 |
积分 | 3 |
经验 | 112963 |
最后登录 | 2022-8-25 |
在线时间 | 2355 小时 |
Lv2.观梦者 (暗夜天使)
- 梦石
- 0
- 星屑
- 266
- 在线时间
- 2355 小时
- 注册时间
- 2009-3-13
- 帖子
- 2309
|
本帖最后由 Sion 于 2013-10-11 20:54 编辑
直接绘制即可
# 绘制色彩渐变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][i] = 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
# 绘制色彩渐变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][i] = 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
@喵呜喵5 现在可以绘制多种颜色渐变。 |
评分
-
查看全部评分
|