2010-11-09 43 views
0

我已经完成了很多关于此的搜索,但还没有找到解决方案,我希望这里的董事会可以帮助我。从资源文件中嵌入的AS3字体不能正常工作

我已经建立了一个项目(使用单独的字体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] 
} 

,我知道我的样式表被加载并正在正确地解析动作,当我运行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 
} 

任何意见非常感谢!谢谢!

+0

我在这方面做了更多的工作......并遇到了一个非常普通的问题/解决方案......我在MAC CS5上工作,发布我的fonts.swf文件时我注意到了如果字体名称(不是链接或类名称,但是字体名称)在其标题中包含多个单词或标点符号,那么它在我的项目中不起作用。例如“Arial”或“Century”或“Hurculanum”的所有作品,其中“MarkerFeltThin-Plain”或“Stencil Std”或“Co Headline Bd”都没有。这两个列表中都有TrueType和OpenTypes的混合。这里是踢球者,我在PC CS3上创建相同的文件,一切正常。 – Tomtids 2010-11-09 11:52:59

回答

1

尝试检查您的字体fontType属性,如果fontType属性为“embeddedCFF”,则它们将不会显示TextField,因为您需要Flash文本引擎进行呈现。

+0

谢谢帕特里克,我该如何访问?这是一个动作吗?我有办法调整这个属性吗? – Tomtids 2010-11-09 12:19:38

+0

在嵌入式字体数组中,跟踪每个Font对象的fontType属性。 – PatrickS 2010-11-09 12:39:43

+0

有意思......我已经完成了这一切,我所有的字体(包括那些工作和那些不工作的)都显示为“嵌入”,而不是“embeddedCFF”...所以它似乎应该工作。再次感谢。 – Tomtids 2010-11-09 18:38:04

1

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