Впровадження шрифтів (fonts embedding), цікаве про flash (as2, as3)

Днями мені стало цікаво, як можна впровадити шрифти за допомогою коду в проекті Flash CS3 (AS3). Я провів за пошуком інформації з даного питання половину дня і до ладу ні до чого не прийшов.

Большенство записів які вдалося знайти радили використовувати конструкцію:

Але поспішаю засмутити тих хто шукав відповідь на питання «Як все-таки може заробити ця конструкція в CS3» - ніяк. На жаль в CS3 є багато речей які зроблені не зовсім зручно для програміста (хоча у Flex реалізована саме така система впровадження, і незрозуміло що заважало її реалізувати в CS3).

Трошки помучившись я знайшов два виходи з ситуації, але все таки уникнути використання IDE нам не вдасться.

Перший крок для обох методів однаковий - в IDE імпортувати необхідний нам шрифт, робиться це таким чином:

В бібліотеці (Library) тиснемо сюди (позначено червоним):

Впровадження шрифтів (fonts embedding), цікаве про flash (as2, as3)

Далі вибираємо в меню пункт «New Font». і у вікні вибираємо необхідний шрифт і його параметри (bold, italic, bitmap, size), в поле Name вписуємо ідентифікатор по якому ми в подальшому ми будемо визначати шрифт.

Впровадження шрифтів (fonts embedding), цікаве про flash (as2, as3)

Натискаємо «OK». В бібліотеці у нас з'явився впроваджений шрифт з ім'ям fontArial.

Далі вибираємо його в списку натискаємо правою кнопкою і в меню вибираємо «Linkage«, в вікні ставимо галочки: Export for ActionScript і якщо необхідно Export in first frame (для екпорту класу на перший кадр, якщо у вас передбачений прелоадер і зроблений він окремо) .

Впровадження шрифтів (fonts embedding), цікаве про flash (as2, as3)

Для того щоб встановити для TextField'a шрифт який ми впровадили можна вдатися до такої конструкції:

Тому я використовую інший спосіб за кількістю коду він перевершує попередній варіант, але на мій погляд набагато зручніше у використанні:
Другий крок (другий спосіб):

Для початку я повинен розповісти вам про функції getDefinitionByName (), на випадок якщо ви не знаєте що вона робить.

Функція getDefinitionByName () перетворює ім'я класу на заслання на клас, тобто використання конструкції:

призводить до того що SpriteClass стає посиланням на клас Sprite і ви можете створювати спрайт використовуючи дане посилання:

І так переходимо до справи.

Щоб організувати для кожного необхідного проекту імпорт шрифтів необхідних тільки даним проектом ми повинні написати абстрактний клас:

Наступним функція loadFont бере посилання на клас необхідного нам шрифту і регістріурет даний шрифт, повертаючи ім'я шрифту (а не лінковки)

І в другій частині кроку ми напишемо свій власний клас для певного проекту:

І тепер все що нам залишається це використовувати при створенні TextFormat'a ім'я шрифту з FontManager'а, наприклад FontManager.fontNameTahoma.