Встроенные шрифты в AS3 и IE: правильный ли синтаксис? - PullRequest
0 голосов
/ 21 февраля 2012

Этим утром я провел немало времени, пытаясь найти несколько решений, найденных на сайте, но, к сожалению, ни одно из них не сработало.Здесь проблема.Я считаю, что мой процесс встраивания шрифтов работает, потому что я нарочно удалил шрифты со своего компьютера и вижу, что они отображаются во флэш-плеере.Однако они не отображаются на нашей тестовой машине Windows (ни в IE, ни в FF), и я не могу понять, почему.Как я уже упоминал, я попробовал несколько решений, найденных по всему сайту, но, похоже, это ничего не изменило.Вот исключения из класса и конструктора, которые я построил:

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";
        .
        .
        .
    }
}

Если кто-то может предложить решение или указать мне правильное направление, это было бы очень полезно.

1 Ответ

0 голосов
/ 22 февраля 2012

Вы устанавливаете embedFonts = true в вашем TextField?

И будьте осторожны с тестом версии:

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

Это может соответствовать где угодно в версии String. Ваша негативная логика немного сбивает меня с толку, но, подумав внимательно, вы проверяете, ОТКЛЮЧИТЕ ли встроенные шрифты в версиях Flash Player, например: 10,1100 и 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;
}

Кроме того, вы можете установить флаг для встраивания только при использовании встроенного шрифта Droid, а не Arial:

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

textfield.embedFonts = _embed_flag;
...
...