4

问候,

我正在编写一个支持多语言的 Flash 应用程序。我最初选择的字体是 Tahoma,因为它支持 Unicode。客户更喜欢非标准字体,例如 Lucida Handwriting。Lucida Handwriting 不像 Tahoma 那样支持西里尔字母,这带来了一个有几种方法可以解决的问题,我想请教您哪种方法更可取:

据我了解,我可以:

  • 为客户提供一个完全兼容 Unicode(西里尔文、希伯来文、阿拉伯文、繁体中文、东亚文等)字体的列表以供选择。(我不知道从哪里得到这样的列表;我在网络上的搜索只得到了部分符合 unicode 的字体列表。试试http://look.fo/list-of-unicode-compliant-fonts起点看我看的地方)。
  • 根据客户的位置(我们已经拥有),为说英语的用户渲染 Lucida Handwriting,为国际用户渲染 Tahoma。这可能有点让人头疼。有没有人有过这种方法的经验?
  • 构建一个新字体(IE,AlexeyMK Bold),它使用 Lucida Handwriting 用于英语,Tahoma 用于其他所有内容。这个广告类似于 500k 到 Flash 文件的重量,但应该(如果我理解正确的话)只在第一次加载。

你有什么建议?其中哪些是合理的解决方案,哪些是完全可行的?有没有我没有想到的方法?

非常感谢!阿列克谢

编辑:关于这个主题的一篇好文章:http ://www.itworld.com/print/58558

4

1 回答 1

2

好吧,最终您只有两个真正的选择:要么在 SWF 中嵌入字体,保证字体的外观,要么不这样做,并使用设备字体。(或两者的混合,根据地区使用嵌入式或设备字体。)

如果您不嵌入任何字体,那么您为文本定义的任何字体最终都只是一个建议 - 用户将看到的是设备字体,由他们自己的机器呈现(使用该机器上的字体)。因此,您可以“建议” Tahoma,但用户看到的内容将取决于他们是否拥有该字体(例如,Mac 版本的字体与 PC 版本的字体可能会有所不同)。当然,这也取决于支持;例如,如果他们没有亚洲字体,那么他们将看不到任何中文。(注意:您也可以选择像“_sans”这样的字体,它只是告诉客户端使用其标准的无衬线字体。我的猜测是,在实践中,这将与您选择的字体相同d 定义了“Tahoma”,但是 YMMV。)

如果您嵌入了字体,那么用户将看到您所期望的,因为字体是由 Flash 而不是操作系统呈现的。但是,如果您完全嵌入所有区域,包括中文所需的字形,那么我想您会发现它增加了超过 500K.. 以我的经验更像是 2-5MB。但也许我遗漏了一些细节。无论如何,对于通过网络传递的内容,我通常会假设,亚洲字体至少应该是设备字体。

要添加有关混合解决方案的内容,我已经完成了此操作,并且可行。也就是说,假设您可以将逻辑添加到 SWF,您可以(例如)为每个文本字段制作两个,一个使用嵌入的“Lucida 不管”,另一个使用非嵌入的“_sans”,然后在运行时制作一个其中不可见并将文本放在另一个中,具体取决于您显示的区域。(我通过制作一个 LocalizedTextfield 组件来做到这一点,并在初始化时让它从静态属性中读取语言环境。)然后,您只需决定,对于每个语言环境,文件大小是否值得显示该特定集合的字形。

最后一句话是,你不能假设你的字体所产生的文件大小只会被加载一次。如果您以简单的方式制作内容并在文本字段中嵌入字体,那么字体信息将成为您的 SWF 的一部分,因此无论何时都会加载。要将其外部化,您可以将 Label 组件设为一个单独的文件,然后决定是否加载它取决于浏览器的缓存设置。您还可以将字体资源本身外部化并将其用作共享资源,但在 AS2 中,这有点麻烦。我听说它在 AS3 中更容易,但我自己没有这样做。

于 2008-12-09T01:59:40.167 回答