進階文字顯示

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

ActionScript 3.0 在 flash.text 套件中提供了多種可控制顯示文字屬性的類別 (包含內嵌字體、消除鋸齒設定、Alpha 色版控制和其他特定設定)。「Adobe® Flash® Professional CS5 的 ActionScript® 3.0 參考」提供了這些類別和屬性 (包含 CSMSettings、Font 和 TextRenderer 類別) 的詳細說明。

使用內嵌字體

當您在應用程式中指定 TextField 的特定字體時,Flash Player 或 AIR 會尋找名稱相同的裝置字體 (位在使用者電腦上的字體)。如果在系統上找不到該字體,或使用者的同名字體版本稍有不同,則顯示的文字與您所預期的會有極大的差異。

若要確定使用者看到的是正確的字體,您可以將該字體內嵌至應用程式 SWF 檔。內嵌字體具有許多優點:

  • 內嵌字體字元會消除鋸齒,它們的邊緣平滑,特別是針對較大的文字。

  • 您可以旋轉使用內嵌字體的文字。

  • 內嵌字體文字可以設定為透明或半透明。

  • 您可以搭配使用 kerning CSS 樣式與內嵌字體。

使用內嵌字體的最大限制是會增加應用程式的檔案大小或下載大小。

將字體檔內嵌至應用程式 SWF 檔的正確方法會隨著開發環境而有所不同。

內嵌字體之後,您就可以確定 TextField 使用的是正確的內嵌字體:

  • 將 TextField 的 embedFonts 屬性設為 true

  • 建立 TextFormat 物件,然後將其 fontFamily 屬性設為內嵌字體的名稱,並將 TextFormat 物件套用至 TextField。指定內嵌字體時,fontFamily 屬性只能包含單一名稱;它無法使用以逗號分隔的多個字體名稱清單。

  • 如果使用 CSS 樣式設定 TextField 或元件的字體,請將 font-family CSS 屬性設為內嵌字體的名稱。如果您想要指定內嵌字體,則 font-family 屬性必須包含單一名稱,而不是名稱清單。

在 Flash 中內嵌字體

Flash Professional 可讓您內嵌幾乎系統上所安裝的所有字體,包含 TrueType 字體和 Type 1 Postscript 字體。

您可以透過多種方式將字體內嵌至應用程式,包含:

  • 在「舞台」上設定 TextField 的字體和樣式屬性,以及按一下「內嵌字體」核取方塊

  • 建立和參考字體元件

  • 建立和使用含有內嵌字體元件的執行時期共享元件庫

如需有關如何將字體內嵌至應用程式的詳細資訊,請參閱「使用 Flash」中的「動態或輸入文字欄位的內嵌字體」。

在 Flex 中內嵌字體

您可以透過多種方式將字體內嵌至 Flex 應用程式,包含:

  • 在指令碼中使用 [Embed] 中繼資料標籤

  • 使用 @font-face 樣式宣告

  • 為字型建立一個類別,並使用 [Embed] 標籤內嵌該類別。

您只能在 Flex 應用程式中直接內嵌 TrueType 字體。其他格式的字體 (例如 Type 1 Postscript 字體) 可以使用 Flash Professional 先內嵌至 SWF 檔,然後再於 Flex 應用程式中使用該 SWF 檔。如需有關在 Flex 中使用來自 SWF 檔內嵌字體的詳細資訊,請參閱 Using Flex 4 中的 “Embedding fonts from SWF files”。

控制銳利度、粗細和消除鋸齒

Flash Player 或 AIR 預設時便會決定文字顯示控制的設定 (例如調整文字大小、變更顏色,或顯示於各種背景時的銳利度、粗細和消除鋸齒)。在某些情況下 (例如,如果文字太小或太大,或文字位在不同的背景上),您可能會想要保有控制這些設定的權限。您可以使用 flash.text.TextRenderer 類別和其相關類別 (例如 CSMSettings 類別),來覆寫 Flash Player 或 AIR 設定。這些類別可讓您精確控制內嵌文字的顯示品質。如需有關內嵌字體的詳細資訊,請參閱使用內嵌字體

備註: flash.text.TextField.antiAliasType 屬性必須有值 AntiAliasType.ADVANCED,才能讓您設定銳利度、粗細或 gridFitType 屬性,或使用 TextRenderer.setAdvancedAntiAliasingTable() 方法。

下列範例會使用內嵌字體 myFont,將自訂連續筆劃調整 (CSM) 屬性和格式套用至顯示的文字。使用者按一下顯示的文字時,Flash Player 或 Adobe AIR 會套用自訂設定:

var format:TextFormat = new TextFormat(); 
format.color = 0x336699; 
format.size = 48; 
format.font = "myFont"; 
 
var myText:TextField = new TextField(); 
myText.embedFonts = true; 
myText.autoSize = TextFieldAutoSize.LEFT; 
myText.antiAliasType = AntiAliasType.ADVANCED; 
myText.defaultTextFormat = format; 
myText.selectable = false; 
myText.mouseEnabled = true; 
myText.text = "Hello World"; 
addChild(myText); 
myText.addEventListener(MouseEvent.CLICK, clickHandler); 
 
function clickHandler(event:Event):void 
{ 
    var myAntiAliasSettings = new CSMSettings(48, 0.8, -0.8); 
    var myAliasTable:Array = new Array(myAntiAliasSettings); 
    TextRenderer.setAdvancedAntiAliasingTable("myFont", FontStyle.ITALIC, TextColorType.DARK_COLOR, myAliasTable); 
}