PDA

Просмотр полной версии : Подгрузка swf со шрифтами


Jitakuzu
08.08.2011, 13:43
Доброго времени суток

Подгружаю в AS3 проекте swf файл, который содержит EMBED шрифты:

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, fontLoaded);
loader.load(new URLRequest("MyTFT.swf"));

function fontLoaded(e:Event):void
{
textField.embedFonts = true;
textField.defaultTextFormat = new TextFormat("CloisterBlack", 60, 0x000000);
textField.text = "Hello World";
}


MyTFT.swf содержит следующий код:

[Embed(source='assets/CloisterBlack.ttf', fontName="CloisterBlack",
mimeType="application/x-font", unicodeRange="U+0041-U+005A")]
var myFont:Class;

Font.registerFont(myFont);


В общем, все работает. Совершаю идентичные действия во Flex проекте - ничего не получается. Ошибок нет, просто текст не появляется. В чем может быть проблема?

ShockWave512
09.08.2011, 01:57
- а шрифт вообще становится виден в проекте ? (Font.enumerateFonts(false))

- может не флекс не выполняет Font.registerFont(myFont);, кто его запускает?

- может имя "CloisterBlack" перестает видеть внутри флекс окружения?

Jitakuzu
09.08.2011, 11:44
По какой то причине текст вообще не отображается. Соответственно, шрифт подгружается, но текст не выводится по какой то причине. Текст вывожу на английском языке.

alatar
09.08.2011, 11:48
Jitakuzu, что вы пишете во флекс-проекте?

ShockWave512
09.08.2011, 11:48
то есть три вопроса в игнор? удобно :)

Jitakuzu
09.08.2011, 11:51
Да, после некоторых манипуляция начало появляться предупреждение в окне вывода:
Предупреждение: несовместимый встроенный шрифт "CloisterBlack" указан для mx.controls::Text (Text7) . Для этого компонента требуется объявление встроенного шрифта посредством embedAsCff=false.
Как использовать embedAsCff?

alatar
09.08.2011, 11:56
TextField не может работать с cff, этот параметр предназначен для встраивания шрифтов используемых в новом текстовом FTE. Для шрифтов используемых в TextField он всегда должен быть false.

Jitakuzu
09.08.2011, 12:01
ShockWave512, извиняюсь, сейчас попробую ответить:
1. Все что могу получить при выводе, это единственный шрифт [object MainTimeline_myFont], скорее всего это он, так как других не подгружаю. Как получить его имя из объекта я не знаю
2. Шрифт регистрируется в MyTFT.swf
3. Если объявить TextFormat со шрифтом CloisterBlack, то текст не выводится вовсе. Если указать несуществующий шрифт (например, CloisterBla123ck), то текст выводится в стандартном шрифте. Мне этого подсказывает о том, что шрифт все таки виден

Добавлено через 1 минуту
alatar, так что мне написать то? и где? Подскажи.
P.S. ShockWave512 мне это писал =)

alatar
09.08.2011, 12:03
[Embed(source='assets/CloisterBlack.ttf', fontName="CloisterBlack",
mimeType="application/x-font", unicodeRange="U+0041-U+005A", embedAsCff="false")]

Jitakuzu
09.08.2011, 12:10
Все сделал, trace(Font.enumerateFonts(false)) выводит [object CloisterBlack].
То есть, шрифт подгружается, но

sometext.text = "new text";
sometext.setStyle("fontFamily", "CloisterBlack");


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

alatar
09.08.2011, 12:13
Там "false" в кавычках должен быть.

Добавлено через 33 секунды
Вы какой версией SDK пользуетесь?

Добавлено через 4 минуты
Или флешка со шрифтом в FlashIDE компилируется?

Jitakuzu
09.08.2011, 13:25
Проект использует SDK 4.5
MyTFT.swf скомпилирована во Flash'е. Шрифт добавлен в библиотеку и экспортирован под именем CloisterBlack. Формат контура выбран TLF(DF4)
trace(Font.enumerateFonts(false)) выводит [object CloisterBlack]. По идеи, шрифт подгружается, но текст все равно выводится в стандартном шрифте

Добавлено через 1 минуту
просто если в MyTFT.swf написать
[Embed(source='assets/CloisterBlack.ttf', fontName="CloisterBlack",
mimeType="application/x-font", unicodeRange="U+0041-U+005A", embedAsCff="false")]
var myFont:Class;

Font.registerFont(myFont);
То компилятор начинает ругаться:
Параметр транскодинга "embedAsCff" не поддерживается "flex2.compiler.media.FontTranscoder"
Транскодинг assets/CloisterBlack.ttf невозможен.

alatar
09.08.2011, 13:38
Компилятор во FlashIDE не поддерживает параметр embedAsCff.
Формат контура выбран TLF(DF4)
TextField не поддерживает этот "формат контура". Это аналог embedAsCff.
Шрифт добавлен в библиотеку и экспортирован под именем CloisterBlack.
Какой смысл добавлять шрифт в библиотеку, если используется Embed?

Jitakuzu
09.08.2011, 13:41
нет, Embed я не использую, swf не компилится тогда.
Я просто добавил шрифт в библиотеку и экспортирую его. Основное приложение его видит, но не применяет его к тексту.
Как сделать так, чтобы подгруженные шрифты применялись к тесту? Какой тип текстового поля использовать?

Добавлено через 10 минут
Если можно, то мне бы пример какой нибудь, 100% рабочий, какая структура должна быть у swf со шрифтами, какое текстовое поле использовать во Flex'е и как применить к нему подгруженный шрифт