|
Зміст
FontManager призначений для організації доступу до шрифтів shared бібліотек і надає цілком нові можливості.
FFontManager дозволяє не включати в ролик бібліотеки шрифтів, а довантажувати їх на сцену за допомогою команди loadMovie і потім використовувати як в основному ролику, так і в інших завантажених роликах.
ВЗовнішні бібліотеки являють собою пари swf файлів: файл-бібліотека і файл-контейнер. Ім'я файлу-бібліотеки залежно від імені файлу-контейнера і формується як [ім'я_файлу_контейнера]+[_lіb]+[.swf]. Наприклад, якщо файл-контейнер має ім'я , то файл-бібліотека повинен мати ім'я
Файл-бібліотека повинен містити мувікліп, з опцією Lіnkage: export for runtime sharing і заданим URL. У свою чергу цей мувікліп повинен містити одне іменне текстове поле з підключеними шрифтами (embed fonts).
Дивися розділ створення shared бібліотек a також файли прикладів для більш детального вивчення.
Далі ці зовнішні бібліотеки можуть бути завантажені в основний ролик (movіe) і за допомогою методів FontManager можуть бути зареєстровані для використання в ролику.
Використання в такий спосіб організованих бібліотек далеко не єдина можливість. FontManager є лише сполучною ланкою між shared бібліотеками й іншими мувиклипами проекту, у тому числі і завантаженими.
Доступ до шрифтів може бути встановлений у наступних напрямках:
- Головний ролик може завантажити зовнішній swf файл і використовувати його shared бібліотеку шрифтів;
- Завантажений ролик може використовувати shared бібліотеку шрифтів іншого завантаженого swf файлу;
- Головний ролик може містити власну shared бібліотеку шрифтів і використовувати ці шрифти в будь-якому завантаженому ззовні ролику.
За замовчуванням при ініціалізації створюється єдиний об'єкт: fonts_mng цей об'єкт глобальний і закритий від обходу за допомогою ASSetPropFlags.
При необхідності візуального перегляду вмісту fonts_mng досить створити посилання на цей об'єкт:
_root.show_me = font_mng
і подивитися список змінних у режимі тестування.
Використання FontManager дає наступні нові можливості:
- використання тих самих файлів бібліотек на всьому сайті дозволить знизити об'єм даних, що завантажуються користувачем.
Файли бібліотек, які завантажені один раз, не будуть повторно завантажуватися на комп'ютер користувача, а будуть братися з кеша браузера.
- Завантаження шрифтів при необхідності..
При парсінгу HTML тексту можна обумовити які потрібні шрифти, довантажити і застосувати їх.
- спрощення локалізації..
При локалізації роликів багато часу іде на заміну параметрів текстових полів і підключення нових шрифтів. При використанні FontManager з'являється можливість лише один раз настроїти файли бібліотек, і всі нові ролики будуть їх використовувати.
Якщо розподілити по папках локалізації файли даних і файли бібліотек з локалізованими шрифтами, то локалізацію роликів можна робити "миттєво", просто вказавши відповідну папку локалізації.
- спрощення редизайну..
Досить замінити підключений шрифт у бібліотеці і цих змінах будуть застосовані до всіх роликів, що використовують бібліотеку.
- розподіл ядра, даних і бібліотек..
тепер це можна зробити повноцінно. з'являється можливість створити розумний ролик, що буде на основі xml створювати сцену, довантажуючи тільки необхідні елементи.
Возможно автоматическое создиние библиотек с помощью
Font Library Creator Extension от
Carlos Rovira.
Увага! FontManager спочатку був зроблений під 6-ю версію плеєра і всі уроки передбачають публікацію файлів у 6 версію.
При цьому можливість використання в 7й версії плеєра не виключена.
Про використання FontManager у роликах 7й версії
Крок 1: Створення мувікліпа-бібліотеки, підключення шрифту.
- Створіть новий FLA, задайте йому зрозуміле ім'я, що характеризує шрифт, який він буде містити. Ім'я файлу повинно бути складене з наступних частин:
наприклад: ,
де вказує на основне призначення використання, а вказує на те, що ця бібліотека містить шрифт із накресленням italic.
Якщо ви вирішите створити бібліотеку цього ж шрифту з plaіn накресленням, то відповідно називатися вона буде body_p_lib.fla, і якщо інший розробник вашої компанії створить body_b_lib.fla або body_bi_lib.fla, то напевно ви будете очікувати що це бібліотеки цього ж шрифту з bold і bold-іtalіc накресленням.
Не використовуйте імена шрифтів і їхніх накреслень у назвах бібліотек. Якщо шрифт згодом зміниться, то це створить велику кількість незручностей. Адже якщо бібліотека arial_lib.swf буде містити Tіmes New Roman, те наприклад розробники, що будуть локалізувати проект де-небудь в Ефіопії або в Росії будуть сильно здивовані результатами локалізації.
Надалі дотримуйтеся цієї стратегії іменування бібліотек, це дозволить вам легко керувати бібліотеками і, більш того, зробить цей процес зрозумілим не тільки вам.
- Створіть мувікліп і задайте йому зрозуміле ім'я, рекомендується використовувати ім'я бібліотеки, наприклад:
. Зробіть правий клік мишею на мувікліпі, виберіть Lіnkage... у вікні, що відкрилося, установіть галочку Export for runtime sharing,
нші галочки значення не мають.
Впишіть у рядок URL шлях до файлу swf. Ім'я swf файлу повинне відповідати імені файлу після компіляції, наприклад: (про завдання абсолютного шляху розповімо нижче)
- ССтворіть у цьому мувікліпі текстове поле;
- У текстове поле впишіть текст. Краще, якщо цей текст буде містити ім'я бібліотеки і покажчик на мовну версію і накреслення шрифту, наприклад: ;
- Задайте відповідний шрифт текстовому полю;
- Обов'язково включіть шрифт у ролик: Панель Properties, Character..., All characters або інший необхідний набір символів);

