|
|
|||||
Цитата:
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
dimarik, а можно поподробнее? У меня не получается без регистрации, даже если гружу в ApplicationDomain.currentDomain.
То есть вот так работает: (SWF со шрифтом, Fonts это класс Документа) package { import flash.display.Sprite; import flash.text.Font; public class Fonts extends Sprite { [Embed(source='../lib/consola.ttf', fontName="consola")] public const CONSOLA:Class; public function Fonts() { Font.registerFont(CONSOLA); } } } package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.system.LoaderContext; import flash.text.Font; import flash.text.TextField; import flash.text.TextFormat; public class Main extends Sprite { public function Main():void { var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); loader.load(new URLRequest("consola.swf"), context); } private function onComplete(event:Event):void { trace(Font.enumerateFonts()); // [object Fonts_CONSOLA] var format:TextFormat = new TextFormat("consola", 16); var txt:TextField = new TextField(); addChild(txt); txt.embedFonts = true; txt.defaultTextFormat = format; txt.width = 400; txt.text = "I'm your Consola Font!" } } }
__________________
Reality.getBounds(this); |
|
|||||
Цитата:
что-то я в конец запутался! Мне просто нужно создать в проекте выпадающий список в котором будет возможность выбрать шрифт для текстового поля. Шрифтов заказчик хочет порядка 100, поэтому боюсь как бы swf из-за этого не стал размером эдак 50 мб! Ещё и хочет чтобы потом их можно было убирать/добавлять через админку без перекомпиляции.(Делаю редактор футболок) Как бы вы реализовали эту задачу? Чтобы шрифты не увеличивали объём проекта и чтобы их потом можно было заменять без перекомпиляции? На счёт первого я думал что оптимальным вариантом будет создать для каждого шрифта отдельную флешку которую подгружать при клике в выпадающем списке. Но тут возникает некоторая проблема - смотрел примеры таких редакторов и там в выпадающем списке текст написан тем шрифтом который выбираешь, конечно можно просто проэмбедить нужные символы, а весь список уже загружать по одному как написал ранее, но может ещё какойто способ подскажете? А по поводу без перекомпиляции - я пока вообще не представляю, можно ли это сделать? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Нельзя. SWF вообще не содержит файл шрифта, когда Вы его внедряете. Компиллятор делает из файла (TTF например) особый ресурс в виде векторных картинок-глифов и минимальной информацией. Получить из свфки исходный шрифт как он был до компиляции невозможно – его уже нет. Другими словами, загрузить файл шрифта в скомпиленную свфку можно, но для плеера это не будет шрифтом, плеер не понимает форматы шрифта, даже device fonts отображает не плеер, а система. Плеер умеет работать только с тем внутренним форматом, который создает компилятор. Вывод - компилировать свфки с внедренным шрифтом придется. Другое дело, что это можно автоматизировать, создавая их на сервере с помощью РНР-модуля, так что заказчику останется лишь загружать шрифты через CMSку. Также РНР мог бы делать превьюшки с нужным текстом и регистрировать это все в XML (к примеру). Тогда в списке шрифтов Вы показываете превьюшки и по клику загружаете нужный SWF со шрифтом... Ну я так это вижу.
__________________
Reality.getBounds(this); |
|
|||||
.
|
Wolsh, необходимо создавать текстовое поле в контексте Fonts.
public class Fonts extends Sprite { public function createMethod(c:Class):Object { return new c(); } } public class Main extends Sprite { /** * Это обработчик Event.COMPLETE лоадера, загрузившего Fonts.swf */ private function handler_loadComplete(event:Event):void { const li:LoaderInfo = event.target as LoaderInfo; const textField:TextField = (li.content as Object).createMethod(flash.text.TextField) as TextField; const textFormat:TextFormat = textField.defaultTextFormat; textFormat.font = "consola"; textField.embedFonts = true; textField.defaultTextFormat = textFormat; textField.text = "Consola Font!"; } } |
|
|||||
Регистрация: Feb 2006
Адрес: Moscow
Сообщений: 552
|
Создавать объекты через метод другого класса… извращение какое-то
__________________
Учимся правильно задавать вопросы |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Цитата:
http://en.wikipedia.org/wiki/Factory_method_pattern PS: правда когда в с++ детектор утечек памяти показывает в фабричный метод и нету стека, то приходится чесать репу %)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
dimarik, спасибо, работает. Правда, нет возможности получить список доступных шрифтов, но для случая с одним семейством в одном swf-файле можно сделать публичные константы, рассказывающие об имени семейства, наличии начертаний и формате (CFF или олдовый). В принципе, небольшая плата за возможность выгружать лишние мегабайты, когда пользователь решит креативить с другим шрифтом.
__________________
Reality.getBounds(this); |
|
|||||
блин, что не делаю никак не работает!(((
пишет ошибку после загрузки ролика! хотя она там есть package { import flash.display.Sprite; import flash.events.Event; /** * ... * @author Andrey */ public class Main extends Sprite { [Embed(source='../lib/fonts/Asian Guy.ttf', fontName = 'AsianGuy', mimeType = 'application/x-font-truetype', embedAsCFF = 'false')] public static var AsianGuy:Class; public function Main():void { trace("Asian 123"); } } } Wolsh, при использовании вашего способа у меня вылазит таже ошибка! |
Часовой пояс GMT +4, время: 08:41. |
|
« Предыдущая тема | Следующая тема » |
|
|