Пробую запустить программу Korchy по внедрению шрифтов.
Создал файл Font1.fla, в котором вот такие настройки:
PROPERTIES:
LINKAGE:
Далее, создал файл класса, который он привел в своем блоге, подставив имена, а также оставив только одну строку с регистерфонт:

Код AS3:
package
{
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.net.URLRequest;
import flash.text.Font;
public class FontsManager extends EventDispatcher
{
private var FontsLoader:Loader;
private var FontsLoaderInfo:LoaderInfo;
private var FontsLoaded:Boolean;
// Константы событий
public static const FONTS_LOADED:String = "EvFontsLoaded"; // шрифт загружен
public function FontsManager()
{
// Конструктор
super();
FontsLoaded = false;
}
public function LoadFontsFromExternalSWF(Value:String):void
{
// Загрузить swf со шрифтами
if (FontsLoaded == false)
{
FontsLoader = new Loader();
FontsLoaderInfo = FontsLoader.contentLoaderInfo;
FontsLoaderInfo.addEventListener(Event.COMPLETE, OnFontsLoaded);
FontsLoader.load(new URLRequest(Value));
}
}
private function OnFontsLoaded(e:Event):void
{
// SWF со шрифтами загружена
if(FontsLoaded==false)
{
Font.registerFont(Class(LoaderInfo(e.target).applicationDomain.getDefinition("CyrillicHover")));
// Font.registerFont(Class(LoaderInfo(e.target).applicationDomain.getDefinition("FontName1Italic")));
// Font.registerFont(Class(LoaderInfo(e.target).applicationDomain.getDefinition("FontName1Bold")));
// Font.registerFont(Class(LoaderInfo(e.target).applicationDomain.getDefinition("FontName2")));
FontsLoaded = true;
FontsLoaderInfo.removeEventListener(Event.COMPLETE, OnFontsLoaded);
dispatchEvent(new Event(FontsManagerVn.FONTS_LOADED));
}
}
public static function CorrectFontName(vFontName:String, vFontSize:uint=12):String
{
// Проверка, есть ли такой встроенный (загруженный из сторонней SWF) шрифт заданного размера
// если есть - возвращает его имя, если нет - возвращает исходное имя шрифта
var EmbeddedFonts:Array = Font.enumerateFonts(false);
for (var i:uint = 0; i < EmbeddedFonts.length; i++)
{
if (Font(EmbeddedFonts[i]).fontName == vFontName + "_" + String(vFontSize) + "pt_st")
{
return vFontName + "_" + String(vFontSize) + "pt_st";
}
}
return vFontName;
}
}
}
Далее сделал основной класс, в котором ввёл такой код:

Код AS3:
package
{
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.text.*;
public class Runtime_font_embed extends MovieClip
{
public function Runtime_font_embed()
{
var MyFontsManager:FontsManager = new FontsManager();
MyFontsManager.addEventListener(FontsManager.FONTS_LOADED, Continue);
MyFontsManager.LoadFontsFromExternalSWF("Font1.swf");
var text1 = new TextField();
var format1 = new TextFormat();
format1.font = FontsManager.CorrectFontName("CyrillicHover", 30);
text1.setTextFormat(format1);
}
}
}
И в результате выполнения получаю:
Цитата:
|
1120: Access of undefined property FontsManagerVn. dispatchEvent(new Event(FontsManagerVn.FONTS_LOADED));
|
(Думал, может проблема в именах, поигрался с заменой Name1 на CyrillicHover и обратно, но нифига.)
Что не так с этим FontsManagerVn?