всем привет.
сразу хочу сообщить, что пользовался поиском, но после двух дней решил сдаться и спросить.
В стадии обучения решил потренироваться подгружать шрифты из внешних 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; всё отображается как нужно, но ведь это не выход из положения. Интересуют все возможные варианты вплоть до редактирования шрифтов. Учусь так сказать
