PDA

Просмотр полной версии : Инклуд нескольких шрифтов в одном текстовом поле


Stary
04.02.2003, 00:29
Flash MX Есть динамическое текстовое поле. Есть ряд шрифтов, которые надо в нем использовать. Шрифты несистемные, поэтому нужно инклудить очертания букв. Включаю поддержку html (чтобы можно было задавать разные шрифты тегами <font face='myfont'>blablabla</font>). Ну так вот - использовать несколько шрифтов в одном поле не удается. Более того, использовать шрифтовые символы в библиотеке мне тоже не удалось. Вообще не понял, как их использовать. Вроде если создаю символ (new font), задаю ему linkage - export for ActionScript, то шрифт инклудится (размер файла увеличивается), но использовать его - не удается. То есть, если я отключаю этот шрифт из ATM, то и в текстовом поле этот шрифт не отображается (а значит - не будет его и у клиента). Кто нибудь сталкивался?

leadaxe
05.02.2003, 00:21
Включи HTML и юзай <font...>, но я еще в 5-ке работаю :p может в MX че-то новое есть, но это точно работает!

Stary
05.02.2003, 17:24
Мда... кажется, придется провести кое-какой ликбез. Повторюсь: Шрифты несистемные, поэтому нужно инклудить очертания букв. Включаю поддержку html... Это значит, что мне необходимо, чтобы в этом текстовом поле были видны буквы из нескольких, совершенно разных шрифтов. Если ты думаешь, что это просто, то после того, как через html задашь несколько шрифтов, откомпилируй swf, потом отключи эти шрифты (если непонятно, как это сделать, попробуй воспользоваться Adobe Type Manager-ом, а если будешь просто удалять файлы из папки Windows\Fonts, то убедись, что это несистемные шрифты или что ты можешь потом восстановить все, как было). Ну и посмотри, что получится. Напомню, что у конечного пользователя может не оказаться шрифтов, которые ты используешь, поэтому в этом случае НЕОБХОДИМО включать изображения букв твоего шрифта в окончательный файл. Это делается в свойствах текстового поля, но (и тут проблема) - можно включить инклуд только одного шрифта для одного текстового поля. А нужно использовать несколько шрифтов...

Alex_Lom
05.02.2003, 18:52
Раз уж Flash MX, то способ с включением шрифтов через пропертисы текстового поля - считать устаревшими... AS на что? :)
В одном текстовом поле не удается (по крайней мере я не знаю как) использовать одновременно системные и встроеные(embed) шрифты, а чтобы разные встроеные- без проблем:
1.Устанавливаем себе необходимые шрифты(и убеждаемся что их видит и понимает флеш)
2.Встраиваем их в библиотеку (Library->New Font) и устанавливаем linkage Export for Action Script. Причем нужно учитывать, что то имя которое мы задаем в Identefier, и будет использоватся как имя шрифта(в <font face='имя'...)
3.Указываем использовать встроеные шрифты данным текстовым полем:
myText_txt.embedFonts = true;
далее любым способом записываем туда текст... все

Stary
05.02.2003, 18:58
Кажется, это то, что нужно (все остальное я уже перепробовал):

myText_txt.embedFonts = true;

Щас проверим, работает ли это. Спасибо.

Stary
05.02.2003, 20:04
Ура!!!! Работает! Еще раз - спасибо.

Stary
08.02.2003, 17:26
2Alex_Lom

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

Ситуация такая: нужно подгружать в фильм много разных шаблонов, причем в каждом из них нужно использовать одни и те же шрифты. Очевидное решение - использовать один файл с разделяемой библиотекой для всех этих шаблонов, чтобы загружать этот шрифт только один раз, а потом брать из кеша (или даже вложить этот символ в библиотеку специального мувика, подгрузить этот мувик, а потом доставать у него из библиотеки столько раз, сколько нужно). Для статических текстовых полей это легко прокатывает, но вся фишка в том, что поля динамические, а тут - ничего не получается с первым вариантом, а со вторым (если подгружать мувик с библиотекой) получается, но не совсем - с глюками. Простой пример - у меня задается в фоновом мувике Семейство шрифтов OfficinaSans (ну, регуляр, болд, италик и т.д.). Я задаю этим шрифтовым символам (а для каждого шрифта гарнитуры приходится создавать отдельный символ) linkage - export for AS и export for runtime sharing, а из в библиотеке другого вложенного мувика создаю линки на импортируемые символы из фонового мувика (import for runtime sharing). Ну так вот - нормально удается отображать текст всеми шрифтами кроме регулярного (то есть - могу писать болдом, италиком или болд-италиком, но не могу - обычным). Перепроверял уже миллион раз - вроде не ошибся нигде...

