|
|
|||||
Не могу зарегистрировать шрифт
Пытаюсь сделать динамическую подгрузку шрифтов в приложение. Создаю флешку в которой создаю новый шрифт, делаю ему Linkage.
Затем в основном классе делаю загрузку этой свф"ки. Всё вроде бы ок, он спотыкаюсь при регистрации шрифта! В чём я допустил ошибку? package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.text.Font; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.utils.describeType; import flash.display.MovieClip; import flash.text.TextField; import flash.text.TextFormat; import flash.text.AntiAliasType; /** * ... * @author Andrey */ public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point loadFont("../lib/fontTest.swf"); } private function loadFont(url:String):void { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fontLoaded); loader.load(new URLRequest(url)); trace("LOADING..."); } private function fontLoaded(e:Event):void { trace(e.target.applicationDomain.getDefinition("Alba")); var FontLibrary:Class = e.target.applicationDomain.getDefinition("Alba") as Class; Font.registerFont(FontLibrary.Alba); //Вот тут вылазит ошибка [Fault] exception, information=TypeError: Error #2007: Параметр font не должен быть равен нулю. drawText(); } public function drawText():void { var tf:TextField = new TextField(); tf.defaultTextFormat = newTextFormat; tf.embedFonts = true; tf.antiAliasType = AntiAliasType.ADVANCED; tf.autoSize = TextFieldAutoSize.LEFT; tf.border = true; tf.textColor = 0x000000; tf.text = "Scott was here\nScott was here too\nblah scott...:;*&^% "; addChild(tf); } } } |
|
|||||
package stlib.fon { import flash.text.Font; public class RegistrationFonts extends Font { [Embed(source = 'sours/ARIAL.TTF', fontFamily = 'arial', embedAsCFF = 'false')] private var Arial1:Class; [Embed(source = 'sours/ARIALBD.TTF', fontFamily = 'arialbd', embedAsCFF = 'false')] private var Arial2:Class; [Embed(source = 'sours/ARIALBI.TTF', fontFamily = 'arialbi', embedAsCFF = 'false')] private var Arial3:Class; [Embed(source = 'sours/ARIALI.TTF', fontFamily = 'ariali', embedAsCFF = 'false')] private var Arial4:Class; [Embed(source = 'sours/ARIBLK.TTF', fontFamily = 'ariblk', embedAsCFF = 'false')] private var Arial5:Class; [Embed(source = 'sours/WEBDINGS.TTF', fontFamily = 'webdings', embedAsCFF = 'false')] private var Sumbol1:Class; [Embed(source = 'sours/WINGDING.TTF', fontFamily = 'wingding', embedAsCFF = 'false')] private var Sumbol2:Class; public function RegistrationFonts() { registerFont(Arial1); registerFont(Arial2); registerFont(Arial3); registerFont(Arial4); registerFont(Arial5); registerFont(Sumbol1); registerFont(Sumbol2); } // get all font name static public function get ALLFONTNAME ():String { var _ALLFONTNAME :String = ''; var _arr :Array = Font.enumerateFonts(); _arr.sortOn ( "fontName", Array.CASEINSENSITIVE ); for (var i:int = 0; i < _arr.length; i++) if (i != _arr.length - 1) _ALLFONTNAME += _arr[i].fontName + "\n"; else _ALLFONTNAME += _arr[i].fontName; return _ALLFONTNAME; } } }
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
Регистрация: Jun 2011
Сообщений: 212
|
Из хелпа к Font:
Класс Font нельзя использовать для загрузки внешних шрифтов или для создания своего экземпляра Font. Класс Font следует использовать как абстрактный базовый класс.Из хелпа к FontAsset: FontAsset – это подкласс класса flash.text.Font, который представляет шрифты, встраиваемые в приложение Flex. |
|
|||||
немного не понял ваш пример. Получается если я сделаю как у вас и у меня будет допустим 100 шрифтов, то юзеру придётся сидеть и ждать пока все 100 шрифтов загрузятся? Может тогда разбить всё на маленькие swf, в каждом из которых будет по шрифту и их подгружать, а уже после подгрузки регистрировать?
|
|
|||||
где то у Мука читал как можно грузить шрифты по мере их надобности.
Добавлено через 1 минуту в моём примере они вкомпилины в проект.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
To GBee: не, так тоже не прокатывает - выдаёт ошибку
[Fault] exception, information=ArgumentError: Error #1508: Указано недопустимое значение для аргумента font. |
|
|||||
Кто то из ребят писал: делают swc-ку со шрифтами (при чем уже с набором нужных глифов), потом в проекте нужный подключают - никаких головных болей (и лишнего веса). Я это редко юзаю ибо с ИДЕ работаю, мне проще через иде - лентяй
|
|
|||||
[+4 06.05.14]
|
Цитата:
Так к слову, после подключения swc
__________________
Марк Tween |
|
|||||
.
|
Шрифты можно использовать без регистрации. Они будут доступны в том ApplicationDomain, куда загружены. Во флекс вовсе не используется механизм Font.registerFont(), потому что после этого невозможно выгрузить swf, содержащий этот шрифт. Вместо этого ввели понятие FontContext, который поддерживают все модули, созданные во флекс. Специальный билдер в модуле выдает UITextField или какой другой компонент, содержащий текст из своего контекста (ApplicationDomain). После этого в компоненте можно использовать embed fonts.
Статья. |
Часовой пояс GMT +4, время: 20:49. |
|
« Предыдущая тема | Следующая тема » |
|
|