Gradient Text and Color Pairs (RGSS)
Fri, 28 Dec 2007 18:16:59 -0500 - Author:
Here's a function I wrote a few days ago. It draws gradient text on a bitmap on RGSS. It works rather well.
def drawGradientText(bitmap,color1,color2,x,y,width,height,text,align=0,shadow=nil)
return if width<=0 || height<=0
tmp=Bitmap.new(width,height)
tmp2=Bitmap.new(width,height)
tmp.font.size=bitmap.font.size
tmp.font.name=bitmap.font.name
tmp.font.color=color2
textsize=tmp.text_size(text)
textheight=[textsize.height,1].max
tmp.draw_text(0,0,width,height,text,align)
textpos=(height/2)-(textheight/2)
for i in 0...height
if i<textpos
opacity=0
elsif i>=textpos+textheight
opacity=255
else
ratio=((i-textpos)*1.0/textheight)
ratio-=(0.5-ratio)*0.5
opacity=ratio*255
opacity=255 if opacity>255.0
opacity=0 if opacity<0.0
end
tmp2.blt(0,i,tmp,Rect.new(0,i,width,1),opacity)
end
oldcolor=bitmap.font.color
if shadow
bitmap.font.color=shadow
bitmap.draw_text(x+1,y+1,width,height,text,align)
end
bitmap.font.color=color1
bitmap.draw_text(x,y,width,height,text,align)
bitmap.font.color=oldcolor
bitmap.blt(x,y,tmp2,Rect.new(0,0,width,height))
tmp.dispose
tmp2.dispose
end
The next function retrieves a pair of colors from a Window_Base, similar to Window_Base#text_color, for use in drawGradientText above.
def getColorPair(window,pairnum)
pairnum=0 if pairnum<0 || pairnum>=8
if window.windowskin && !window.windowskin.disposed? &&
window.windowskin.width==128
# RPG Maker VX Windowskin
x=64+pairnum*8
color1=window.windowskin.get_pixel(x,96)
color2=window.windowskin.get_pixel(x,104)
return [color1,color2]
else
color=window.text_color(pairnum)
return [color,color]
end
end
