从资源文件嵌入的AS3字体不起作用

时间:2010-11-09 11:11:08

标签: actionscript-3 actionscript fonts embed

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

我已经设置了一个项目(以前我有很多项目的方式),它使用单独的字体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
}

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

2 个答案:

答案 0 :(得分:1)

尝试检查字体fontType属性,如果字体Type属性为“embedded CFF”,则它们不会显示TextField,因为您需要Flash Text Engine进行渲染。

答案 1 :(得分:1)

有时使用[Embed]而不是swf帮助嵌入字体文件(最近遇到过)。