- 注册时间
- 2005-4-15
- 最后登录
- 2008-6-21
⑦老手
暗夜下可怜人
- 积分
- 6150
|
就是制作文字形体变化的特效,使用方法与draw_text一样,为了照顾执行速度,只能舍弃逐点描绘的方法,实现很受限制,不过速度很不错,全屏100字时以上,刚打开菜单时,FPS只降5,随即恢复正常,具体参数设定脚本内有介绍。
工程范例下载(百变文字文件夹下)
http://free.ys168.com/?zsyy- #BY:美兽
- class Bitmap
-
- def init(bit)
- bit.font.color = self.font.color
- bit.font.size = self.font.size
- bit.font.name = self.font.name
- bit.font.bold = self.font.bold
- bit.font.italic = self.font.italic
- end
-
- #倾斜字(X坐标,Y坐标,宽,高,文本,Y方向倾斜量,不透明度)
- def font_inclined(x,y,width,height,str,cir,opacity)
- bitmap=Bitmap.new(width,height)
- init(bitmap)
- bitmap.draw_text(Rect.new(0,0,width,height),str)
- for i in 0..width
- self.blt(x+i,y+cir/(width*1.00)*i, bitmap, Rect.new(i,0,1,height),opacity)
- end
- end
- #单折线字(X坐标,Y坐标,宽,高,折点,文本,Y方向倾斜量,不透明度)
- def font_afold(x,y,width,height,pion,str,cir,opacity)
- bitmap=Bitmap.new(width,height)
- init(bitmap)
- bitmap.draw_text(Rect.new(0,0,width,height),str)
- for i in 0..width
- if i <= width*pion
- y1 = y+cir/(width*pion/2.00)*i
- else
- y1 = y+((cir/(width*(1-pion)/2.00))*(width-i))
- end
- self.blt(x+i,y1, bitmap, Rect.new(i,0,1,height),opacity)
- end
- end
- #多折线字(X坐标,Y坐标,宽,高,折点[类型为数组,折点数量不限,数值为相对比例,总和与宽相等],文本,Y方向倾斜量,不透明度)
- def font_wfold(x,y,width,height,pion,str,cir,opacity)
- bitmap=Bitmap.new(width,height)
- init(bitmap)
- bitmap.draw_text(Rect.new(0,0,width,height),str)
- sum = 0
- pion.each do |a|
- sum += a
- end
- index = 0
- for i in 0..width
- toa = 0
- for b in 0..index
- toa += pion[b]
- end
- if index % 2 == 0
- y1 = y+cir/(width*((pion[index]*1.00)/sum))*(i-width*((toa-pion[index])/(sum*1.00)))
- else
- y1 = y+(cir/((width*((pion[index]*1.00)/sum)))*(width*(toa/(sum*1.00))-i))
- end
- if (i/(width*1.00))> (toa/(sum*1.00))
- index += 1
- end
- self.blt(x+i,y1, bitmap, Rect.new(i,0,1,height),opacity)
- end
- end
-
- #拱形字(X坐标,Y坐标,宽,高,文本,Y方向倾斜量,不透明度)
- def font_inclineda(x,y,width,height,str,cir,opacity)
- bitmap=Bitmap.new(width,height)
- init(bitmap)
- bitmap.draw_text(Rect.new(0,0,width,height),str)
- a=-(4*cir/((width**2)*1.00))
- b=4*cir/(width*1.00)
- for i in 0..width
- y2=a*(i**2)+b*i
- self.blt(x+i,y+y2, bitmap, Rect.new(i,0,1,height))
- end
- end
- #波浪字(X坐标,Y坐标,宽,高,文本,[振幅,周期跨度(建议小于1),位相],不透明度)
- def font_wave(x,y,width,height,str,cir,opacity)
- bitmap=Bitmap.new(width,height)
- init(bitmap)
- bitmap.draw_text(Rect.new(0,0,width,height),str)
- for i in 0..width
- y2=cir[0]*Math.sin(cir[1]*i+cir[2])
- self.blt(x+i,y+y2, bitmap, Rect.new(i,0,1,height))
- end
- end
-
- #梯形字(X坐标,Y坐标,宽,高,文本,上底宽,X坐标偏移,不透明度)
- def font_trapezoid(x,y,width,height,str,width_t,inc,opacity)
- bitmap=Bitmap.new(width,height)
- init(bitmap)
- bitmap.draw_text(Rect.new(0,0,width,height),str)
- for i in 1..height
- a = inc*(1-i/(height*1.00))
- w = width_t*(1+(width/(width_t*1.00)-1)*(i/(height*1.00)))
- self.stretch_blt(Rect.new(x+a,y+i,w,1), bitmap, Rect.new(0,i,width,1))
- end
- end
- #翻转字(X坐标,Y坐标,宽,高,水平翻转(true/false),垂直翻转(true/false),文本,不透明度)
- def font_turn(x,y,width,height,hor,per,str,opacity)
- bitmap=Bitmap.new(width,height)
- save=Bitmap.new(width,height)
- init(bitmap)
- init(save)
- bitmap.draw_text(Rect.new(0,0,width,height),str)
- if hor and per
- for i in 0..width
- save.blt(width-i,0, bitmap, Rect.new(i,0,1,height))
- end
- for i in 0..height
- self.blt(x,y+height-i, save, Rect.new(0,i,width,1))
- end
- return
- end
- if hor
- for i in 0..width
- self.blt(x+width-i,y, bitmap, Rect.new(i,0,1,height))
- end
- return
- end
- if per
- for i in 0..height
- self.blt(x,y+height-i, bitmap, Rect.new(0,i,width,1))
- end
- return
- end
- end
- #膨胀字(X坐标,Y坐标,宽,高,文本,膨胀度(负数会产生旗帜式的飘动感),不透明度)
- def font_inflation(x,y,width,height,str,cir,opacity)
- cir = -cir
- bitmap=Bitmap.new(width,height)
- init(bitmap)
- bitmap.draw_text(Rect.new(0,0,width,height),str)
- a=-(4*cir/((width**2)*1.00))
- b=4*cir/(width*1.00)
- for i in 0..width
- y2=a*(i**2)+b*i
- self.stretch_blt(Rect.new(x+i,y+y2,1,height+y2.abs*2), bitmap, Rect.new(i,0,1,height))
- end
- end
-
- #挤压字(X坐标,Y坐标,宽,高,文本,挤压度,不透明度)
- def font_squeeze(x,y,width,height,str,cir,opacity)
- bitmap=Bitmap.new(width,height)
- init(bitmap)
- bitmap.draw_text(Rect.new(0,0,width,height),str)
- a=-(4*cir/((width**2)*1.00))
- b=4*cir/(width*1.00)
- for i in 0..width
- y2=a*(i**2)+b*i
- y2=-(y2.abs)
- self.stretch_blt(Rect.new(x+i,y+y2.abs,1,height+y2*2), bitmap, Rect.new(i,0,1,height))
- end
- end
-
- end
复制代码 |
|