ru.etcs.utils.FontManager
Класс ru.etcs.utils.FontManager от 19.03.07 v1.0.1
Данный класс позволяет вам использовать внешние шрифты для загрузки их в клип и использования в текстовых полях.
(FontManаger написан на AS2. Для AS3 существует FontLoader)
Преимущества FontManager:
- Чистый инкапсулированный AS2-класс
- Минимальное вмешательство в жизнь проекта
- Не подключает дополнительных классов (кроме стандартного EventDispatcher)
- Не требует кода в shared-библиотеках
- Выполняет предзагрузку shared-библиотеки для отображения процесса загрузки шрифта
- Не имеет ошибок в FDT (при Strict-настройке отлова ошибок в FDT, т.е. все опции в позиции Error)
Создание swf-файла со шрифтом (на примере Arial) для FontManager:
ВНИМАНИЕ! Описание создания библиотек описано для восьмой версии Flash. Работа в версиях ниже и выше не гарантируется (в седьмой версии допускается, но не проверялось).
1) Создаем новый fla проект, называем arial_shared.fla.
2) Создаем новый клип, заполняем поля:

Name: ArialFont
Identifier: ArialFont
Export for runtime sharing
Export in first frame
В поле URL прописываем путь к swf-ке (о ней ниже), которая будет грузить данную шарную либу (arial.swf), но это необязательно, работать будет при любом заполненном URL (проверено).
3) В созданном клипе создаем динамическое текстовое поле с координатами 0,0. Указываем имя «field», шрифт и выключаем возможность выделения текста:

На этом шаге вы можете набросать ещё полей с различными начертаниями шрифта, не заполняя Instance Name. После загрузки этой библиотеки их тоже можно будет использовать.
4) Нажимаем кнопку Embed и выбираем необходимые диапазоны экспортируемых шрифтов:

5) Запускаем (компилируем), чтобы получить arial_shared.swf (обратите внимание на его размер, если все сделали правильно, он должен весить больше 1 КБ). На сцене ничего не должно быть, наш клип записан в первом кадре (export in first frame).
6) Сохраняемся. Шарная либа готова. Теперь нужно создать ролик, загружающий нашу шарную либу. Создаем новый fla проект, называем arial.fla, сохраняем. Создаем новый мувиклип SharedClip (задаем только имя, больше ничего):

7) Нажимаем ОК, далее открываем библиотеку и свойства нашего клипа:

Identifier пишем тот же, что и у ArialFont в arial_shared.
Ставим галочку import for runtime sharing и в поле URL вписываем путь к нашей шарной либе (arial_shared.swf).
Нажимаем ОК, кидаем наш SharedClip на сцену в 0,0, задаем ему имя «sharedClip»:

9) Сохраняем проект и запускаем. Мы должны увидеть наш шарный клип в arial.swf (текстовое поле) и такой листинг переменных:

