Actionscript 位图(或 BitmapData)很奇怪。不仅它的cacheAsBitmap默认为false,而且BitmapData似乎并不只是一个位图!
我发现,动画文本行 alpha 会让它们闪烁。我尝试通过多种方式解决这个问题,其中之一是将带有背景的文本绘制到位图并对位图进行动画处理:
package
{
import flash.events.Event;
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.text.TextField;
public class Main extends Sprite
{
private var bdata1:BitmapData = new BitmapData ( 150, 50, false, 0xDDDDFF );
private var bitmap1:Bitmap = new Bitmap( bdata1 );
private var bdata2:BitmapData = new BitmapData ( 100, 100, false, 0x00FFFF );
private var bitmap2:Bitmap = new Bitmap ( bdata2 );
private var show:Boolean = false;
public function Main():void
{
stage.frameRate = 1;
var tf:TextField = new TextField ();
tf.text = "layer top";
bdata1.draw( tf );
tf.text = "layer bottom"
bdata2.draw ( tf );
//*
bitmap1.cacheAsBitmap = true;
bitmap2.cacheAsBitmap = true;
//*/
addChild ( bitmap2 );
addChild ( bitmap1 );
addEventListener (Event.ENTER_FRAME, onEnterFrame );
}
private function onEnterFrame ( e:Event ):void
{
if ( show ) var diff:Number = .2;
else diff = -.2;
bitmap1.alpha += diff;
if ( bitmap1.alpha >= 1 ) {
show = false;
bitmap1.alpha = 1;
}
else if ( bitmap1.alpha <= 0 ) {
show = true;
bitmap1.alpha = 0;
}
}
}
}
它应该做的是在“底层”和“顶层”文本之间平滑(好吧,如果您更改 FPS)过渡。它的作用很奇怪,至少在我的机器上,清楚地表明位图中的文本不被视为位图,但仍被视为矢量(可能是 TextLine)。那么BitmapData只是模拟位图吗?这是一个错误吗?我错过了什么吗?
最佳答案
首先,您需要在swf中嵌入Font
。假设您已嵌入“Arial”
。然后试试这个:
var tf:TextField = new TextField ();
var tf_format:TextFormat = tf.defaultTextFormat;
tf_format.font = "Arial"; //Specifying embedded font's name
tf.defaultTextFormat = tf_format;
tf.embedFonts = true;
tf.antiAliasType = AntiAliasType.ADVANCED;
//.........
此后,您将拥有“平滑文本”。
关于actionscript-3 - 如何在 Actionscript 3 中真正栅格化文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10672629/