【发布时间】:2011-05-29 13:11:09
【问题描述】:
编辑过的短版:
Adobe Flash docs 在 TextAreas 上列出属性 embedFonts:
一个布尔值,指示是否 fontFamily 中指定的字体是 嵌入字体。必须设置此样式 如果 fontFamily 指的是一个 嵌入字体。否则,嵌入 不使用字体。如果设置了这个样式 为 true 且 fontFamily 不引用 对于嵌入的字体,没有文本 显示。默认值为 false。
关于“如果此样式设置为 true 且 fontFamily 不引用嵌入字体,则不显示任何文本”声明:当这种情况发生时,如何在 ActionScript 中检测?
TL;DR 原始版本:
我有一个 Flash 应用程序,它加载包含嵌入字体的外部 .swf 文件,以便可以在主应用程序中使用这些字体。我们通过对使用自定义字体的任何内容使用以下 ActionScript 代码来完成此操作:
textBoxName.embedFonts = true;
但是,有时请求的字体在加载的外部.swf 文件中不可用——这通常发生在有人对外部.swf 进行更改并且不包括之前存在的所有字体时...
原因并不重要,重要的是它不可避免,而且会发生。当它出现时,任何不可用字体的文本都不会显示。例如:
- 主应用程序设置为使用“无数”。它正在加载一个外部
swf文件,其中包含 Myriad 以及一些其他字体 - 一段时间后,外部
swf更新为包含一组新字体,Myriad 不再是其中之一。但主应用程序没有更新。 - 现在,“Myriad”中的主应用程序中的所有文本都不再显示。
有没有办法将文本默认为可用的字体,或者检测到该字体不可用并运行一些 ActionScript 代码?
编辑:以防万一,这是我用来从外部 swf 文件加载字体的代码:
// Font Loader:
var loadedFonts = Array();
var fontPakLoadHandler = new Object();
fontPakLoadHandler.percent = 0;
fontPakLoadHandler.onLoadStart = function(target_mc:MovieClip)
{
if(!SuspendEvents)
ExternalInterface.call("fontLoadStart", _root.lcId);
}
fontPakLoadHandler.onLoadInit = function(target_mc:MovieClip)
{
if(!SuspendEvents)
ExternalInterface.call("fontLoadInit", _root.lcId);
}
fontPakLoadHandler.onLoadError = function(target_mc:MovieClip, errorCode:String, httpStatus:Number)
{
if(!SuspendEvents)
ExternalInterface.call("fontLoadError", _root.lcId, errorCode, httpStatus);
}
if(_root.fontPakProgress=='all')
{
fontPakLoadHandler.onLoadProgress = function(target_mc:MovieClip, loadedBytes:Number, totalBytes:Number)
{
fontPakLoadHandler.percent = loadedBytes / totalBytes;
if(!SuspendEvents)
ExternalInterface.call("fontLoadProgress", _root.lcId, loadedBytes, totalBytes, fontPakLoadHandler.percent);
}
}
else
{
fontPakLoadHandler.onLoadProgress = function(target_mc:MovieClip, loadedBytes:Number, totalBytes:Number)
{
var perc = loadedBytes / totalBytes;
if( (fontPakLoadHandler.percent < .75 && perc >= .75) ||
(fontPakLoadHandler.percent < .50 && perc >= .50) ||
(fontPakLoadHandler.percent < .25 && perc >= .25))
{
if(!SuspendEvents)
ExternalInterface.call("fontLoadProgress", _root.lcId, loadedBytes, totalBytes, perc);
}
fontPakLoadHandler.percent = perc;
}
}
fontPakLoadHandler.onLoadComplete = function(target_mc:MovieClip, httpStatus:Number)
{
if(!SuspendEvents)
ExternalInterface.call("flashReady", _root.lcId, true);
//ExternalInterface.call("fontLoadComplete", _root.lcId, httpStatus);
}
var fontPakLoader = new MovieClipLoader();
fontPakLoader.addListener(fontPakLoadHandler);
【问题讨论】:
标签: flash fonts actionscript-2