- Обов'язково задайте ім'я екземпляра текстовому полю, наприклад ;
Припустимо, але не рекомендується розміщати інші текстові поля в цьому мувікліпі, навіть якщо в даний момент ви впевнені у тому, що два шрифти будуть завжди використовуватися разом. Практика, що рекомендується: у файлі бібліотеки повинен бути один мувікліп, що утримує одне текстове поле з одним включеним шрифтом. У зворотному випадку ви ризикуєте без потреби завантажувати зайвий об'єм даних і істотно ускладнити використання бібліотек; ;
- У мівикліпі створіть шар вище шару з текстовим полем і впишіть у кадрі скрипт:
if (font_mng.registerTextFormat("body_i", this.body_i_txt)) {
this._parent.removeMovieClip();
} - Збережіть FLA файл під цим же ім'ям і відкомпілюйте.
Крок 2: Створення мувікліпа-контейнера
- Створіть новий FLA;
- Збережіть його в тій же папці під тим же ім'ям але без суфікса _lіb, наприклад:
- Для Flash MX: Закрийте і відкрийте "як бібліотеку" FLA файл із текстовим полем;
- Перетягніть з shared бібліотеки мувікліп, що містить текстове поле на сцену нового ролика;
- Опублікуйте файл.
Файли бібліотеки готові.
Крок 3: Завантаження і тестування shared-бібліотек
- Створіть новий FLA і збережіть його в тій же папці, наприклад під ім'ям ;
- Помістіть скрипт ініціалізації FontManager у будь-яке місце, бажано спочатку ролика;
Тепер ви можете завантажити і застосувати шрифт до будь-якого текстового поля.
Для тестування спробуйте мій скрипт, його потрібно помістити в першому кадрі _root після коду ініціалізації FontManager:
_root.createEmptyMovieClip("temp_mc", 0).loadMovie("body_i.swf");
_root.createTextField("test_txt", 1, 0, 0, 200, 200);
_root.test_txt.text = new Array(30).join("Hello world! ");
font_mng.addListener(_root.test_txt);
_root.test_txt.onRegister = function(success, name, mng) {
if (!success) {
return trace("registerError : "+name);
}
trace("name:\n\t"+name+"\nfont:\n\t"+mng[name].font);
this.setTextFormat(mng[name]);
this.wordWrap = this.embedFonts=true;
};
- протестуйте. текст у текстовому полі має бути видно.
Крок 4: Тестування і використання на сайті
Заздалегідь продумайте розташування ваших бібліотек на сайті. При використанні в мережі оптимальним і, можливо, єдино вірним буде використання абсолютних шляхів або шляхів щодо кореневої папки сайта.
Увага: якщо ви хочете протестувати демонстраційну версію FontManager, ви можете це зробити тільки використовуючи
WebSpeed Simulator.
Вкажіть у параметрах якості Local Web Sіte папку, у якій ви маєте намір створити тестову структуру сайта і потім у режимі Browse Web введіть http://localhost/
у рядку адреси браузера.
тже, спочатку варто створити папки, у яких будуть розташовуватися файли бібліотек. У прикладі для файлів бібліотек буде використаний шлях .
Якщо ви маєте намір використовувати інше розташування, врахуйте це надалі.
- У кореневій папці сайта створіть папку Lіbs, а в ній папку SharedFonts
- Відкрийте файл body_і.fla
- Відкрийте бібліотеку й у властивостях Lіnkage мувікліпа вкажіть URL:
- Відкомпілюйте файл; При компіляції ви отримаєте повідомлення:
Error opening URL "file:///Libs/SharedFonts/body_i_lib.swf"
на нього можна не звертати увагу;
- Скопіюйте body_i_lib.swf і body_i.swf
в папку SharedFonts (у файлі body_і_lіb ніяких додаткових змін робити не потрібно, він залишиться таким же, як ми його створили раніше);
- Відкрийте створений ранішеTestBodyItalic.fla і замініть
.loadMovie("body_i.swf")
на
.loadMovie("/Libs/SharedFonts/body_i.swf")
- Опублікуйте файл (Ctrl+F12) для того, щоб одержати HTML файл.
- Скопіюйте файл у будь-яке місце на сайті.
- Відкрийте сторінку. Через якийсь час, після завантаження шрифтів ви побачите, що вміст текстового поля набув нове форматування.
Крок 5: Використання в 7й версії плеєра
Для використання FontManager у 7й версії плеера необхідно:
- створити swf файл 6й версії утримуючий скрипт ініціалізації FontManager;
- розмістити цей файл на сайті і довантажувати його у випадку потреби;
або
- помістити код ініціалізації в shared мувікліп і включати цей мувікліп у ролики
єдиною незручністю при використанні в 7й версії плеєра є необхідність чекання завантаження файлу, однак з огляду на його розмір (близько 1 кілобайта) ця незручність мінімальна. Більш того, така практика використання рекомендується і при використанні 6й версії плеєра.
Ніяких інших функціональних відмінностей бути не повинно.
У процесі розробки FontManager я багато експериментував. Перша версія FontManager являла собою компонент. У процесі експериментів кількість методів FontManager скоротилася з восьми до одного, кількість подій скоротилася з чотирьох до одного, було також дві властивості, від яких мені також вдалося позбутися. Було створено біля п'ятдесяти файлів для тестування. У результаті я можу на підставі цього досвіду дати деякі рекомендації. Надалі, ви напрацюєте власні прийоми, але спочатку раджу прислухатися до моїх порад:
Не прагніть того, щоб включати скрипт ініціалізації FontManager у проект. Кращим способом буде створення swf, що утримує цей скрипт і використання його як модуля для завантаження. Ще кращим варіантом буде створення shared мувікліпа зі скриптом ініціалізації FontManager всередині і включення цього shared мувікліпа в ті проекти, де він необхідний.
Це дозволить легко заміняти скрипт ініціалізації FontManager при перенесенні на інший домен.
Не використовуйте в роликах імена swf файлів бібліотек. Набагато гнучкіше ваша система буде якщо ви створите xml файл - опис ваших бібліотек. Наприклад таке:
<fontlibrary version="1.0" author="Ivan Dembicki" >
<style name="body" font="Artemius TT" lang="rus" >
<plain id="body_p" url="/fontLibrary/rus/body_p.swf" />
<bold id="body_b" url="/fontLibrary/rus/body_b.swf" />
<italic id="body_i" url="/fontLibrary/rus/body_i.swf" />
<italicbold id="body_bi" url="/fontLibrary/rus/body_bi.swf" />
</style>
<style name="header" font="ArtemiusBlack TT" lang="rus" >
<plain id="header_p" url="/fontLibrary/rus/header_p.swf" />
<bold id="header_b" url="/fontLibrary/rus/header_b.swf" />
<italic id="header_i" url="/fontLibrary/rus/header_i.swf" />
<italicbold id="header_bi" url="/fontLibrary/rus/header_bi.swf" />
</style>
</fontlibrary>
Зверніть увагу на відповідність ІD вузлів і назв стилів. Використовуючи ІD у цьому випадку легко одержати URL файла-контейнера бібліотеки. І локалізація для Японії, наприклад, у такому випадку зажадає тільки створення папки "/fontLibrary/jp/", наповнення її файлами бібліотек і заміни шляхів у xml файлі.
Полегшиться перехід від локальної до Інтернет версії.
Ще однією перевагою буде можливість візуального контролю відповідності шрифтів стилям.
Зрозуміло, що XML опис ви можете зробити так, як вам зручніше. Це лише приклад.
Використовуйте самореєстрацію бібліотек, як це зроблено в прикладах. Сміливо видаляйте бібліотеки після ініціалізації.
Для локальних тестів використовуйте відносні шляхи бібліотек, для використання в Інтернет - абсолютні.
Не створюйте власні екземпляри FontManager, хоч це можливо використовуючи конструкцію виду:
my_font_mng = new font_mng.constructor()
я гадаю, що про таку можливість потрібно знати, але використовувати тільки в крайньому випадку.
Actions
Availability
Usage
font_mng.registerTextFormat( instanceName, textField )
Parameters
instanceName - рядок, задає ім'я TextFormat об'єкта
textField - осилання на текстове поле в shared мувікліпі, з якого потрібно одержати textFormat об'єкт.
Returns
Boolean. повертає false,
якщо текстове поле не містить включених шрифтів або
instanceName TextFormat об'єкта не заданий. У зворотньому випадку повертає true.
Description
ММетод. Створює TextFormat об'єкт у FontManager. По закінченні, shared мувікліп, що містить текстове поле-зразок може бути вилучений.
TextFormat об'єкт у FontManager може бути створений за зразком будь-якого текстового поля знаходиться в shared мувікліпі і має включені (embeded) шрифти.
ППеревірка на те, що текстове поле знаходиться в shared мувікліпі покладається на розроблювача.
Безпосередньо перед виходом із процедури ініціалізації FontManager віщає подію
onRegister c передачею параметрів ініціалізації..
Example
- у випадку з бібліотекою, що завантажується, при виклику з shared мувікліпа (самореєстрація):
if (font_mng.registerTextFormat("body_i", this.body_i_txt)) {
this._parent.removeMovieClip();
}
font_mng.registerTextFormat("body_i", this.body_i_txt)
- випадок з бібліотекою, що знаходиться на сцені:
font_mng.registerTextFormat("body_i", this.any_mc.shared_mc.body_i_txt)
Availability
Usage
listenerObject.onRegister = function (success, name, instance_mng, textField ) {
}
Parameters
success
- Boolean, повертає false,
якщо при виклику registerTextFormat небуло задане ім'я TextFormat об'єкта або текстове поле-зразок не містить включених (embeded) шрифтів. У зворотньому випадку повертає true.
name - рядок, ім'я створюваного в FontManager TextFormat об'єкта.
instance_mng - посилання на екземпляр FontManager, що викликав реєстрацію;
textField - спосилання на текстове стать-зразок форматування.
Returns
Нічого
Description
Подія. Відбувається безпосередньо перед виходом із процедури реєстрації TextFormat об'єкта в FontManager.
ПОскільки FontManager є віщателем, він також має всі методи і властивості віщателя.
Example
_root.createTextField("test_txt", 1, 0, 0, 200, 200);
_root.test_txt.text = new Array(30).join("Hello world! ");
font_mng.addListener(_root.test_txt);
_root.test_txt.onRegister = function(success, name, mng) {
if (!success) {
return trace("registerError : "+name);
}
trace("name:\n\t"+name+"\nfont:\n\t"+mng[name].font);
this.setTextFormat(mng[name], this);
this.wordWrap = this.embedFonts=true;
};
|