![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 30
|
всем привет.
сразу хочу сообщить, что пользовался поиском, но после двух дней решил сдаться и спросить. В стадии обучения решил потренироваться подгружать шрифты из внешних swf. Вшнешний swf скомпилирован из пустого fla файла, в библиотеке которого пролинкованый шрифт. Шрифт обычный Arial. Подгружаю шрифт, регистрирую, подставляю и трындец... латинские символы на ура, а кириллица не выводится. Текст "забит" прямо в as файл и посему исключаю недоразумения с кодировками. главный класс: package { import flash.display.Sprite; import flash.text.*; import flash.events.*; public class Main extends Sprite { var t:TextField = new TextField(); var f = new TextFormat(); public function Main() { var font = new LoadFont("Font.swf",["Symbol1"]); font.addEventListener(LoadFont.COMPLETE, successLoadFont); font.addEventListener(LoadFont.ERROR, failLoadFont); } private function failLoadFont(e:Event){ f.font = "Arial"; t.embedFonts = false; post(); } private function successLoadFont(e:Event){ var embeddedFonts:Array = Font.enumerateFonts(false); f.font = embeddedFonts[0].fontName; t.embedFonts = true; post(); var fontArray:Array = Font.enumerateFonts(false); for(var i:int = 0; i < fontArray.length; i++) { var thisFont:Font = fontArray[i]; trace(i+") name: " + thisFont.fontName +" typeface: " + thisFont.fontStyle); } } public function post(){ f.size = 36; t.defaultTextFormat = f; t.x = 100; t.y = 100; t.background = true; t.autoSize = TextFieldAutoSize.CENTER; t.text = "Это тестовый текст"; addChild(t); } } } package { import flash.display.*; import flash.events.*; import flash.text.*; import flash.errors.*; import flash.system.*; import flash.net.*; public class LoadFont extends EventDispatcher { public static const COMPLETE:String = "complete"; public static const ERROR:String = "error loading font"; private var loader:Loader = new Loader(); private var _fontsDomain:ApplicationDomain; private var _fontName:Array; public function LoadFont(url:String,fontName:Array):void { _fontName = fontName; trace("loading"); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, font_ioErrorHandler); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,finished); loadAsset(url); } private function loadAsset(url:String):void { var request:URLRequest = new URLRequest(url); loader.load(request); } function finished(evt:Event):void { _fontsDomain = loader.contentLoaderInfo.applicationDomain; registerFonts(_fontName); dispatchEvent(new Event(LoadFont.COMPLETE)); } function font_ioErrorHandler(evt:Event):void { dispatchEvent(new Event(LoadFont.ERROR)); } public function registerFonts(fontList:Array):void { for (var i:uint = 0; i < fontList.length; i++) { Font.registerFont(getFontClass(fontList[i])); } } public function getFontClass(id:String):Class { return _fontsDomain.getDefinition(id) as Class; } public function getFont(id:String):Font { var fontClass:Class = getFontClass(id); return new fontClass as Font; } } } Трэйс выводит: loading 0) name: Arial typeface: bold при t.embedFonts = false; всё отображается как нужно, но ведь это не выход из положения. Интересуют все возможные варианты вплоть до редактирования шрифтов. Учусь так сказать ![]() |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Так а в файле со шрифтом, для этого шрифта указан диапазон, включающий кириллицу?
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 30
|
в CS3, на сколько я знаю нет такой функции или я ошибаюсь? Знаю, что есть возможность указать диапазон для конкретного текстового поля.... Пробывал создавать текстовое поле, задавать в нем диапазон символов (кирилица и цифры) и без результата.... Выводит только латиницу. Пробовал "ковыряться" в файле шрифта и удалить всё не нужное.... оставил только цифры и кириллицу. В итоге текст кириллицей не виден вобще, а текст на латинице выводится квадратами... Даже и не знаю что и делать теперь.
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
1. Перестаньте ковыряться в файлах шрифта, они ни в чем не виноваты.
2. Извините что сомневаюсь в Вашей внимательности, но когда Вы создавали текстовое поле и настраивали диапазон эмбеда, Вы: а) точно использовали то НАЧЕРТАНИЕ, которое нужно, то есть болд, если в библиотеке Arial Bold? А то многие считают, что все начертания шрифта находятся в одном файле, что конечно же не так. б) Вы написали в поле хоть одну букву? Или оставили его пустым?
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 30
|
Загружал Arial, Arial Bold Cyr, Verdana - выводится только латиница. Уже точно не помню, но вроде бы загрузив Tahoma или Times появилась кирилица. Текст в текстовое поле писал и не писал... В обеих случаях одно и тоже.
Добавлено через 27 часов 52 минуты заметил, что если подгружаемый файл запустить во время редактирования, то и в нем не отображается кириллица. Во время редактирования кириллица отображается корректно почти со всеми шрифтами. Может это сам Flash "криво" работает? Есть ли какие-то настройки относительно шрифтов? |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:08. |
|
|
« Предыдущая тема | Следующая тема » |
|
|