не встроенные шрифты Flash CS4 AS3 - PullRequest
3 голосов
/ 17 января 2010

Может быть, вы можете помочь мне с моей проблемой. URL проекта: http://www.mauriciogiraldo.com/vgline/beta/

Это веб-приложение AS3, работающее на Drupal и AMFPHP. Данные без проблем проходят во Flash, я проверил, что с UTF-8 все в порядке. Проблему лучше увидеть по следующим ссылкам:

http://www.mauriciogiraldo.com/vgline/beta/#/146

текстовая ссылка по этой ссылке:

http://www.mauriciogiraldo.com/vgline/node/146

(обратите внимание на имя парня)

Шрифт Inconsolata, хотя я мог бы использовать любой моноширинный шрифт с открытым исходным кодом при необходимости. Вы можете видеть, что я встроил шрифт (я даже выбрал динамические текстовые поля для встраивания всего этого, полную кодировку), а также меню «Новый шрифт» в библиотеке. Inconsolata отображается со звездочкой в ​​инструменте разработки CS4 (который в соответствии с документацией Adobe означает, что объект встроен).

Я пробовал другие варианты встраивания шрифтов, но безрезультатно. Inconsolata, кажется, имеет этот символ «ō» при использовании в авторских разработках, но он не отображается в динамических текстах.

Другая проблема, с которой я сталкиваюсь: если я использую статические текстовые поля, шрифт не внедряется (WTF). Я должен преобразовать поле в динамическое, и тогда оно работает («Временная шкала истории видеоигр» вверху слева - это динамическое текстовое поле, хотя я бы предпочел, чтобы оно не было ... этим и другими). Если я использую статическое текстовое поле, шрифт преобразуется в какой-то шрифт Times New Roman.

Текст создается AS3 (а также результаты поиска).

Я встраиваю текст с помощью HTML (.htmlText) и стилизую с помощью CSS.

Весь код с открытым исходным кодом и можно найти здесь:

http://code.google.com/p/vgline/

Пример того, как я заполняю текстовое поле, можно найти здесь:

http://code.google.com/p/vgline/source/browse/trunk/src/TLDetail.as

Фрагмент такого кода:

 var ss:StyleSheet = new StyleSheet();
 var css:String = ".title { color:#333333; font-family:Inconsolata; font-size:16; leading:2; } ";
 css += ".date { color:" + StringUtils.rgb2web(data.color.r, data.color.g, data.color.b) + "; font-family:Inconsolata; font-size:14; leading:4; } ";
 css += ".text { color:#333333; font-family:Inconsolata; font-size:11; leading:4; } ";
 css += ".link { color:#000000; font-family:Inconsolata; font-size:11; leading:4; text-decoration:underline; } ";
 css += "a:hover { text-decoration:none; } ";
 ss.parseCSS(css);
 var fechahtml:String = "<span class='date'>";
 if (data.mes != null && data.dia != null) {
         fechahtml += data.dia + " " + StringUtils.month2name(data.mes) + " " + data.anotext;
 } else if (data.mes != null) {
         fechahtml += StringUtils.month2name(data.mes) + " " + data.anotext;
 } else {
         fechahtml += data.anotext;
 }
 fechahtml += "</span>";
 date_txt = new TextField();
 date_txt.width = 275;
 date_txt.embedFonts = true;
 date_txt.antiAliasType = "advanced";
 date_txt.styleSheet = ss;
 date_txt.htmlText = fechahtml;
 date_txt.x = 8;
 date_txt.y = 3;

 addChild(date_txt);

Любая помощь будет принята с благодарностью. Я действительно не знаю, что делать.

Спасибо

Ответы [ 3 ]

3 голосов
/ 15 апреля 2010

Внедрение шрифтов является одним из моих любимых врагов всех времен при создании flash. Но я нашел способ уменьшить количество дырок в моих стенах (и удары по голове).

  1. Вставить шрифт в библиотеку
  2. Свяжите символ шрифта (в библиотеке) с пользовательским классом, расширяющим класс Font (давайте назовем его MyFont пока)
  3. Создание TextFormat объекта (назовем его frmt)
  4. Набор frmt.font = new MyFont().fontName
  5. Создать TextField (назовем это tf)
  6. Назначить tf.embedFonts = true и tf.defaultTextFormat = frmt

