社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 道具中心
主题 : [原创]百变文字
美兽 离线
级别: ⑤进阶
显示用户信息 
0  发表于: 2006-08-13   

[原创]百变文字

就是制作文字形体变化的特效,使用方法与draw_text一样,为了照顾执行速度,只能舍弃逐点描绘的方法,实现很受限制,不过速度很不错,全屏100字时以上,刚打开菜单时,FPS只降5,随即恢复正常,具体参数设定脚本内有介绍。
工程范例下载(百变文字文件夹下)
http://free.ys168.com/?zsyy
复制代码
  1. #BY:美兽
  2. class Bitmap
  3. def init(bit)
  4.   bit.font.color = self.font.color
  5.   bit.font.size = self.font.size
  6.   bit.font.name = self.font.name
  7.   bit.font.bold = self.font.bold
  8.   bit.font.italic = self.font.italic
  9. end    
  10. #倾斜字(X坐标,Y坐标,宽,高,文本,Y方向倾斜量,不透明度)
  11. def font_inclined(x,y,width,height,str,cir,opacity)
  12.     bitmap=Bitmap.new(width,height)
  13.     init(bitmap)
  14.     bitmap.draw_text(Rect.new(0,0,width,height),str)
  15.     for i in 0..width
  16.     self.blt(x+i,y+cir/(width*1.00)*i, bitmap, Rect.new(i,0,1,height),opacity)      
  17.     end  
  18. end
  19. #单折线字(X坐标,Y坐标,宽,高,折点,文本,Y方向倾斜量,不透明度)
  20. def font_afold(x,y,width,height,pion,str,cir,opacity)
  21.     bitmap=Bitmap.new(width,height)
  22.     init(bitmap)
  23.     bitmap.draw_text(Rect.new(0,0,width,height),str)  
  24.     for i in 0..width
  25.     if i <= width*pion
  26.       y1 = y+cir/(width*pion/2.00)*i
  27.     else  
  28.       y1 = y+((cir/(width*(1-pion)/2.00))*(width-i))
  29.     end
  30.     self.blt(x+i,y1, bitmap, Rect.new(i,0,1,height),opacity)      
  31.     end
  32. end
  33. #多折线字(X坐标,Y坐标,宽,高,折点[类型为数组,折点数量不限,数值为相对比例,总和与宽相等],文本,Y方向倾斜量,不透明度)
  34. def font_wfold(x,y,width,height,pion,str,cir,opacity)
  35.     bitmap=Bitmap.new(width,height)
  36.     init(bitmap)
  37.     bitmap.draw_text(Rect.new(0,0,width,height),str)
  38.     sum = 0
  39.     pion.each do |a|
  40.     sum += a
  41.     end
  42.     index = 0
  43.     for i in 0..width
  44.     toa = 0
  45.     for b in 0..index
  46.       toa += pion[b]
  47.     end
  48.     if index % 2 == 0
  49.       y1 = y+cir/(width*((pion[index]*1.00)/sum))*(i-width*((toa-pion[index])/(sum*1.00)))
  50.     else  
  51.       y1 = y+(cir/((width*((pion[index]*1.00)/sum)))*(width*(toa/(sum*1.00))-i))
  52.     end
  53.     if (i/(width*1.00))> (toa/(sum*1.00))
  54.       index += 1
  55.     end      
  56.     self.blt(x+i,y1, bitmap, Rect.new(i,0,1,height),opacity)
  57.     end
  58.   end
  59.  
  60. #拱形字(X坐标,Y坐标,宽,高,文本,Y方向倾斜量,不透明度)
  61. def font_inclineda(x,y,width,height,str,cir,opacity)
  62.     bitmap=Bitmap.new(width,height)
  63.     init(bitmap)
  64.     bitmap.draw_text(Rect.new(0,0,width,height),str)
  65.     a=-(4*cir/((width**2)*1.00))
  66.     b=4*cir/(width*1.00)    
  67.     for i in 0..width
  68.     y2=a*(i**2)+b*i
  69.     self.blt(x+i,y+y2, bitmap, Rect.new(i,0,1,height))      
  70.     end
  71. end
  72. #波浪字(X坐标,Y坐标,宽,高,文本,[振幅,周期跨度(建议小于1),位相],不透明度)
  73. def font_wave(x,y,width,height,str,cir,opacity)
  74.     bitmap=Bitmap.new(width,height)
  75.     init(bitmap)
  76.     bitmap.draw_text(Rect.new(0,0,width,height),str)
  77.     for i in 0..width
  78.     y2=cir[0]*Math.sin(cir[1]*i+cir[2])
  79.     self.blt(x+i,y+y2, bitmap, Rect.new(i,0,1,height))      
  80.     end
  81. end
  82.  
  83. #梯形字(X坐标,Y坐标,宽,高,文本,上底宽,X坐标偏移,不透明度)
  84. def font_trapezoid(x,y,width,height,str,width_t,inc,opacity)
  85.     bitmap=Bitmap.new(width,height)
  86.     init(bitmap)
  87.     bitmap.draw_text(Rect.new(0,0,width,height),str)
  88.     for i in 1..height
  89.     a = inc*(1-i/(height*1.00))
  90.     w = width_t*(1+(width/(width_t*1.00)-1)*(i/(height*1.00)))
  91.     self.stretch_blt(Rect.new(x+a,y+i,w,1), bitmap, Rect.new(0,i,width,1))
  92.     end
  93. end
  94. #翻转字(X坐标,Y坐标,宽,高,水平翻转(true/false),垂直翻转(true/false),文本,不透明度)
  95. def font_turn(x,y,width,height,hor,per,str,opacity)
  96.     bitmap=Bitmap.new(width,height)
  97.     save=Bitmap.new(width,height)
  98.     init(bitmap)
  99.     init(save)
  100.     bitmap.draw_text(Rect.new(0,0,width,height),str)
  101.     if hor and per
  102.     for i in 0..width
  103.       save.blt(width-i,0, bitmap, Rect.new(i,0,1,height))
  104.     end
  105.     for i in 0..height
  106.       self.blt(x,y+height-i, save, Rect.new(0,i,width,1))
  107.     end    
  108.     return
  109.     end        
  110.     if hor
  111.     for i in 0..width
  112.       self.blt(x+width-i,y, bitmap, Rect.new(i,0,1,height))
  113.     end
  114.     return
  115.     end
  116.     if per
  117.     for i in 0..height
  118.       self.blt(x,y+height-i, bitmap, Rect.new(0,i,width,1))
  119.     end
  120.     return
  121.     end
  122. end
  123. #膨胀字(X坐标,Y坐标,宽,高,文本,膨胀度(负数会产生旗帜式的飘动感),不透明度)
  124. def font_inflation(x,y,width,height,str,cir,opacity)
  125.     cir = -cir
  126.     bitmap=Bitmap.new(width,height)
  127.     init(bitmap)
  128.     bitmap.draw_text(Rect.new(0,0,width,height),str)
  129.     a=-(4*cir/((width**2)*1.00))
  130.     b=4*cir/(width*1.00)    
  131.     for i in 0..width
  132.     y2=a*(i**2)+b*i
  133.     self.stretch_blt(Rect.new(x+i,y+y2,1,height+y2.abs*2), bitmap, Rect.new(i,0,1,height))      
  134.     end
  135. end
  136.  
  137. #挤压字(X坐标,Y坐标,宽,高,文本,挤压度,不透明度)
  138. def font_squeeze(x,y,width,height,str,cir,opacity)
  139.     bitmap=Bitmap.new(width,height)
  140.     init(bitmap)
  141.     bitmap.draw_text(Rect.new(0,0,width,height),str)
  142.     a=-(4*cir/((width**2)*1.00))
  143.     b=4*cir/(width*1.00)    
  144.     for i in 0..width
  145.     y2=a*(i**2)+b*i
  146.     y2=-(y2.abs)
  147.     self.stretch_blt(Rect.new(x+i,y+y2.abs,1,height+y2*2), bitmap, Rect.new(i,0,1,height))      
  148.     end
  149. end
  150.  
  151. end
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
希望破灭是因为发现真实,宁可背负罪孽也要维护爱我之人,永远的娜乌西卡!!!!!!
叮当 离线
级别: 分版主

