高级文本呈现

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

ActionScript 3.0 在 flash.text 包中提供多个类来控制所显示文本的属性,包括嵌入字体、消除锯齿设置、alpha 通道控制及其他特定设置。“ActionScript 3.0 参考”提供了对这些类和属性(其中包括 CSMSettings、Font 和 TextRenderer 类)的详细描述。

使用嵌入字体

当您在应用程序中为 TextField 指定特定字体时,Flash Player 或 AIR 会查找同名的设备字体(位于用户计算机上的一种字体)。如果在系统上没有找到该字体,或者用户的字体版本与具有该名称的字体略有差异,则文本显示外观会与预想的情况差别很大。默认情况下,文本显示为 Times Roman 字体。

若要确保用户看到完全正确的字体,您可以将该字体嵌入到应用程序 SWF 文件中。嵌入字体有很多好处:

  • 嵌入字体字符是消除锯齿的,特别是对于较大的文本,该字体可以使文本边缘看起来更平滑。

  • 可以旋转使用嵌入字体的文本。

  • 嵌入字体文本可以产生透明或半透明效果。

  • 可以对嵌入字体使用 字距调整的 CSS 样式。

使用嵌入字体的最大限制是嵌入字体会增加文件大小或应用程序的下载大小。

将字体文件嵌入到应用程序 SWF 文件中的具体方法因开发环境而异。

嵌入字体后,可以确保 TextField 使用正确的嵌入字体:

  • 将 TextField 的 embedFonts 属性设置为 true

  • 创建一个 TextFormat 对象,将其 fontFamily 属性设置为嵌入字体的名称,并对 TextField 应用 TextFormat 对象。指定嵌入字体时, 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 文件中的嵌入字体的详细信息,请参阅《使用 Flex 4》中的“嵌入 SWF 文件中的字体”。

控制清晰度、粗细和消除锯齿

默认情况下,在文本调整大小、更改颜色或在不同背景上显示时,Flash Player 或 AIR 可以确定文本显示控件的设置(如清晰度、粗细和消除锯齿)。在某些情况下,如文本很小、很大或显示在各种特别的背景上时,您可能需要保持对这些设置的控制。可以使用 flash.text.TextRenderer 类及其相关类(如 CSMSettings 类)来覆盖 Flash Player 或 AIR 的设置。使用这些类可以精确控制嵌入文本的呈示品质。有关嵌入字体的详细信息,请参阅 使用嵌入字体

注: 为了设置清晰度、粗细或 gridFitType 属性,或者使用 TextRenderer.setAdvancedAntiAliasingTable() 方法, flash.text.TextField .antiAliasType 属性的值必须是 AntiAliasType.ADVANCED

以下示例使用名为 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); 
}