![]() |
Не могу зарегистрировать шрифт
Пытаюсь сделать динамическую подгрузку шрифтов в приложение. Создаю флешку в которой создаю новый шрифт, делаю ему Linkage.
Затем в основном классе делаю загрузку этой свф"ки. Всё вроде бы ок, он спотыкаюсь при регистрации шрифта! В чём я допустил ошибку? Код AS3:
|
Код AS3:
Код AS3:
|
Из хелпа к Font:
Класс Font нельзя использовать для загрузки внешних шрифтов или для создания своего экземпляра Font. Класс Font следует использовать как абстрактный базовый класс.Из хелпа к FontAsset: FontAsset – это подкласс класса flash.text.Font, который представляет шрифты, встраиваемые в приложение Flex. |
немного не понял ваш пример. Получается если я сделаю как у вас и у меня будет допустим 100 шрифтов, то юзеру придётся сидеть и ждать пока все 100 шрифтов загрузятся? Может тогда разбить всё на маленькие swf, в каждом из которых будет по шрифту и их подгружать, а уже после подгрузки регистрировать?
|
Код AS3:
|
где то у Мука читал как можно грузить шрифты по мере их надобности.
Добавлено через 1 минуту Код AS3:
|
To GBee: не, так тоже не прокатывает - выдаёт ошибку
[Fault] exception, information=ArgumentError: Error #1508: Указано недопустимое значение для аргумента font. |
Кто то из ребят писал: делают swc-ку со шрифтами (при чем уже с набором нужных глифов), потом в проекте нужный подключают - никаких головных болей (и лишнего веса). Я это редко юзаю ибо с ИДЕ работаю, мне проще через иде - лентяй :)
|
Цитата:
Так к слову, после подключения swc Код AS3:
|
Шрифты можно использовать без регистрации. Они будут доступны в том ApplicationDomain, куда загружены. Во флекс вовсе не используется механизм Font.registerFont(), потому что после этого невозможно выгрузить swf, содержащий этот шрифт. Вместо этого ввели понятие FontContext, который поддерживают все модули, созданные во флекс. Специальный билдер в модуле выдает UITextField или какой другой компонент, содержащий текст из своего контекста (ApplicationDomain). После этого в компоненте можно использовать embed fonts.
Статья. |
Цитата:
|
dimarik, а можно поподробнее? У меня не получается без регистрации, даже если гружу в ApplicationDomain.currentDomain.
То есть вот так работает: (SWF со шрифтом, Fonts это класс Документа) Код AS3:
Код AS3:
|
Цитата:
что-то я в конец запутался!:) Мне просто нужно создать в проекте выпадающий список в котором будет возможность выбрать шрифт для текстового поля. Шрифтов заказчик хочет порядка 100, поэтому боюсь как бы swf из-за этого не стал размером эдак 50 мб! Ещё и хочет чтобы потом их можно было убирать/добавлять через админку без перекомпиляции.(Делаю редактор футболок) Как бы вы реализовали эту задачу? Чтобы шрифты не увеличивали объём проекта и чтобы их потом можно было заменять без перекомпиляции? На счёт первого я думал что оптимальным вариантом будет создать для каждого шрифта отдельную флешку которую подгружать при клике в выпадающем списке. Но тут возникает некоторая проблема - смотрел примеры таких редакторов и там в выпадающем списке текст написан тем шрифтом который выбираешь, конечно можно просто проэмбедить нужные символы, а весь список уже загружать по одному как написал ранее, но может ещё какойто способ подскажете? А по поводу без перекомпиляции - я пока вообще не представляю, можно ли это сделать? |
Нельзя. SWF вообще не содержит файл шрифта, когда Вы его внедряете. Компиллятор делает из файла (TTF например) особый ресурс в виде векторных картинок-глифов и минимальной информацией. Получить из свфки исходный шрифт как он был до компиляции невозможно – его уже нет. Другими словами, загрузить файл шрифта в скомпиленную свфку можно, но для плеера это не будет шрифтом, плеер не понимает форматы шрифта, даже device fonts отображает не плеер, а система. Плеер умеет работать только с тем внутренним форматом, который создает компилятор. Вывод - компилировать свфки с внедренным шрифтом придется. Другое дело, что это можно автоматизировать, создавая их на сервере с помощью РНР-модуля, так что заказчику останется лишь загружать шрифты через CMSку. Также РНР мог бы делать превьюшки с нужным текстом и регистрировать это все в XML (к примеру). Тогда в списке шрифтов Вы показываете превьюшки и по клику загружаете нужный SWF со шрифтом... Ну я так это вижу.
|
Wolsh, необходимо создавать текстовое поле в контексте Fonts.
Код AS3:
Код AS3:
|
Создавать объекты через метод другого класса… извращение какое-то
|
Цитата:
http://en.wikipedia.org/wiki/Factory_method_pattern PS: правда когда в с++ детектор утечек памяти показывает в фабричный метод и нету стека, то приходится чесать репу %) |
dimarik, спасибо, работает. Правда, нет возможности получить список доступных шрифтов, но для случая с одним семейством в одном swf-файле можно сделать публичные константы, рассказывающие об имени семейства, наличии начертаний и формате (CFF или олдовый). В принципе, небольшая плата за возможность выгружать лишние мегабайты, когда пользователь решит креативить с другим шрифтом.
|
Денискин утилитарный класс, который это позволяет.
|
блин, что не делаю никак не работает!(((
пишет ошибку Код:
[Fault] exception, information=ReferenceError: Error #1065: Переменная AsianGuy не определена.хотя она там есть Код AS3:
Wolsh, при использовании вашего способа у меня вылазит таже ошибка! |
Вложений: 1
Код AS3:
Что Вы с ними делать-то будете, экземпляры создавать?)) Добавлено через 1 час 10 минут Вот проект со способом от dimarika. И так шрифты отображаются, и классы по getDefinition выковыриваются, если очень хочется сделать регистрацию и юзать в родных текстфилдах. Какие ошибки у Вас, я не могу телепатически узнать. (если решите перекомпилить consola.swf, Вам придется добавить в папку lib/ 4 файла этого шрифта. Затем ставите галочку Always compile на класс FontsPack.as, компилите, удаляете старую consola.swf и переименовываете FontsLibrary2.swf в consola.swf. Переставляете Always compile обратно и компилите проект) |
Вложений: 1
спасибо за пример, Wolsh!
Сделал также как в примере, только со своим шрифтом, ошибок при компиляции не выдаёт, но и текст никакой не показывает когда textField.embedFonts = true; Вот сам проект |
Пробел забыли:
Цитата:
Цитата:
|
Вложений: 1
поменял, но всё равно не работает!:(
|
embedAsCFF="false"
|
У меня работает после добавления пробела.
Я компилил в стареньком ФД со старым сдк, поэтому embedAsCFF не указывал. Вам бы стоило указать, тем более что флаг CFF Вы установили в тру)) |
Цитата:
|
На новый DefineFont4 для flash.text.engine
|
CFF это новый формат представления шрифта в SWF-файле. Он расширен, содержит гораздо больше данных для типографики, чем старый формат. Старый используется во flash.text.TextField, a CFF - в flash.text.engine.
|
не знаю...поставил embedAsCFF = false, перекомпилил флешку со шрифтом, переименовал её, загрузил в основой проект...но всё по старому, как только ставлю embedFonts = true - текст исчезает!((((
Может я както компилю её не правильно? Делал всё как описал Wolsh! |
Вложений: 1
Но у меня то компилится)))
|
Wolsh, а вы чтото меняли при компиляции? Просто не могу по коду отличий заметить
Добавлено через 15 минут кстати, в своём первом примере вы использовали 4 разных шрифта Consola, а как определить есть ли в шрифте italic или bold? |
Так что ли?
Код AS3:
|
Код AS3:
|
Цитата:
|
Можно делать так:
в Flash внедрить шрифты, экспортировать каждый по 2 раза, наследуя от mx.core.FontAsset и flash.text.Font, называя соответственно "MyFontFlex" и "MyFont" Пытаемся зарегистрировать сначала один, в случае неудачи второй: Код AS3:
Код AS3:
|
| Часовой пояс GMT +4, время: 14:46. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.