显示用户信息 
1  发表于: 2006-08-13   
原来这家伙是为了发贴才登陆的....不过这个...转走了哈
http://icv.cc
声动音缘配音社
级别: 总版主
显示用户信息 
2  发表于: 2006-08-13   
很棒的东西,这样以后就可以省去用PS的麻烦了。
我突然发现,我是一个很幸运的好人。老婆真好~

点我进入JQ(激情)教程范例收集!

沉影不器 离线
级别: ⑤进阶
显示用户信息 
3  发表于: 2006-08-13   
嗯,上次的老问题,顺便在这里说吧:
楼主上次做的那个刷支持点的东西,是如何做到用户名+密码登录论坛的?我不知道怎么提交。
美兽 离线
级别: ⑤进阶
显示用户信息 
4  发表于: 2006-08-13   
如果是刷幻森不需要登陆,那个是用来刷起点文学网用的,因为一个帐号只支持一次点击,所以利用循环登陆换号,得到刷点击的目的,不过效率可不是一分钟一万,

像这里,一分钟我机器的极限是刷1000左右.
希望破灭是因为发现真实,宁可背负罪孽也要维护爱我之人,永远的娜乌西卡!!!!!!
沉影不器 离线
级别: ⑤进阶
显示用户信息 
5  发表于: 2006-08-13   
起点文学网,哪个网无所谓,但是如何向目标网站提交登录信息呢?
叮当 离线
级别: 分版主

显示用户信息 
6  发表于: 2006-08-13   
那个是刷支持的? = =支持好象存在BUG,刷不了
http://icv.cc
声动音缘配音社
级别: 总版主
显示用户信息 
7  发表于: 2006-08-13   
刷支持很好玩么?
我突然发现,我是一个很幸运的好人。老婆真好~

点我进入JQ(激情)教程范例收集!

沉影不器 离线
级别: ⑤进阶
显示用户信息 
8  发表于: 2006-08-14   
无回应
玄天 离线
级别: ⑧专业
显示用户信息 
9  发表于: 2006-08-14   
这里是技术区,不是水区,不要跑题严重.如果我下面的帖子再跑题立删无赦.
(有关问题还是短信其本人好)
第 五 自 由
-   5th  Freedom   -
描述
快速回复

认证码:

验证问题:
22-5=?,答案:17 正确答案:17
按"Ctrl+Enter"直接提交