2012-05-20 25 views
2

动作脚本位图(或BitmapData)很奇怪。不仅它的cacheAsBitmap默认为false,但它似乎BitmapData并不仅仅是一个位图!如何真正光栅化Actionscript 3中的文本?

我发现,动画文本行阿尔法会让他们眨眼。我试图要解决它在许多方面,其中之一是绘制与背景位图的文字和动画的位图:

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只是模拟位图?这是一个错误吗?我错过了什么吗?

+0

http://megaswf.com/file/2433597这里是如果你不想自己编译它。 (使用全屏模式) –

回答

3

首先,你需要在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; 
//......... 

在此之后,您将有'流畅的文字'。

+0

哇,虽然我不相信它会有帮助(我现在没有专注于光栅化文本中的AA问题),但实际上它确实如此。我仍然想知道,为什么? Flash Player作弊是否会告诉我们存在位图,而如果无法绘制没有嵌入字体的文本,则只会将系统字体放在位图顶部,并在透明度起作用时执行一些非常奇怪的操作。无论哪种方式,你是我的英雄,现在我会尝试更改重叠TextLines的alpha,而不使用位图。 –

+0

@MarkusvonBroady不客气。 – Engineer