![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Бьюсь над этим уже довольно долго, поэтому решил написать сюда т.к. собственные идеи иссякли. Я делаю приложение в котором пользователь может задавать шрифт текста выбирая его из комбобокса. Каждый шрифт подгружается в виде отдельной SWF, в которую он заэмбедден следующим образом:
package { import flash.display.MovieClip; public class Journal extends MovieClip { [Embed(source = "Journal/JournalC.otf", fontName="JournalC", fontStyle="normal", fontWeight="normal", mimeType="application/x-font", advancedAntiAliasing="true", embedAsCFF="false")] public var JournalC:Class; [Embed(source = "Journal/JournalC-Bold.otf", fontName="JournalC", fontStyle="normal", fontWeight="bold", mimeType="application/x-font", advancedAntiAliasing="true", embedAsCFF="false")] public var JournalCBold:Class; [Embed(source = "Journal/JournalC-Italic.otf", fontName="JournalC", fontStyle="italic", fontWeight="normal", mimeType="application/x-font", advancedAntiAliasing="true", embedAsCFF="false")] public var JournalCItalic:Class; public function Journal() { Font.registerFont (JournalC); Font.registerFont (JournalCBold); Font.registerFont (JournalCItalic); } } } fontsLoader = new Loader (); fontsLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, fontLoaded); fontsLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOERROR); // это естественно в цикле var path:String = Global.URL_PATH + Global.FONTS_PATH + fontsInfo.fonts.font[fontsCounter].lib.@src; fontsCounter++; fontsLoadedPathes.push(path); var context:LoaderContext = new LoaderContext(); //context.securityDomain = SecurityDomain.currentDomain; context.applicationDomain = ApplicationDomain.currentDomain; fontsLoader.load(new URLRequest(path), context); //здесь обрабатывается событие загрузки private function fontLoaded(ev:Event):void { var target:LoaderInfo = ev.target as LoaderInfo; var mc:MovieClip = target.content as MovieClip; fonts.push(mc); addChild(mc); } Загружаю флешку на сервер (тот же домен, где лежат и SWFки со шрифтами), запускаю флешку с сайта - все работает, НО ТОЛЬКО НА МОЕЙ МАШИНЕ!! Если же зайти на сайт с любого другого компа, текст при переключении шрифта пропадает. Сперва я подумал. что это проблемы с безопасностью, песочницами, ApplicationDomain и тому подобным. Но вдумчивое изучение доков на эту тему ничего не дало, ведь все грузится с одного домена. Буду благодарен за помощь, если кому то нужна ссылка на приложение, дам в личку. |
|
|||||
|
забыл сказать - я это делал, локально загружаемые шрифты не выводятся, с севера вывожу фонтлист в консоль, вижу все загруженные шрифты. На других машинах посмотреть с сервера список шрифтов пока нет возможности, но я думаю результат будет очевиден. Найти корень проблемы мне это не помогло.
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
__________________
Reality.getBounds(this); |
|
|||||
|
Wolsh, спасибо за помощь, но эту ветку я внимательно читал и перечитывал еще когда организовывал смену шрифтов, ни нашел там ничего, что помогло бы мне решить проблему, хотя конечно экспериментировать я продолжу, в том числе и с рецептами описанными там.
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
1. Не хочу обидеть, но действительно самая распространенная ошибка — забыть указать текстовому полю embedFonts = true; Обязательно проверьте.
2. Попробуйте регистрировать шрифты не в конструкторе, а "после", отдельным методом.
__________________
Reality.getBounds(this); |
|
|||||
|
[+4 06.05.14]
|
Да ни нужно ниче регестрировать вообще.
Есть флешка в айде рисуем так текстовое поле, делаем нужный формат, встриваем символы. Далее грузим ( и даже на сцену добавлять не надо ) - все шрифты на месте. package com.in4core.edenSite.utils { import flash.text.Font; /** * ... * @author in4core lab */ public final class FontManager { public static const SharedLibrary:SharedFonts = new SharedFonts(); public static function getFontsListing():void { var fontsListing:String=""; var fontArray:Array = Font.enumerateFonts(false); fontArray.sortOn(['fontName']); for (var i:int = 0; i < fontArray.length; i++) { var thisFont:Font = fontArray[i]; fontsListing += thisFont.fontName+ " " + thisFont.fontStyle +"\n"; } trace('Shared fonts : \n' + fontsListing + '---------------'); } } } Тут тупо инициализация для embed В ваше случае будет инициализатором просто лоадер
__________________
Марк Tween |
|
|||||
|
Спасибо всем за помощь. embedFonts = true; - стоит, я тоже об этом сперва подумал. Добрался до машины, на которой проверил трейсы фонтлиста с сервера - все шрифты выводятся, возможно проблема и не в этом. Так что буду ковыряться :-)
Добавлено через 14 часов 26 минут после некоторых манипуляций с кодом обнаружил, что если закомментировать строчку embedFonts = true; шрифты показываются как надо (но они у меня установлены в системе, поэтому это не удивительно). Если оставить эту строчку шрифты не показываются ни локально ни с сервера НО список зарегистрированных шрифтов показывает что нужные шрифты зарегистрированы в системе!!!! В консоли видно, что шрифт присваивается текстформату, а тот в свою очередь присваивается текстфилду, т.е. каких то сторонних проблем по присвоению шрифта в ходе исполнения кода нет. Добавлено через 14 часов 55 минут нет, соврал. Трейсы приходят из подгружаемых флешек. Шрифты из фонт листа главной флешки показывают что нужные шрифты не заэмбедены. Добавлено через 15 часов 10 минут похоже проблема с SWF со шрифтами попробую перекомпилить в чем нибудь |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|