Надеюсь, это поможет.

1 голос
/ 15 апреля 2010

У меня была похожая проблема с Arial Regular (в динамическом текстовом поле с включенным HTML), не отображающим жирный текст, продиктованный тегами html в AS.

Сменив шрифт на Lucida Sans, все заработало нормально.

0 голосов
/ 17 января 2010

Я посмотрю позже.

Звучит несколько знакомо. У меня была та же проблема с символами, которые не отображались в swf в статическом текстовом поле, хотя отображались в IDE (flash cs3), когда я работал на многоязычном веб-сайте. Проблема того времени была с греческими символами в Arial. Мне пришлось скачать отдельную версию Arial с соответствующими греческими символами, и это исправило ее.

Возможно, это та же проблема, и вам нужна другая версия того же шрифта.

Вы пробовали то же самое с Courier New или Lucida Console ? Я попробовал базовую настройку (имя Tōru Iwatani, написанное двумя текстовыми полями, одним Courier New, одной консолью Lucida, встроенным шрифтом, динамическим текстом, повернутым текстовым полем, просто для проверки встраивания и корректного отображения.


EDIT:

Привет,

Я провел несколько тестов с использованием моноширинных шрифтов из dafont.com

Это фрагмент, который я использовал, чтобы найти шрифты, которые должны работать:

var fonts:Array = Font.enumerateFonts();
for(var i:int = 0 ; i < fonts.length; i++){
    if(fonts[i].hasGlyphs('ō')) trace(fonts[i].fontName);
}

Вот список, который я получил:

Monaco
Lucida Grande
Bitstream Vera Sans Mono
saxMono
JackInput
Liberation Mono Regular
F25 Bank Printer

Я пробовал несколько с двумя разными подходами.

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

library embed

Встраивание шрифта с использованием экземпляра в рабочей области работает для некоторых шрифтов:

stage embed

Вот код, который я использовал для теста, довольно грязный, но это тест:)

l.text = j.text = f.text = li.text = s.text = b.text = 'Hello Tōru Iwatani...Hello Tōru Iwatani...Hello Tōru Iwatani...';

var lucida:TextField = getStyledTextField("Lucida Grande");
var liberation:TextField = getStyledTextField("Liberation Mono Regular");
var sax:TextField = getStyledTextField("saxMono");
addChild(lucida);
addChild(liberation);
addChild(sax);
liberation.y = 30;
sax.y = 60; 
lucida.htmlText= liberation.htmlText = sax.htmlText = "<body><span class='text'>Hello Tōru Iwatani...</span></body>";

function getTextField(font:String):TextField{
    var label:TextField = new TextField();
    label.defaultTextFormat = new TextFormat(font,11,0x33333);
    label.autoSize = TextFieldAutoSize.LEFT;
    label.border = true;
    label.embedFonts = true;
    return label;
}

function getStyledTextField(font:String):TextField{
    var style:StyleSheet = new StyleSheet();
    style.parseCSS(".text { color:#333333; font-family:"+font+";  }");
    var label:TextField = new TextField();
    label.styleSheet = style;
    label.autoSize = TextFieldAutoSize.LEFT;
    label.border = true;
    label.embedFonts = true;
    return label;
}

l, li, b, j и т. Д. - это имена экземпляров динамических текстовых полей на сцене с использованием таких шрифтов, как lucida grande, освобождение, битовый поток vera sans mono, JackInput и т. д.

Я не уверен, в чем проблема, но встраивание символов на сцене мне помогло, Кроме того, я вставил все глифы, чтобы убедиться. Для компиляции требуются годы, вы можете выбрать понравившийся шрифт из тех, которые работают, и постепенно извлекать глифы, пока не найдете минимальное количество глифов, которое вам нужно использовать.

Гудлак, George

...