PDA

Просмотр полной версии : embed-шрифты в подгружаемых swf


Monade 2
22.06.2012, 23:18
здравствуйте, есть вопрос.

есть "главный" файл swf, который подгружает еще несколько флэшек. в них - динамические текстовые поля. чтобы применить к ним сглаживание текста, флэш настойчиво требует импортировать наверное эти шрифты, ну заэмбедить короче, не знаю как по-русски сказать.

в каждый файл пихать один и тот же шрифт, понятное дело, не с руки. есть ли способы импортировать шрифт один раз (в главный файл или в любой другой) и использовать его в подгружаемых?

заранее спасибо

PainKiller
23.06.2012, 00:34
Можно. Эмбедите во флешку шрифт(ы) таким образом:

package
{

import flash.display.MovieClip;
import flash.system.ApplicationDomain;


public class Agfriquer extends MovieClip
{

[Embed(source = "AG Friquer/AGFriquerC.otf", fontName="AGFriquerC", fontStyle="normal", fontWeight="normal", mimeType="application/x-font", advancedAntiAliasing="true", embedAsCFF="false")]
public var AGFriquerC:Class;

[Embed(source = "AG Friquer/AGFriquerC-Bold.otf", fontName="AGFriquerC", fontStyle="normal", fontWeight="bold", mimeType="application/x-font", advancedAntiAliasing="true", embedAsCFF="false")]
public var AGFriquerCBold:Class;

[Embed(source = "AG Friquer/AGFriquerC-Italic.otf", fontName="AGFriquerC", fontStyle="italic", fontWeight="normal", mimeType="application/x-font", advancedAntiAliasing="true", embedAsCFF="false")]
public var AGFriquerCItalic:Class;

[Embed(source = "AG Friquer/AGFriquerC-BoldItalic.otf", fontName="AGFriquerC", fontStyle="italic", fontWeight="bold", mimeType="application/x-font", advancedAntiAliasing="true", embedAsCFF="false")]
public var AGFriquerCBoldItalic:Class;


public function Agfriquer()
{
Font.registerFont (AGFriquerC);
Font.registerFont (AGFriquerCBold);
Font.registerFont (AGFriquerCItalic);
Font.registerFont (AGFriquerCBoldItalic);
var embeddedFonts:Array = Font.enumerateFonts(false);
for (var i : int = 0; i < embeddedFonts.length; i++)
{
trace(embeddedFonts[i].fontName);
trace(embeddedFonts[i].fontType);
}
}
}

}

Потом грузите её в ту флешку, где будете использовать шрифт таким образом:

var fontsLoader:Loader = new Loader ();
fontsLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, fontLoaded);
fontsLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOERROR);
var context:LoaderContext = new LoaderContext();
context.applicationDomain = ApplicationDomain.currentDomain;
fontsLoader.load(new URLRequest(path), context);

private function fontLoaded(ev:Event):void // срабатывает при загрузке swf со шрифтом
{
var target:LoaderInfo = ev.target as LoaderInfo;
var mc:MovieClip = target.content as MovieClip;
addChild(mc);
}

private function onIOERROR(e:IOErrorEvent):void
{
trace("Загрузка шрифтов не удалась");
}

и все. А вообще вам надо было воспользоваться поиском по форуму таких тем тут много.

Monade 2
23.06.2012, 00:43
спасибо, попробую.

искал по тэгу embed, решения не нашел

Wolsh
23.06.2012, 01:23
Вроде вопрос был с точностью до наоборот..

PainKiller
23.06.2012, 01:25
Да точно :-) но это не сильно дело меняет)

Wolsh
23.06.2012, 02:29
Просто правильный ответ: "Ничего не надо делать". Внедренные шрифты основной флэшки итак доступны в подгруженной.
Впрочем, возможно проблемы есть, когда текстовые поля создаются ручками в IDE, и надо как-то включить полю embedFonts = true и указать шрифт, при этом как-то избежать его внедрения))) Это в коде все просто...

Добавлено через 13 часов 47 минут
Хотя не, никаких проблем. Создал поле, дал имя "txt" и написал в кадре :) :
import flash.text.TextFormat;
txt.embedFonts = true;
txt.defaultTextFormat = new TextFormat("Futura", 14, 0xFF0000);
txt.text = "wow, what a cute Font";
И поле прекрасно отобразило текст после загрузки во флэшку, в которой внедрен и зарегистрирован шрифт с именем "Futura".

dimarik
25.06.2012, 21:21
Вероятно, набор флешек со шрифтами имеет смысл для выборочной загрузки.

Wolsh
25.06.2012, 21:46
Однозначно. Но иногда ситуация обратная — отдельные разделы или страницы сайта выполнены в виде подгружаемых модулей, и действительно нет никакого смысла внедрять в них тот же шрифт, что уже есть в базовом файле.

dimarik
25.06.2012, 21:50
Это очевидно. Этого нужно избегать.