Alex_Lom
09.02.2003, 16:26
странный глюк... у меня все работает...
тут другая проблема, не удается использовать эти самые imported for runtime sharing шрифты в текстовых полях созданых динамически :confused:

Stary
09.02.2003, 16:39
Действительно удивительно, что у тебя все работает, особенно учитывая, что вот тут

http://www.macromedia.com/support/flash/ts/documents/dynamic_text.htm

написано, что работать не должно. Я думаю, дело в том, что в библиотеке подгруженного мувика теоретически возможно разыскать нужный символ. Только это срабатывает по какой-то, не совсем понятной для меня системе. Я пробовал линковать шрифтовые символы подргужаемого мува с библиотекой такого же подгружаемого мува (но в другой контейнер, лежащий в руте), а потом попробовал использовать из подгружаемого мува символы exported for Action Script, содержащиеся в руте. В последнем случае мне поначалу казалось, что получилось, я даже успокоился, но потом перепроверил - и нифига не работает... Ерунда какая-то.

Alex_Lom
09.02.2003, 17:01
дык это-ж написано для 5-той версии... :rolleyes:
Сейчас все без проблем работает.
в одном мувике-библиотеке куча расшареных шрифтов и начертаний,
в мувике которые их используют - текстовые поля ввода, все зашибись.
Вот только когда создаешь программно текстовое поле, то таким макаром задать шрифт - не выходит... может есть какоето принципиальное ограничение?
да и и еше:
символ в библиотеку специального мувика, подгрузить этот мувик,
а потом доставать у него из библиотеки столько раз, сколько нужно
что имеется в виду "подгрузить"?

Alex_Lom
09.02.2003, 17:10
заработало!
почему не работало первых 2 раза не знаю :D

Stary
09.02.2003, 18:24
Подгрузить, значит сделать LoadMovie

Не могу понять, почему у меня ничего не выходит. Может, ты найдешь время и заглянешь в мой исходник. В чем ошибка? Я там и шрифт приложил. Или пришлешь свой работающий. Буду очень тебе обязан.

Alex_Lom
11.02.2003, 22:32
в общем runtime sharing fonts вещь исключительно глючная. В этом я уже убедился, да и во flashcoders на него неоднократно матерились... Суть в том что в одних случаях они работают, в других нет... зависит это от типа текстового поля, наличие других текстовых полей и других шрифтов, от фазы луны, и еще может от самого шрифта.... в общем вот мой исходник который работает. А вот если убрать некотрые текстовые поля - то остальные работать перестают :D )