Обратите внимание на путь sharedClip.field. Он должен быть именно таким, если вы правильно выполнили все шаги. В противном случае FontManager не сможет найти текстовое поле со шрифтом и выдаст ошибку.
10) Шрифт для FontManager готов! Ролики arial.swf и arial_shared.swf должны находится рядом друг с другом.
Пример работы FontManager. Исходники (не забудьте перед компилированием manager.fla скачать фреймворк с FontManager).
Документация в теле класса.
Класс доступен во фреймворке.
33 comments
33 Comments so far
Leave a reply
Магия древних становится все более доступной ))
Возможно кому то будет интересна еще одна реализация ))
Сделал пару месяцев назад )
http://bbexp.ru/tmp/SmartFont/support/index_ru.html
PS.
Да, что хотел спросить ))
В результате тестирования своего класса – обнаружил, что собственно качественный прелоадер сделать для шаровых библиотек мне так и не удалось – несмотря на то, что есть событие onLoadProgress.
В конечном итоге цепляются байты не самого файла библиотеки, а файла, в который грузится библиотека – а он весит не более килобайта ))
Как с этим вопросом обстоят дела у FоntManager ?
Никаких проблем
Кстати, ты просто мега-рискуешь, задав стандартную глубину для вручную отрисованных клипов у контейнера.
Плюс ко всему для FontManager не нужно ничего писать в кадрах либы (благодаря этому класс не будет зашит в либу).
Да, собственно свой класс я писал как исследование вопроса ).
А глубину там можно менять.
Он сырой, я это понимаю прекрасно. FоntManager, конечно, серьезная работа.
Я, увы, далек от отличного владения всеми тонкостями ООП, гуманитарий я ))
Да там пришлось поковыряться, чтобы не накосячить с областями видимости, но все работает, вроде…
Это что получаеться тебе запретили исходник выкладывать?
и почему в комерческих целях?
…непонятно, как то.
статью читал…
исходник подгружаемых шрифтов не качал ))
черт!
Я жду ответа от Adobe.
Мухахахаха
http://casaframework.org/docs/ -> FontManager
классы уже в фреймворки засовывают=)
Да я вижу. Только там криво все, мой лучше
[...] документацию к FontManager. Версия класса пока старая, в будущем будет апгрейд с [...]
Переходите на as3.0. Там можно без Shared библиотек. А прелоадер и не получится – флаш грузит Shared библиотеки до того, как скрипты начинают крутиться. В принципе ничего нового для себя не обнаружил, думал и впрямь кто-то нашел способ подгружать шрифты динамически… Пишите на as3.0
На AS3 уже давно пишем, FontManager создан для AS2-проектов, к тому же довольно давно, как можно было заметить.
Для AS3 есть FontLoader.
Спасибо, подгружать действительно можно, но не получается воссоздать свойство антиалиасинга “Bitmap text (no anti-alias)” вля динамически создаваемых полей. Если текст уже лежит на таймлайне он перенимает свойства шрифта и отрисовывается правильно, но если он содан скриптом через createTextField шрифт не воспинимается.
А какое имя шрифта вы прописываете? Для битмап текста используется другое имя шрифта.
А на какой версии плеера это работает? Мы столкнулись с тем что на более старых версиях плеера (точно номер не скажу, но один из 9-ых релизов) не грузятся шрифты. Плеер обновили до 9.115 – заработало…
Ну вообще говоря работало точно с восьмой версии и потенциально должно работать в седьмой.
Вопрос про loadFont – в него пути можно абсолютные писать?
Можно, но надо учитывать url, указанный в шарной либе.
Есть ли возможность работать со шрифтами без использования Runtime sharing? При запуске флэшки из другого каталога runtime sharing НЕ РАБОТАЕТ (косяк MacroMedia\Adobe) даже при явном указании полных путей. Не будет работать пока в font.swf не прописать полный адрес шарной либы (просто font_shared.swf не работает). Это очень не гибко. Есть ли какое нить решение?
Перейти на AS3
Спасибо со рекомендацию. А в рамках ас2 можно как то решить этот вопрос\проблему?
Я не изучал вопрос загрузки шрифтов в AS2 досконально. То, что надо сваливать все в одну папку — не единственный недостаток подобной загрузки.
Не использовать runtime sharing не получится, на этом весь принцип работы и устроен.
Здраствуйте!
Отличная работа! Думаю, что вы спасли меня и мой проект!
Но я столкнулся с проблемой:
Можно ли использовать в FontManager htmlText?
Привет из Германии;)
Ну в принципе можете, почему нет
У меня не получаеться. Как только я заменяю “field.text =” на “field.htmlText =” текст не показываеться
Работает только в том случае, если я переношу строчку setNewTextFormat после установки текста и меняю на getTextFormat.
Так не работает:
field.setNewTextFormat(event.format); // ставим…
field.embedFonts = true;
field.html = true;// включаем embed шрифты
field.htmlText = ‘Hello’; // Пишем текст
Так работает:
field.embedFonts = true;
field.html = true;// включаем embed шрифты
field.htmlText = ‘Hello’; // Пишем текст
field.setTextFormat(event.format);
Но в рабочем случае, цвет заданный html-тагом перезаписываеться.
Как обойти эту проблему???
Зарание благодарен!!!
Лучше в самом HTML написать тег font с заданным шрифтом, размером и цветом для всего текста.
Это я тоже пробывал , но у меня почему то не получаеться
field.embedFonts = true;
field.html = true;// включаем embed шрифты
field.htmlText = ‘Vfont font=”‘+event.format.font+’”color=”#FF0000″ size=”20″V’+event.format.font+’V/fontV’; // Пишем текст
что я делаю не так?
Может всё-таки name, а не font?
Мндауж, я уже 2 дня без перерыва над проектом сижу, отсюда и ошибки..
но самое обидное что всеравно не работает. Ща пойду повешусь:)
field.embedFonts = true;
field.html = true;
field.htmlText = ‘Vfont name=”‘+event.format.font+’” color=”#FF0000″ size=”20″V’+event.format.font+’V/fontV’;
Здраствуйте,
я до сих пор не смог добиться того, что бы textHtml отображал текст в режиме embedFonts.
очень прошу подскажите способ… плииииззззззз
htmlText конечно же!
Дико извиняюсь! Нашел в чем было дело! шрифт был выставлен на bold и без -тага текс естественно не появлялся.
Ещё раз огромнейшее человеческое спасибо² за Fontmanager!!!!