2012-02-21 63 views
0

今天早上我花了很多时间尝试在整个网站中找到的多种解决方案,但不幸的是,他们中没有一个真正起作用。这是问题。我相信我的字体嵌入过程是有效的,因为我故意从我的机器中删除了字体,并且我看到它们出现在flash播放器中。但是,它们不会显示在我们的Windows测试机器上(无论是IE还是FF),我似乎无法弄清楚为什么。正如我所提到的,我尝试了整个网站中找到的几个解决方案,但它似乎没有什么区别。这里是类和构造的节选,我已经建立:AS3和IE中的嵌入字体:语法是否正确?

public class MyClass { 
    [Embed(source = "../../fonts/DroidSans.ttf", 
     fontName = "DroidSans", 
     mimeType = "application/x-font-truetype", 
     fontWeight = "normal", 
     fontStyle = "normal", 
     unicodeRange = "U+0041-U+005A, U+0061-U+007A, U+0030-U+0039, U+002E-U+002E", 
     embedAsCFF = "false")] 
    private var droidSansFont:Class; 

    [Embed(source = "../../fonts/DroidSans-Bold.ttf", 
     fontName = "DroidSansBold", 
     mimeType = "application/x-font-truetype", 
     fontWeight = "normal", 
     fontStyle = "normal", 
     unicodeRange = "U+0041-U+005A, U+0061-U+007A, U+0030-U+0039, U+002E-U+002E", 
     embedAsCFF = "false")] 
    private var droidSansBoldFont:Class; 
    . 
    . 
    . 
    public function MyClass() { 
     _flVersion = String(flash.system.Capabilities.version); 
     _baseFont = (_flVersion.indexOf("10,") != -1) ? "Arial" : "DroidSans"; 
     _boldFont = (_flVersion.indexOf("10,") != -1) ? "Arial" : "DroidSansBold"; 

     buttonFormat = new TextFormat(); 
     buttonFormat.font = _baseFont; 
     buttonFormat.size = 10; 
     buttonFormat.color = 0x000000; 
     buttonFormat.bold = false; 
     buttonFormat.align = "center"; 
     . 
     . 
     . 
    } 
} 

如果任何人都可以提供一个解决方案或点我在正确的方向,这将是最有帮助的。

+0

所以只是一个快速更新;似乎字体嵌入在我测试的任何浏览器中都不起作用(即代码完全失败)。 – 2012-02-21 16:16:00

+0

你在TextField上设置embedFonts = true吗?版本10测试有什么?你只使用Flash Player 10的嵌入式字体? (但要小心这个测试 - 它可以匹配版本12,10,115) – 2012-02-21 17:05:53

+0

该死,我没有设置embedFont = true。我错误地认为这不是必需的。让我尝试一下。 – 2012-02-22 13:47:44

回答

0

您是否在TextField上设置了embedFonts = true?

而且要小心版本测试:

_flVersion.indexOf("10,")!=-1 

这可能会在版本字符串之间是否匹配。你忽略逻辑让我有点困惑,但仔细想想,你会在Flash Player版本中检查DISABLE嵌入字体,例如:10,1,100和12,10,115

假设你打算在FP10中禁用嵌入字体,可能可能改变你的条件如下(这不会匹配12,10,115):

_flVersion.indexOf("10,")==0 

我那么把它放进一个注释吸气功能,使你的代码更易读:

// No embedded fonts for flash player 10 
private static var _flVersion:String = String(flash.system.Capabilities.version); 
private function get use_embedded_fonts():Boolean { 
    return _flVersion.indexOf("10,")!=0; 
} 

另外,您只需要在u时设置嵌入标志唱嵌入的Droid字体,而不是Arial:

_baseFont = (!use_embedded_fonts) ? "Arial" : "DroidSans"; 
_boldFont = (!use_embedded_fonts) ? "Arial" : "DroidSansBold"; 
_embed_flag = use_embedded_fonts; 

textfield.embedFonts = _embed_flag; 
... 
+0

谢谢你的所有建议。 @Jeff - 我进行了您所建议的更改,并添加了embedFonts = true。一旦我补充说,文本消失根据api文档意味着我认为我嵌入的字体要么不实际嵌入(当我编译的SWF我看到大小差异),或者我没有指定正确的名称。那也是你的评估吗?此外,上面的类正在创建所有的TextFormat对象,通过其他类的方法将其拖出。为了以防万一,我在一个班级中尝试了这一切,但是这产生了相同的结果。 – 2012-02-24 20:25:16

+0

更新:所以我注意到,如果我替换buttonFormat.font = _baseFont;与buttonFormat.font =“DroidSans”它的作品。我想知道如果问题是初始化。现在测试... – 2012-02-24 20:38:43

+0

有趣 - 让我们更新为现在我很好奇。 =) – 2012-02-27 18:51:17