Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Внедрение шрифта (http://www.flasher.ru/forum/showthread.php?t=176373)

FriOne 08.03.2012 17:37

Внедрение шрифта
 
Внедряю шрифт через один класс, использую его в классе, содержащем static константы,
Далее передаю через метод текстовые форматы в класс, поле не отображается.
В классе создается новое поле ему задается формат. Причем в другом классе, подгружаю swf'ку, использую этот же текстовый формат, текст отображается.
Использую SDK 4.6, в Embed шрифта стоит параметр embedAsCFF = 'false'. Вообщем вот:
Код AS3:

[Embed(source = "../../fonts/verdana.ttf", embedAsCFF = 'false', fontName = "verdana", fontStyle = "regular", fontWeight = "normal", mimeType = "application/x-font-truetype")]
private const VERDANA_NORMAL:Class;

Форматы:
Код AS3:

public class TextFormatManager 
{
        public static const textHint:TextFormat = new TextFormat(EmbedFont.VERDANA, 14, 0xffce60, false, false, false, null, null, TextFormatAlign.CENTER);
}

Ну и поля, метод:
Код AS3:

public function setTextFormats(upFormat:TextFormat, overFormat:TextFormat):void
{
        _upField.embedFonts = true;
        _upField.defaultTextFormat = upFormat;
        _overField.embedFonts = true;
        _overField.defaultTextFormat = overFormat;
}

Подскажите какие могут быть причины.

КорДум 08.03.2012 17:43

Вот так точно работает:
Код AS3:

public class TahomaFont {
        [Embed(source = "../../../../lib/TAHOMA.TTF", fontName = "Tahoma",
        mimeType = "application/x-font", advancedAntiAliasing="true", embedAsCFF="false")]
        private var font:Class;
 
        public static const NAME:String = "Tahoma";
}


FriOne 08.03.2012 17:49

Вообще класс выглядит так и не работает.. точнее не везде работает.
Код AS3:

public class EmbedFont extends Sprite 
{
        public static const VERDANA:String = "verdana";
 
        //normal
        [Embed(source = "../../fonts/verdana.ttf", embedAsCFF = 'false', fontName = "verdana", fontStyle = "regular", fontWeight = "normal", mimeType = "application/x-font-truetype")]
        private const VERDANA_NORMAL:Class;
        //bold
        [Embed(source = "../../fonts/verdanab.ttf", embedAsCFF = 'false', fontName = "verdana", fontStyle = "regular", fontWeight = "bold", mimeType = "application/x-font-truetype")]
        private const VERDANA_BOLD:Class;
        //italic
        [Embed(source = "../../fonts/verdanai.ttf", embedAsCFF='false', fontName = "verdana",  fontStyle = "italic", fontWeight = "nolmal", mimeType = "application/x-font-truetype")]
        private const VERDANA_ITALIC:Class;
        //bold/italic
        [Embed(source = "../../fonts/verdanaz.ttf", embedAsCFF='false', fontName = "verdana",  fontStyle = "italic", fontWeight = "bold", mimeType = "application/x-font-truetype")]
        private const VERDANA_BOLD_ITALIC:Class;
 
        public function EmbedFont()
        {
                Font.registerFont(VERDANA_NORMAL);
                Font.registerFont(VERDANA_BOLD);
                Font.registerFont(VERDANA_ITALIC);
                Font.registerFont(VERDANA_BOLD_ITALIC);
        }               
}

Класс создается точно перед использованием, не могу найти причины (

Добавлено через 40 минут
Вообщем сделал такой тест:
Код AS3:

public function setTextFormats(upFormat:TextFormat, overFormat:TextFormat):void
{
        _upField.embedFonts = true;
        _upField.defaultTextFormat = upFormat;
        _overField.embedFonts = true;
        _overField.defaultTextFormat = overFormat;
        trace(TextField.isFontCompatible(EmbedFont.VERDANA, FontStyle.REGULAR));
        var embeddedFonts : Array = Font.enumerateFonts(false);
        embeddedFonts.sortOn("fontName", Array.CASEINSENSITIVE);
        trace("\n----- Enumerate Fonts -----");
        for(var i : int = 0;i < embeddedFonts.length;i++) {
                trace(embeddedFonts[i].fontName);
                trace(embeddedFonts[i].fontType);
        }
}

Выдал:
Код:

true

----- Enumerate Fonts -----
verdana
embedded
verdana
embedded
verdana
embedded
verdana
embedded
verdana
embedded
verdana
embedded
verdana
embedded
verdana
embedded

Не понятно почему шрифты идут в двойном количестве, но они встроены!
Поле добавлено на сцену, но то поле, что добавлено в скаченную swf'ку не видно,
а для того, что уже есть в классе применяется и отображается.

Wolsh 08.03.2012 19:52

Цитата:

Не понятно почему шрифты идут в двойном количестве, но они встроены!
Поле добавлено на сцену, но то поле, что добавлено в скаченную swf'ку не видно,
а для того, что уже есть в классе применяется и отображается.
Пожалуйста, переведите на русский. Вообще не понятно, что Вы делаете, что хотите получить и что получается.

Добавлено через 2 минуты
И да, нет смысла постить код который работает и трейсы, показывающие что все ок. Вы не на экзамене. Вам нужно, чтобы ошибка была найдена, а не наоборот.

FriOne 08.03.2012 20:06

Вообщем, мне нужно, чтобы поле отобразилось)
У меня есть класс TextButton, в нем текстовое поле,
я передаю туда текстовый формат и ставлю embed Fonts true.

Шрифт как я понял встаривается, но поле не отображается,
Порылся по статьям, нашел про applicationDomain, но не особо понимаю как это работает.

Вопрос теперь наверно стоит так, может ли повлиять домен на отображение поля?
И как проверить влияет ли домен на это?

Добавлено через 1 минуту
Я гружу из swf'ки класс, текстовое поле в нем принимает мой формат и отображается,
Но я создаю TextButton в этом классе(экземпляре класса), передаю формат и оно не отображается.

Wolsh 08.03.2012 21:11

Уточните.
Цитата:

Я гружу из swf'ки класс
Вы загружаете в текущую свф другой свф-файл. Вытаскиваете из загруженного свф некий класс и создаете его экземпляр - в текущей свф или в загруженной?
Далее - в этом классе создается текстФилд, который отображает шрифт, внедренный в текущем свф. Но создаваемый в этом экземпляре буттон не показывает в своем лейбел этот внедренный шрифт?
p.S. Бердск? Привет, земляк))))

