【问题标题】:AS3 font embed from resource file not working从资源文件嵌入的 AS3 字体不起作用
【发布时间】:2011-05-07 04:28:29
【问题描述】:

我在这方面做了很多搜索,但还没有找到解决方案,我希望这里的董事会可以帮助我。

我已经建立了一个项目(就像我之前有很多项目一样),它使用单独的字体 SWF 为我的项目提供字体。加载后,我使用 Font.registerFont() 将这些字体注册到全局字体目录。我的文本样式来自外部加载的样式表。

由于某种我无法弄清楚的原因,当我尝试创建一个 textField 并使用我的嵌入字体时,文本会从屏幕上消失。如果在创建 textField 时我将 embedFonts 设置为 false,那么文本确实会以正确的大小和颜色出现(取自样式表),但显然我的自定义字体应该是默认系统字体。

我使用的代码如下:

TTWTextHelper.traceAvailableFonts();
TTWTextHelper.traceStyleSheet(myStyleSheet);

var myText = new TextField;
with (myText)
{
     width = 250;

     autoSize = TextFieldAutoSize.LEFT;

     selectable = false;

     antiAliasType = AntiAliasType.ADVANCED;
     styleSheet = myStyleSheet;
     embedFonts = true;
     border = true;

     multiline = true;
     wordWrap = true;

     htmlText = "<span class='body'>Test</body>";
}
myText.x = 300;
myText.y = 300;
addChild(myText);

我知道(显然)我的字体是嵌入的,因为当我运行 TTWTextHelper.traceAvailableFonts() 时,我列出了两种字体。

public static function traceAvailableFonts():void
{
   /*
    * See what fonts we have to play with
    */

   var embeddedFonts:Array = Font.enumerateFonts(false);
   embeddedFonts.sortOn("fontName", Array.CASEINSENSITIVE);

   trace("how many fonts? " + embeddedFonts.length);
   Tools.pr(embeddedFonts); 
}

结果:

how many fonts? 2
(array) {
 [0] => (object) [object MarkerFeltThinPlain]
 [1] => (object) [object MarkerFeltWidePlain]
}

并且我知道我的 styleSheet 已加载并且正在被 actionscript 正确解析,就像我运行 TTWTextHelper.traceStyleSheet(myStyleSheet);我得到了正确列出的样式:

public static function traceStyleSheet(_styleSheet:StyleSheet):void
{
   trace("Tracing StyleSheet: " + _styleSheet);

   var styles:Array = _styleSheet.styleNames;

   for each(var style : * in styles)
   {
     trace("Style Name: " + style);
     var thisStyle:Object = _styleSheet.getStyle(style);
     Tools.pr(thisStyle); 
   }
}

结果:

Tracing StyleSheet: [object StyleSheet]
Style Name: a
(object) {
    [color] => (string) #ff0000
    [leading] => (string) 2
    [fontFamily] => (string) "MarkerFeltThin-Plain"
    [fontSize] => (string) 15
    [textAlign] => (string) left
}

Style Name: .title
(object) {
    [color] => (string) #ff0000
    [leading] => (string) 2
    [fontFamily] => (string) "MarkerFeltWide-Plain"
    [fontSize] => (string) 20
    [textAlign] => (string) left
}

Style Name: .body
(object) {
    [color] => (string) #4b4b4b
    [leading] => (string) 2
    [fontFamily] => (string) "MarkerFeltThin-Plain"
    [fontSize] => (string) 15
    [textAlign] => (string) left
}

非常感谢任何建议!谢谢!

【问题讨论】:

  • 我在这方面做了更多的尝试......并且遇到了一个特殊的问题/解决方案......我在发布我的 fonts.swf 文件时使用 MAC CS5我注意到如果字体名称(不是链接或类名称,而是字体名称)的标题中有多个单词或任何标点符号,那么它在我的项目中将不起作用。例如,“Arial”或“Century”或“Hurculanum”都有效,而“MarkerFeltThin-Plain”或“Stencil Std”或“Co Headline Bd”则无效。在这两个列表中混合了 TrueType 和 OpenType。这是踢球者,我在 PC CS3 上创建了相同的文件,一切正常。

标签: actionscript-3 actionscript fonts embed


【解决方案1】:

尝试检查您的字体 fontType 属性,如果 fontType 属性为 "embeddedCFF" ,它们将不会与 TextField 一起显示,因为您需要 Flash 文本引擎来呈现。

【讨论】:

  • 谢谢帕特里克,我如何访问它?这是一个动作脚本吗?有没有办法调整该属性?
  • 在您的 embeddedFonts 数组中,跟踪每个 Font 对象的 fontType 属性。
  • 有趣...我已经完成了这个并且我所有的字体(包括那些有效的和那些不有效的)都显示为“嵌入”,而不是“嵌入CFF”......所以它会似乎它应该工作。再次感谢。
【解决方案2】:

有时使用 [Embed] 而不是 swf 嵌入字体文件会有所帮助(最近遇到了这种情况)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2013-07-17
    相关资源
    最近更新 更多