2

想象一下,您正在创建一个演示文稿,该演示文稿将被翻译成十几种不同的语言,包括带有非拉丁字符的语言(例如中文)。客户的品牌风格指南规定某些字体对于某些语言是可接受的。内容本身需要外部化,以便无需打开 .fla 或重新保存图形即可替换文本。

所以我们说的是动态 TextField ,从 XML 填充,字体被换出以适应查看者的语言环境 - 动态加载所需字体(不管文件大小)并在必要时应用它们的最简单方法是什么?我正在寻找仅使用 Flash 而不是 Flex的解决方案。

4

4 回答 4

2

这在 Flash 中有点麻烦,但完全有可能。您需要做的是将字体“嵌入”到单独的 swf 中,从主应用程序加载此 swf,然后将该字体也注册到该 swf 中。这将允许您执行字体的运行时加载。这将要求您在应用程序中或在存储翻译的任何文件中指定每种语言的字体,这可能并不完美,但也不是在主应用程序中嵌入所有字体。这可能会无缘无故地加载数百 kb 的字体。

这篇博客文章很好地概述了您需要做什么才能使其正常工作。我自己也做过这个,所以如果你有兴趣,我可以稍后用一些例子来扩展这篇文章。

于 2008-10-23T07:48:21.713 回答
1

我对没有人知道这件事感到非常失望——哦,好吧。我终于找到了一个编写了一个小类来处理字体加载过程的人,并就如何创建 .swfs 以使其加载提供了指导:

Flash AS3 加载字体

希望其他人会发现这很有帮助 - 它原来是解决我的问题的灵丹妙药。

于 2008-10-29T00:40:21.023 回答
0

好吧,您将不得不知道您正在加载什么语言。自动检测可能非常困难。

假设您知道内容是什么语言,您可以使用Font.registerFont()注册要在运行时使用的字体;有了这个,您可以加载一个包含字体的 swf,注册它,它可以供将来在所有文本字段中使用。print("代码示例");

[Embed(src="someFont.ttf", fontFamily="myFont", mimeType="application/x-font")]
private var fontClass:Class;

...

Font.registerFont(fontClass);

请注意,您必须使用 flex 编译器进行编译以支持 Embed 标签。

另外一个很好的实用程序是Font.hasGlyphs(),您可以使用它来检查您正在使用的字符是否在嵌入字体中可用。这可用于跳回系统字体或向开发人员显示警告(如果您忘记了某些字符或其他)。将 TextField 子类化以自动执行此检查可能是一个好主意。

如果这要上线,一般来说嵌入中文是你应该三思而后行的事情。嵌入所有字符会大大增加文件大小,而且无论如何都没有那么多完整的中文字体可用当然,上述技术对于许多其他语言仍然有用。

于 2008-10-22T09:13:51.573 回答
0

首先,确保你设定了期望,这样没人会认为你会在中文和日文等亚洲语言中使用嵌入式字体。除非您打算加载几兆字节的字形,否则您将使用设备字体,句号。因此,有关于使用哪类字体的指南是合理的-_sans_serif或其_typewriter本地化的等价物 - 但没有关于字体本身的指南。

其次,在过去,我的方法一直是让人们相信,在大多数情况下,无论如何他们可能会更好地使用设备字体。使用设备字体将缩短您的开发时间并避免错误。它将使您的内容加载速度更快(如果通过网络),并且几乎在所有情况下都会更快地呈现。通常,它也会更清晰易读。

客户喜欢要求他们所有的正文都使用 Garamond-Extra-British 或其他格式,但要确保他们知道所涉及的成本。如果他们看到了光明,你就可以省去很大的痛苦。

于 2008-10-22T09:31:14.317 回答