您的位置:首页 > 其它

关于as3 文本的缩放或旋转所引发的问题的解决方案

2015-06-24 09:48 260 查看
在as3 语言中(其他语言中不知道有没有类似的问题),当文本类组件(比如TextField)缩放或旋转时,会出现文字消失不见等问题,这个问题的解决方案有两个:1,使用嵌入字体 2,把文本组件转化为位图进行处理!

第一种方案:就不多说了,这种方案的负作用很多,首先因为要嵌入字体,包含汉字的话,该嵌入字体素材swf,一般都是10M以上。2,使用该嵌入字体时所消耗的cpu挺多的。3,前几天我嵌入一个字体,发现移动文本组件的过程中,出现了一些多余的星星点点的“特效”,哈哈。

第二种方案:有朋友看到这儿会说了,转化为位图会出现缩放时字体变模糊等现象,哈,有办法解决的。这种方案是我目前找到的最好的方案了,哈,该方案是听一个同行朋友讲的!步骤是:1,先把文本组件放大n倍(一般是2的倍数,比如8倍,使用scale来缩放)。2,再把该文本组件转化为位图,注意draw的时候,smoothing参数要设置为true。3,把该位图再缩小n倍,然后就是对该位图进行处理了,这样该位图进行缩放旋转处理,就不会出现旋转后,文字消失不见,或旋转出现字体模糊等现象!理论上,在缩放倍数n倍以内,是不会出现字体模糊等现象,实际上,我缩放到n倍以外,字体模糊现象也不明显。

下面上代码:

var percent:int=8;

var percentScale:Number=Number((1/percent).toExponential(3));

var textBmd:BitmapData=beginScaleText(textField,percent);

var textBm:Bitmap=new Bitmap(textBmd,"auto",true);

textBm.scaleX=percentScale;

textBm.scaleY=percentScale;

/**

* 缩放文本,返回位图数据

* @param box 缩放文本

* @param percent 缩放倍数

* */

public function beginScaleText(box:TextField=null,percent:Number=8):BitmapData

{

var initBoxW:int=Math.floor(box.width);

var initBoxH:int=Math.floor(box.height);

box.scaleX=percent;

box.scaleY=percent;

var curW:int=Math.floor(box.width);

var curH:int=Math.floor(box.height);

var rect:Rectangle=new Rectangle(0,0,curW,curH);

var percentScale:Number=Number((1/percent).toExponential(3));

var matrix:Matrix=new Matrix();

matrix.scale(percent,percent);

var bmd:BitmapData=new BitmapData(curW,curH,true,0xffffff);

bmd.draw(box,matrix,null,null,null,true);

box.scaleX=percentScale;

box.scaleY=percentScale;

return bmd.clone();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: