[转] TextField中文字不随着TextField透明度的改变而改变解决方案
有时候我们想为TextField文本文字添加一些效果,比如让文字渐渐消失的效果,实现之的代码如下:
package{ import flash.display.Sprite; import flash.events.Event; import flash.filters.BlurFilter; import flash.text.TextField; import flash.text.TextFormat; public class TestEffect extends Sprite { private var tf:TextField = new TextField(); public function TestEffect() { tf.defaultTextFormat = new TextFormat(null, 25); tf.text = "dasjkdjklasjdasjdklasjkldasjkl"; tf.width = tf.textWidth + 5; tf.selectable = false; tf.mouseEnabled = false; tf.x = tf.y = 100; addChild( tf ); tf.addEventListener(Event.ENTER_FRAME, onEF); } private function onEF(e:Event):void { if(tf.alpha > 0) tf.alpha -= 0.02; } }}
但是看不到文字渐渐消失的效果,为什么呢?寡人也不知道为什么,寡人只关心怎么去解决这个问题。
解决方案一:使用嵌入字体:
使用嵌入字体是可以达到效果,但是对于我等天朝子民来说嵌入一个汉字字体将会大大加大Flash的体积,寡人可不愿意用这种方式。
解决方案二:设置BlendMode:
这一招是官方讨论群的“隐竹”兄TELL ME的,以前我TMD还真不知道设置这玩意儿有用。由于其他BlendMode类型都会或多或少地改变我文本区域的颜色,所以推荐使用BlendMode.LAYER。
解决方案三:设置滤镜filters:
为TextField设置一个滤镜filters可以解决问题,当然,你得把滤镜设置得不影响外观才行。
以上三种方案中的后两种原理是让Flash Player把TextField转换为位图来实现文字跟随外观一起播放效果的,那么就有人提出了一个想法说设置cacheAsBitmap为true行不行?我设置后发现不行,而且如果你设置了BlendMode后又设置了cacheAsBitmap为true就会让解决方案二失效。HOLY SHIT~!