Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   embed-шрифты в подгружаемых swf (http://www.flasher.ru/forum/showthread.php?t=181432)

Monade 2 22.06.2012 23:18

embed-шрифты в подгружаемых swf
 
здравствуйте, есть вопрос.

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

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

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

PainKiller 23.06.2012 00:34

Можно. Эмбедите во флешку шрифт(ы) таким образом:
Код AS3:

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);
                        }
                }
        }
 
}

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

 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" и написал в кадре :) :
Код AS3:

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

Это очевидно. Этого нужно избегать.


Часовой пояс GMT +4, время: 16:40.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.