Урок шрифти у флеш-роликах і кодування символів

задача: відповісти на кілька стандартних запитань з приводу використання шрифтів у флеші:
  • Чому текст не відображається під маскою?
  • Чому текст пропадає при повороті?
  • Чому текст пропадає при установці прозорості?
  • Чому текст пропадає при застосуванні таких-то ефектів до текстового поля (кліпу з текстовим полем)?
  • Чому на іншому комп'ютері видно зовсім інші шрифти, а не ті, які я поставив?
  • Чому не відображаються російські літери?
  • Чому завантаження з файлу текст відображається абракадаброю?
Урок розповідає про базові механізми, знання яких дозволяє не ставити всіх перерахованих вище питань. Якщо у вас виник один з таких питань, постарайтеся не питати про це на форумах: на вас будуть показувати пальцем і говорити "фууу, він (а) не вміє користуватися пошуком." :)

Для відображення будь-якого шрифту флеш-ролик може використовувати або шрифт, встановлений в системі (device font), або шрифт, включений в сам ролик (embedded font). Розглянемо обидва варіанти:

Варіант 1: флеш-ролик використовує шрифт, встановлений в системі (device font).

Плюси цього варіанту:
  • текст буде відображатися однаково, в якій би системі ні програвався ролик
  • текст буде відображатися під будь-якими масками
  • текст можна буде трансформувати (масштабування, поворот, прозорість і т. п.)
  • доступні засоби управління згладжуванням (у Flash 8 опцій згладжування (antialiasing) кілька)
Мінуси цього варіанту:
  • ролик важить більше

Незважаючи на те, що плюсів першого варіанта набагато менше, ніж плюсів другого, є випадки, коли використання системних шрифтів виправдано. Якщо головне - подати інформацію в читається, не використовуючи графічних ефектів, краще використовувати системні шрифти, оскільки вони не додають ваги ролику. на початок

Отже, ви вирішили, що всі користувачі повинні бачити текст в вашому ролику саме в тому шрифті, який ви задали. Або, можливо, вам знадобилося застосувати до тексту графічні ефекти (масштабування, поворот, прозорість і т. П.). Значить, шрифт повинен бути включений в ролик.

Необхідно виділити текстове поле на сцені і відкрити панель властивостей (Ctrl + F3 або Window-> Properties в головному меню). У цій панелі необхідно натиснути кнопку "Character." (Flash 6, 7) або "Embed." (Flash 8).

На наступному зображенні показано, як це виглядає в Flash 6 (MX). Ви можете підключити як все символи шрифту, так і деякі групи окремо. На додаток до цього, можна явно вказати, які символи включити, в рядку "And these characters".


Діалог включення символів у Flash 8 майже не відрізняється від діалогу в Flash 7.

Підключення різних накреслень шрифту для HTML-полів.

Важливо розуміти, що для флеш різні накреслення одного шрифту є по суті різними шрифтами. Тобто, для того, щоб шрифт правильно відображався з декорацією bold. italic і bold + italic. необхідно підключити всі ці три накреслення окремо.

Програмне підключення шрифтів.

Що робити, якщо ви хочете підключити шрифт до текстового поля програмно, за допомогою скрипта? Це може знадобитися вам, якщо ви створюєте текстове поле методом MovieClip.createTextField (). або хочете міняти шрифт в текстовому полі по ходу роботи програми.

В принципі, потрібно всього дві дії:
  • задати текстового поля шрифт за допомогою об'єкта TextFormat або за допомогою html розмітки
  • переключити режим відображення шрифту за допомогою
    TextField.embedFonts = true;
Але потрібно розуміти, що шрифт не візьметься з нізвідки - якщо ви хочете, щоб певний шрифт був підключений до текстового поля, цей шрифт повинен бути включений в ролик. Отже, якщо ви плануєте змінювати шрифти в текстовому полі, ви повинні забезпечити включення в ролик всіх необхідних шрифтів. До цієї проблеми є кілька підходів.

Основних варіантів два: включити всі необхідні шрифти в сам ролик, або довантажувати бібліотеки з необхідними шрифтами. Перше вимагає певної акуратності, але не представляє великої складності. Друге є нетривіальним рішенням, яке вимагає знання хитрощів роботи флеш плеєра. Ці "хитрощі" реалізовані в проекті Shared Fonts Manager Івана Дембіцького.

Відповідь на питання "як краще організувати програмне підключення шрифтів до тексовим полях?" Докладно дано в розділі FAQ на сайті Shared Fonts Manager. Там все пояснюється досить докладно, не буду повторюватися.

Як подивитися, які шрифти включені в ролик.

У головному меню середовища Flash виберіть File-> Publish Settings. і перейдіть на вкладку Flash. У цій вкладці встановіть галку "Generate size report". При компіляції ролика в вікні Output буде виведена докладна інформація про те що в цьому ролику скільки важить і в якому кадрі що вантажиться. Зокрема, там будуть перераховані всі символи всіх шрифтів включених в ролик.

