загрузка шрифтов во время выполнения во Flash / AS3 - PullRequest
2 голосов
/ 22 октября 2008

Представьте, что вы создаете презентацию, которая будет переведена на дюжину разных языков, в том числе с нелатинскими символами (например, на китайский). Руководство по стилю фирменного стиля клиента диктует, что определенные шрифты приемлемы для определенных языков. Сам контент должен быть выведен наружу, чтобы текст можно было заменить, не открывая файл .fla и не сохраняя заново графику.

Итак, мы говорим о динамических TextField, заполненных из XML, с заменой шрифта, чтобы приспособить локаль зрителя - что является наиболее безболезненным способом динамической загрузки только необходимых шрифтов (независимо от размера файла) и применения их как необходимо? Я ищу решения, использующие только Flash, а не Flex .

Ответы [ 4 ]

2 голосов
/ 23 октября 2008

Это немного хлопотно во вспышке, но это вполне возможно. Вам нужно будет «встроить» шрифт в отдельный SWF-файл, загрузить этот SWF-файл из основного приложения и затем зарегистрировать этот шрифт внутри этого SWF-файла. Это позволит вам выполнять загрузку шрифтов во время выполнения. Это потребует от вас либо указать шрифт для каждого языка в приложении, либо в любых файлах, в которых вы храните переводы, что, возможно, не идеально, но также не включает все шрифты в ваше основное приложение. Это могло бы составить сотни килобайт шрифтов, загруженных без причины.

Это сообщение в блоге содержит краткое изложение того, что вам нужно сделать, чтобы заставить его работать. Я тоже это сделал, поэтому, если вам интересно, я могу расширить этот пост несколькими примерами позже.

1 голос
/ 29 октября 2008

Я полностью разочарован тем, что никто не знал об этом - о, хорошо. В конце концов я нашел кого-то, кто написал небольшой класс для управления процессом загрузки шрифтов и дал указания о том, как создать .swfs для его загрузки:

Flash AS3 Загрузка шрифтов

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

0 голосов
/ 22 октября 2008

Прежде всего, убедитесь, что вы установили ожидания, чтобы никто не думал, что вы будете использовать встроенные шрифты на азиатских языках, таких как китайский и японский. Если вы не планируете загружать несколько мегабайт глифов, вы будете использовать шрифты устройства, полная остановка. Таким образом, разумно иметь рекомендации по использованию класса шрифта - _sans, _serif, _typewriter или их локализованные эквиваленты - но не рекомендации по шрифту как таковые.

Во-вторых, в прошлом мой подход всегда заключался в том, чтобы убедить людей в том, что в большинстве случаев им все равно лучше использовать шрифты устройств. Использование шрифтов устройства сократит ваше время разработки и позволит избежать ошибок. Это заставит ваш контент загружаться быстрее (если по сети), и практически во всех случаях он будет рендериться быстрее. Часто это также будет более разборчивым.

Клиенты любят требовать, чтобы весь их основной текст был написан на языке Garamond-Extra-British или где-либо еще, но убедитесь, что они знают, какие расходы на него затрачены. Если они увидят свет, вы избавите себя от значительной боли.

0 голосов
/ 22 октября 2008

Ну, вы кое-как узнаете, какой язык вы загружаете. Автоопределение может быть довольно сложным.

Предполагая, что вы знаете, на каком языке это содержимое, вы можете зарегистрировать шрифты, которые будут использоваться во время выполнения, используя Font.registerFont () ; При этом вы можете загрузить SWF-файл, содержащий шрифт, зарегистрировать его, и он будет доступен для будущего использования во всех текстовых полях. печать («образец кода»);

[Embed(src="someFont.ttf", fontFamily="myFont", mimeType="application/x-font")]
private var fontClass:Class;

...

Font.registerFont(fontClass);

Обратите внимание, что вам придется скомпилировать с помощью гибкого компилятора для поддержки тега Embed.

В дополнение к этому неплохой утилитой является Font.hasGlyphs () , которую можно использовать, чтобы проверить, доступны ли используемые символы во встроенных шрифтах. Это может быть использовано либо для возврата к системному шрифту, либо для отображения предупреждения вам как разработчику (если вы забыли какие-либо символы или что-то еще). Подклассы TextField для автоматической проверки могут быть хорошей идеей.

Если это будет онлайн, в общем, встраивание китайского языка - это то, о чем вам стоит подумать дважды. Внедрение всех символов увеличит размер файла на много , и, на самом деле, в любом случае не так много полных китайских шрифтов. Приведенная выше техника, конечно, все еще полезна для многих других языков.

...