進階文字顯示
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 會尋找名稱相同的裝置字體 (位在使用者電腦上的字體)。如果在系統上找不到該字體,或使用者的同名字體版本稍有不同,則顯示的文字與您所預期的會有極大的差異。根據預設,文字會以 Times Roman 字體顯示。
若要確定使用者看到的是正確的字體,您可以將該字體內嵌至應用程式 SWF 檔。內嵌字體具有許多優點:
使用內嵌字體的最大限制是會增加應用程式的檔案大小或下載大小。
將字體檔內嵌至應用程式 SWF 檔的正確方法會隨著開發環境而有所不同。
內嵌字體之後,您就可以確定 TextField 使用的是正確的內嵌字體:
-
將 TextField 的
embedFonts
屬性設為
true
。
-
建立 TextFormat 物件,然後將其
fontFamily
屬性設為內嵌字體的名稱,並將 TextFormat 物件套用至 TextField。指定內嵌字體時,
fontFamily
屬性只能包含單一名稱;它無法使用以逗號分隔的多個字體名稱清單。
-
如果使用 CSS 樣式設定 TextField 或元件的字體,請將
font-family
CSS 屬性設為內嵌字體的名稱。如果您想要指定內嵌字體,則
font-family
屬性必須包含單一名稱,而不是名稱清單。
在 Flash 中內嵌字體
Flash Professional 可讓您內嵌幾乎系統上所安裝的所有字體,包含 TrueType 字體和 Type 1 Postscript 字體。
您可以透過多種方式將字體內嵌至應用程式,包含:
如需有關如何將字體內嵌至應用程式的詳細資訊,請參閱「使用 Flash」中的「動態或輸入文字欄位的內嵌字體」。
在 Flex 中內嵌字體
您可以透過多種方式將字體內嵌至 Flex 應用程式,包含:
您只能在 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);
}
|
|
|