FriOne 08.03.2012 21:24

Эм.. запутался) Гружу свф, в нем мувик вообщем,
в этом мувике текстовое поле, которое принимает формат,
в этот же мувик я добавляю textButton.
Текущая свф - та что главная? Юзаю, готовый класс загрузчик, так что куда что он грузит мало понимаю)
P.S. Дааа! Привет!!))

Wolsh 08.03.2012 21:31

Цитата:

Эм.. запутался)
А отсюда вообще ничего непонятно. где класс, где шрифт, где кнопка, кто создает, в ком создает... полный хаос.
Сам Класс TextButton находится в главной флэшке?
Шрифт внедрен в главную флэшку?
Экземпляр TextButton создается в главной флэшке и потом помещается в загруженную?
ИЛИ
Сам Класс TextButton находится в загружаемой флэшке?
Экземпляр создается и размещается в загружаемой флэшке, но пытается использовать шрифт, который внедрен в главную флэшку?
Попробуй такими словами рассказать))

dimarik 08.03.2012 21:32

Ясен красен. Контекст-то (application domain) не тот, в котором есть шрифт. Сделайте Font.registerFont для глобальной области видимости шрифта.

Вот тут обсуждали.

FriOne 08.03.2012 21:42

Рад что проблема все таки в этом)
Объект EmbedFont создается в main, там создается загрузчик,
грузит, тут же в main делю полученный мувик, отдаю однин мувик в класс Preloader,
этот мувик и есть тот в который я сую TextButton и в котором находится поле, в котором отображается текст.

Загрузчик какой-то замудренный.. есть такой коммент там, незнаю, мб прояснит что-то:
Код:

/**
 * домен приложения, содержащего классы (для экспорта классов)
 * если swf содержат классы он помещается в новый домен приложения,
 * в противном случае в дочерний домен приложения
 */
private var _appDomain:ApplicationDomain;



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

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