幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 6087|回复: 13

[原创]百变文字

[复制链接]

79

主题

617

帖子

6150

积分

⑦老手

暗夜下可怜人

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

使用道具 举报

845

主题

1万

帖子

214748万

积分

版主

脑残中……

Rank: 7Rank: 7Rank: 7

积分
2147483647

声命组金赏

发表于 2006-8-13 20:59:43 | 显示全部楼层
原来这家伙是为了发贴才登陆的....不过这个...转走了哈
http://icv.cc声动音缘配音社
回复 支持 反对

使用道具 举报

38

主题

3468

帖子

1

积分

超级版主

传说中的Bunny火神~!

Rank: 8Rank: 8

积分
1
发表于 2006-8-13 21:10:04 | 显示全部楼层
很棒的东西,这样以后就可以省去用PS的麻烦了。
我突然发现,我是一个很幸运的好人。老婆真好~ 点我进入JQ(激情)教程范例收集!
回复 支持 反对

使用道具 举报

30

主题

477

帖子

5219

积分

⑦老手

积分
5219
发表于 2006-8-13 21:38:28 | 显示全部楼层
嗯,上次的老问题,顺便在这里说吧:
楼主上次做的那个刷支持点的东西,是如何做到用户名+密码登录论坛的?我不知道怎么提交。
回复 支持 反对

使用道具 举报

79

主题

617

帖子

6150

积分

⑦老手

暗夜下可怜人

积分
6150
 楼主| 发表于 2006-8-13 21:44:08 | 显示全部楼层
如果是刷幻森不需要登陆,那个是用来刷起点文学网用的,因为一个帐号只支持一次点击,所以利用循环登陆换号,得到刷点击的目的,不过效率可不是一分钟一万,

像这里,一分钟我机器的极限是刷1000左右.
希望破灭是因为发现真实,宁可背负罪孽也要维护爱我之人,永远的娜乌西卡!!!!!!
回复 支持 反对

使用道具 举报

30

主题

477

帖子

5219

积分

⑦老手

积分
5219
发表于 2006-8-13 21:53:21 | 显示全部楼层
起点文学网,哪个网无所谓,但是如何向目标网站提交登录信息呢?
回复 支持 反对

使用道具 举报

845

主题

1万

帖子

214748万

积分

版主

脑残中……

Rank: 7Rank: 7Rank: 7

积分
2147483647

声命组金赏

发表于 2006-8-13 22:03:34 | 显示全部楼层
[s:5] 那个是刷支持的? = =支持好象存在BUG,刷不了
http://icv.cc声动音缘配音社
回复 支持 反对

使用道具 举报

38

主题

3468

帖子

1

积分

超级版主

传说中的Bunny火神~!

Rank: 8Rank: 8

积分
1
发表于 2006-8-13 22:10:58 | 显示全部楼层
刷支持很好玩么? [s:5]
我突然发现,我是一个很幸运的好人。老婆真好~ 点我进入JQ(激情)教程范例收集!
回复 支持 反对

使用道具 举报

30

主题

477

帖子

5219

积分

⑦老手

积分
5219
发表于 2006-8-14 11:34:49 | 显示全部楼层
无回应 [s:5]
回复 支持 反对

使用道具 举报

218

主题

1万

帖子

10万

积分

⑧专业

赋予你第五自由

积分
108021
发表于 2006-8-14 13:14:47 | 显示全部楼层
[s:5] 这里是技术区,不是水区,不要跑题严重.如果我下面的帖子再跑题立删无赦.
(有关问题还是短信其本人好)

第 五 自 由 -   5th  Freedom   -

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-3-29 15:26 , Processed in 0.030219 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表