Форум 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=153273)

DZHETIGAPA 31.03.2011 03:22

Программная встройка шрифта
 
Встраиваю шрифт во FD. Делаю так:
Код AS3:

[Embed(source = '../lib/MyriadPro-Regular.otf', fontName = "MyriadPro")]
                static public var fontClass:Class;
 
                static public function get myriadFont():Font
                {
                        Font.registerFont(Lib.fontClass)
                        return (new Lib.fontClass() as Font)
                }

Затем присваиваю этот шрифт:
Код AS3:

tFormat.font = Lib.myriadFont.fontNameж
t.defaultTextFormat = tFormat;

Но ничего не меняется? В чем дело?

in4core 31.03.2011 04:15

Дело в шляпе.
use it

Код AS3:

package com.in4core.utils 
{
        /**
        * ...
        * @author in4core
        */

        public class FontAssets
        {
 
                /*public static const LOWERCASE_SWEDISH_CHARS:String    = "U+00E5, U+00E4, U+00F6, U+00E9";
                public static const UPPERCASE_SWEDISH_CHARS:String    = "U+00C5, U+00C4, U+00D6, U+00C9";
                public static const NUMBER_CHARS:String                  = "U+0030-U+0039";
                public static const UPPERCASE_A_TO_Z:String                = "U+0041-U+005A";
                public static const LOWERCASE_A_TO_Z:String              = "U+0061-U+007A";
                public static const PUNCTUATION:String                    = "U+005B-U+0060";
                public static const STANDARD_SWEDISH:String          = LOWERCASE_A_TO_Z + ", " + UPPERCASE_A_TO_Z + ", "
                + LOWERCASE_SWEDISH_CHARS + ", " + UPPERCASE_SWEDISH_CHARS + ", " + NUMBER_CHARS + ", " + PUNCTUATION;*/

 
 
                [Embed(source = '../../../iFlash705.ttf', fontName = 'f_1'
                ,fontFamily  = "iFlash"
                ,fontStyle  ='normal'
                ,fontWeight  = 'normal'
                ,mimeType = "application/x-font-truetype"
                ,embedAsCFF = 'false')]
                public static const i705:Class;
 
                [Embed(source = '../../../iFlash705b.ttf', fontName = 'f_2'
                ,fontFamily  = "iFlash"
                ,fontStyle  ='normal'
                ,fontWeight  = 'bold'
                ,mimeType = "application/x-font-truetype"
                ,embedAsCFF = 'false')]
                public static const i705b:Class;
 
                [Embed(source = '../../../iFlash705Mono.ttf', fontName = 'f_3'
                ,fontFamily  = "iFlash"
                ,fontStyle  ='normal'
                ,fontWeight  = 'normal'
                ,mimeType = "application/x-font-truetype"
                ,embedAsCFF = 'false')]
                public static const i705m:Class;
 
                [Embed(source = '../../../3593.ttf', fontName = 'f_4'
                ,fontFamily  = ""
                ,fontStyle  ='normal'
                ,fontWeight  = 'normal'
                ,mimeType = "application/x-font-truetype"
                ,embedAsCFF = 'false')]
                public static const ver:Class;
 
        }
 
}

Код AS3:

package com.in4core.text 
{
        import flash.text.TextField;
        import flash.text.TextFormat;
        /**
        * ...
        * @author in4core
        */

        public class DisplayText extends Object
        {
                private static var _textfield:TextField;
 
 
                public static function registerFontsLibraries(fontAssets:Class)  : void
                {
                        fontAssets;
                }
                public static function addField ( font:String = null , size:uint = 12, bitmapFonts:Boolean = false,
 
                autosize:String = 'left', isMulti:Boolean = false, text:String = '' ) : TextField
 
                {
                        _textfield = null;
 
                        _textfield = new TextField();
 
                        _textfield.defaultTextFormat = setFormat(size, font);
 
                        _textfield.autoSize = autosize;
 
                        _textfield.text = text;
 
                        if (isMulti) _textfield.multiline = true;
 
                        _textfield.selectable = false;
 
                        if (!bitmapFonts) _textfield.antiAliasType = 'advanced';
 
                        if (font != null) _textfield.embedFonts = true;
                        else font = '_sans';
 
                        return _textfield;
                }
 
                private static function setFormat( size:uint, font:String ):TextFormat {
 
                        var tf:TextFormat = new TextFormat();
 
                        tf.size = size;
 
                        tf.font = font;
 
 
 
                        return tf;
                }
 
        }
 
}

Подстрой под себя и пользуйся)) Это просто пример, как использую я

Код AS3:

DisplayText.registerFontLibraries(FontAssets);
 
var tf:TextField = DisplayText.addField('f_1' , 10 , false )
tf.text = 'text';
tf.textColor = 0xFF0000


olexandr 31.03.2011 05:32

недостаточно данных для выяснения причины
может быть, вы банально, embedFonts не выставили у TextField

GBee 31.03.2011 10:59

Цитата:

Код AS3:

static public function get myriadFont():Font
                {
                        Font.registerFont(Lib.fontClass)
                        return (new Lib.fontClass() as Font)
                }


плохой геттер. При вызове всегда создается новый экземпляр Font. И вы используете его, только для получения имени. Имя можно вытянуть из Font.enumerateFonts(false) или как-то так.


Цитата:

Дело в шляпе.
use it
Жестко, шведские символы, как мне создать текст с жирным италиком?

Hauts 31.03.2011 11:30

Вопрос не по теме: как правильнее назвать функцию — "registerFontsLibraries" или "registerFontLibraries" (без "s")?

in4core, у вас вообще и так и так используется, опечатка.

DZHETIGAPA 31.03.2011 12:05

Цитата:

Сообщение от olexandr (Сообщение 985315)
недостаточно данных для выяснения причины
может быть, вы банально, embedFonts не выставили у TextField

Мда... в этом и было дело. Просто программно шрифты в первый раз внедрял. Поэтому и возникли проблемы.

Всем спасибо!!!

etc 31.03.2011 12:48

Цитата:

Сообщение от Hauts (Сообщение 985349)
Вопрос не по теме: как правильнее назвать функцию — "registerFontsLibraries" или "registerFontLibraries" (без "s")?

in4core, у вас вообще и так и так используется, опечатка.

Более того, метод вообще ничего не делает.

Hauts 31.03.2011 12:50

etc, а если бы делал, то как правильнее назвать?

etc 31.03.2011 12:52

registerFontLibraries

Но у меня бы такого метода в принципе не было бы.

gloomyBrain 31.03.2011 14:35

хм... А есть какой-нибудь способ
1) создать динамическое текстовое поле в Flash CSx
2) указать на панели свойств: шрифт, тип сглаживания, полужирный/курсив, размер и выравнивание для него
3) не внедрять этот шрифт в Flash CSx, а вместо этого
4) загрузить этот шрифт в рантайме
5) когда шрифт загружен и зарегистрирован - вывести текст в заранее созданном в CSx поле.

Цель в том, чтобы не прописывать параметры шрифта вручную, а просто получить ссылку на поле и прописать ему embedFonts = true. Соответственно, когда у нас все шрифты загружены, все должно отображаться.

Сейчас попробовал - не получается =(


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

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