Показать сообщение отдельно
Старый 02.11.2011, 03:39
ded100let вне форума Посмотреть профиль Отправить личное сообщение для ded100let Найти все сообщения от ded100let
  № 1  
Ответить с цитированием
ded100let

Регистрация: Mar 2009
Сообщений: 30
По умолчанию Подгрузка шрифта из внешнего .swf. Не выводит кириллицу

всем привет.

сразу хочу сообщить, что пользовался поиском, но после двух дней решил сдаться и спросить.

В стадии обучения решил потренироваться подгружать шрифты из внешних swf. Вшнешний swf скомпилирован из пустого fla файла, в библиотеке которого пролинкованый шрифт. Шрифт обычный Arial. Подгружаю шрифт, регистрирую, подставляю и трындец... латинские символы на ура, а кириллица не выводится. Текст "забит" прямо в as файл и посему исключаю недоразумения с кодировками.

главный класс:
Код AS3:
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);
 	 	}
 	}
}
класс загрузки шрифтов:
Код AS3:
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;
 	 	}
 	}
}
Работаю в Flash CS3 и варианты с embed тегом не выходят. ОС Макинтош, шрифты стандартные.
Трэйс выводит:
loading
0) name: Arial typeface: bold

при t.embedFonts = false; всё отображается как нужно, но ведь это не выход из положения. Интересуют все возможные варианты вплоть до редактирования шрифтов. Учусь так сказать