Alex_Lom
11.02.2003, 22:36
вот твой исходник, работает, но проблема решена исключительно кривым путем... :(

Stary
11.02.2003, 23:05
Мда. Прикольно. Но ты крут, что сказать. Догадаться до такого - это надо каким то другим органом чувствовать. Короче, ты добавил еще одно невидимое текстовое поле, в котором используется наш шрифт. И тогда все начинает работать.

А в твоем исходнике еще круче. Все работает в созданном программно поле. Наконец-то начинаю понимать, как использовать программное форматирование текста. Но вот этот прикол, что некоторые (СОВСЕМ НИКАК К ДЕЛУ НЕ ОТНОСЯЩИЕСЯ) поля убираешь, и все перестает работать... эх, Макромедия... Майкрософт бы ее купил, что ли.

Но выручил, тем не менее. Я конечно, не успел это использовать в проекте (просто проинклудил шрифты в каждый шаблон - раздул их на 30 кб. каждый - а шо робыты).
Спасибо. Надеюсь как нибудь тебе тоже помочь чем-нибудь.

Dendroid
12.02.2003, 22:07
А более прямой путь нам указал наш мудрый учитель Branden Hall: http://www.waxpraxis.org/archives/000062.html#000062
Более толкового решения для shared fonts мне не попадалось....

Alex_Lom
14.02.2003, 16:13
жаль только что Macromedia допускает такие ляпы, что и спецы вроде Hall-а вынуждены искать пути их преодоления методом 'научного тыка' :(
способ с пустым клипом из той-же библиотеки что и шрифты работает во всех видах текстовых полей и способах форматирования(по крайней мере в IE).
Кроме того есть еще одна интерестная фича: в качестве имени шрифта, можно использовать не только то что в linkage ID но и его родное имя. Это дает возможность использовать форматирование с помощью тегов <b> <i> и соответсвующими стилями TextFormat.

Stary
14.02.2003, 18:03
Последнее было как нельзя кстати. Потому что последний раз я вынуждем был написать специальный парсер, который заменял <b> на <font face='imported_bold'>. Геморройная вещь.

А что там с методом пустого клипа? Грешен и ленив - в английском слишком слаб, и времени не нахожу, чтобы перевести.

Alex_Lom
17.02.2003, 18:16
с пустым клипом:
в библиотеке создается пустой мувик, расшаривается, и помещается где-то за пределами видимой области...
вот исходничек:

Stary
17.02.2003, 18:50
Круто. Я бы всем рекомендовал тщательно изучить этот исходник. Вот только то, что способ Холла срабатывает везде и легко, я бы не сказал. Слишком много нюансов. Стоило мне изменить исходник хоть на немножко, как все переставало работать (я о предыдущих исходниках). С пустым клипом я тоже пробовал работать, но не создавая полей программно. Так ничего и не вышло.

Между прочим, пытался воспроизвести по памяти твой предыдущий исходник, и ничего не получилось. Стал разбираться - оказалось, что кроме добавления лишнего поля, ты изменил идентификатор импортированного символа ("Aero_" вместо "Aero") !!!! Но в АС-коде-то используется именно "Aero"! Как же так! Как это понять, и главное - как ты догадался до такого?

Alex_Lom
17.02.2003, 20:10
С пустым клипом я тоже пробовал работать, но не создавая полей программно. Так ничего и не вышло.
разве если в моем исходнике убрать createTextField не работает?
по поводу имени я уже говорил, что можно использовать родное(и даже очень удобно), а в линкедже их использовать не рекомендуется. В source Aero осталось случайно, я просто забыл поменять... но как ни странно оно работало ;) таким образом флеш на линкедж, как я понимаю, особо не смотрит.
А если присутсвует пустой клип, то он на экземпляры шрифтов в библиотеке юзера вообще ложит (попробуй убрать в исходнике все кроме пустышки - ничего не изменится :cool: )

Alex_Lom
17.02.2003, 20:17
насчет догадался : есть такой орган (интуиция называется :D )
- логика отдыхает :)
есть еще проблемы в разных броузерах. Это вроде связано с разной процедурой кэширования... нужно бы найти время и сделать универсальный способ(надеюсь он существует)

Stary
17.02.2003, 20:19
Да, действительно. Кое-что проясняется. Значит, если флеш получает хоть что-нибудь из расшаренной библиотеки, то он теперь может обращаться к этой библиотеке за чем угодно, что в ней есть. Но в том то и дело, что линкедж импортированных из этой библиотеки символов может этому только помешать. Вот в том исходнике - с Аэро - если дать этому символу правильное имя, то работать перестает вообще, а если испортить, то работает...

Stary
17.02.2003, 20:23
Насчет кеширования. Я сталкнулся с ситуацией, что подгружаемые с помощью LoadMovie мувики в Опере не кешируются вообще. Она их каждый раз тянет заново. А в остальных браузерах вроде нормально. Холл, как я понял, рекомендует сначала подгрузить тот файл, библиотеку которого ты собираешься использовать, чтобы избавиться от латентности. Будут ли при этом проблемы в Опере, я еще не проверял.

Alex_Lom
17.02.2003, 20:27
...нужно проверить...

Stary
17.02.2003, 20:35
если проблемы будут, то единственный выход, который я вижу, это создать в html еще один объект (точнее - эмбед) на той же странице или в другом фрейме, или в поп-апе - все равно, куда и загрузить этот файл. Такие swf-ки она кеширует исправно.