2012-05-20 60 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