Ця інформація допоможе вам по-перше, визначити, чи всі необхідні шрифти і символи включені в ролик, а по-друге, уникнути невиправданого використання декількох шрифтів там, де досить одного (або де можна взагалі не включати шрифт в ролик). Пам'ятайте, кожен шрифт додає ваги вашому ролику. на початок

Якщо шрифт не влючая в ролик (тобто, ви використовуєте системний шрифт), згладжуватися він не буде ні за яких умов. Але тут питання, що вам важливіше: всі плюси підключеного шрифту або те, що шрифт не буде згладжений.

Якщо шрифт включений в ролик, флеш плеєр починає автоматично згладжувати символи шрифту в тексті.

У Flash 6 і 7 як таких засобів управління згладжуванням немає. Можна домогтися піксельної чіткості шрифтів в обмеженому числі випадків, непрямими способами. В інших же випадках шрифти згладжуються, що іноді призводить до поганої читабельності і неакуратність тексту. Правда, варто відзначити, що в Flash 7 ситуація дещо покращилася, і домогтися піксельної чіткості (відсутність згладжування) можна для більшого числа шрифтів. У Flash 6 це було більшою проблемою.

Що робити, якщо ви публікуєте ролик під Flash 6 і 7, включили шрифт в ролик, і хочете, щоб текст був чітким (незгладжені).
  1. Взяти піксельний шрифт. У Flash 6 це було єдиною можливістю, у Flash 7 це не обов'язково, але не від будь-якого шрифту можна домогтися чіткості. Існують також шрифти, спеціально "заточені" під чітке відображення у флеші.
  2. Текстове поле не повинно бути отмасштабовані по вертикалі або горизонталі і не повинно бути повернуто. Це ж вимога стосується всіх батьківських для текстового поля кліпів.
  3. Координати лівого верхнього кута текстового поля повинні бути цілими числами. Якщо текстове поле рухається скриптом - необхідно на кожному кроці округляти координати. Це ж вимога стосується всіх батьківських для текстового поля кліпів.
  4. Виставити "рідний" для шрифту кегль (багато піксельні шрифти призначені для використання тільки в певному розмірі)
Якщо ви виконали перелічені вимоги та символи в тексті все одно змащуються (причому, можливо, змащуються лише деякі символи), то тут вам на допомогу може прийти лише експеримент. Спробуйте домогтися чіткості з іншим шрифтом, спробуйте знайти спеціально "заточений" під флеш шрифт, спробуйте змінити розмір шрифту. Чіткої закономірності немає.

У Flash 8 є вбудовані засоби керування згладжуванням шрифтів, як програмні, так і в середовищі розробки. Нижче показані режими згладжування, доступні в середовищі Flash 8.


Якщо ви забули включити шрифт в ролик, і намагаєтеся вибрати режим згладжування, середа попередить вас про це. Управління режимами згладжування є тільки для включених в ролик шрифтів (і автоматично для статичних текстових полів).

Програмне управління цими режимами є за допомогою класу flash.text.TextRenderer і властивості TextField.antiAliasType. В даному матеріалі їх використання не описується, оскільки все досить ясно викладено в Хелп. Там же є приклади використання.

Все одно згладжується? Ви поставили текстове поле цілими координатами, встановили режим згладжування "Bitmap Text" або "Use device fonts", і текст все одно згладжується? Варто перевірити трансформації текстового поля і кліпів (Ctrl + T), в які воно вкладено. Іноді мізерні зміни масштабу відбуваються при редагуванні випадково і неозброєним оком не видно.


У цьому випадку проблему вирішить кнопка "Reset" в правому нижньому кутку панелі Transform. на початок

Флеш сприймає текст в кодуванні Unicode. Це може бути UTF-8. UTF-16 LE або UTF-16 BE. Якщо ви завантажуєте текстовий файл (або отримуєте текст від скрипта), що містить нелатинські символи, він повинен бути в кодуванні Unicode, інакше не буде правильно сприйнятий флешем. UTF-16 LE часто назвают просто "Unicode", а UTF-16 BE часто називають "Unicode big endian". Скорочення "LE" і "BE" означають порядок байт для символів в файлі.

Існує настройка, що дозволяє флеш працювати з текстом в не-Юнікодние кодуванні. Ця інструкція говорить флеш про те, що текст, що завантажується з зовнішніх джерел, слід сприймати в локальній кодуванні системи. При такій настройці відображення / НЕ відображення символів тексту у користувачів буде повністю залежати від того, яка кодування за умовчанням встановлена ​​в їх операційних системах. Файли в кодуванні Unicode в цьому випадку будуть сприйматися правильно тільки при наявності сигнатури (для всіх видів Unicode).

Ця інструкція говорить флеш про те, що текст, що завантажується з зовнішніх джерел, слід сприймати в кодуванні Unicode. В цьому випадку відображення / НЕ відображення символів тексту не буде залежати від того, яка кодування за умовчанням встановлена ​​в системі у користувача.

загальні рекомендації
  • Використовувати текст із зовнішніх джерел в кодуванні UTF-8 з сигнатурою
  • Використовувати System.useCodepage = false; (Це значення за замовчуванням, можна не встановлювати його спеціально)