Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Embed шрифта в часто используемом классе (http://www.flasher.ru/forum/showthread.php?t=180367)

Sintesis 01.06.2012 17:15

Embed шрифта в часто используемом классе
 
Вот если у меня есть клас в который я передаю строку и координаты расположения, а он создаёт текст и я часто использую этот класс в проекте, но в этом классе есть Embed шрифта, это значит - когда я создаю новый экземпляр то текст опять встраивается во флешку? Каким способом этого лучше избежать? Может какой нибудь паттерн, например одиночка может спасти или кто как делает?

in4core 01.06.2012 17:21

А зачем каждый раз в классе генерить шрифт? Когда достаточно создать какой нить SharedFonts классю В него вписать ВСЕ ембеды, а в мейне написать SharedFonts; и все?

Sintesis 01.06.2012 17:51

пробовал так, вот например класс с форматами, пусть там пока один:
Код AS3:

package src.control{
        import flash.text.TextFormat;
 
        /**
        * ...
        * @author Sintesis
        */

        public class SharedFonts {
 
                [Embed(source = "Arial_Narrow.ttf", fontName = "Arial Narrow", embedAsCFF="false", fontStyle="smooth", mimeType = "application/x-font")]
                private var ArialNarrow:Class;
 
                public function SharedFonts() {
 
                }
 
                public function getFormat01():TextFormat {
 
                        var format01:TextFormat = new TextFormat();
            format01.color = 0xffffff;
            format01.size = 16;
            format01.font = "Arial Narrow";
                        return format01;
                }
        }
}

но при его вызове вылетает ошибка Ambiguous reference to SharedFonts_ArialNarrow.
почему имя класса встроеного шрифта присоединяется к классу в который встраиваю?

in4core 01.06.2012 17:57

Код AS3:

[Embed(source="../someFont.ttf", 
    fontName = "myFont",
    mimeType = "application/x-font",
    fontWeight="normal",
    fontStyle="normal",
    unicodeRange="englishRange",
    advancedAntiAliasing="true",
    embedAsCFF="false")]
private var myEmbeddedFont:Class;

Добавлено через 1 минуту
Покажите что вы делаете. Пока я вижу только начинку класса. этого мало. И уберите формат пока что. Шаред только для встройки стоит делать , понятнее будет и вам

Sintesis 01.06.2012 18:29

Так всё заработало, класс текста который использовал был унаследован от TextField, унаследовал от Sprite и всё пошло. Не знаю хороший ли выход? Просто нужен класс который можно использовать так
Код AS3:

var form:SharedFonts = new SharedFonts();
                        var text:Text = new Text("мой текст...", form.format01());
                        text.textPosition(20, 200);
                        objMenu.addChild(text);

вот он работает:
Код AS3:

package src.control{
        import flash.display.Sprite;
        import flash.text.TextField;
        import flash.text.TextFieldAutoSize;
        import flash.text.TextFormat;
 
 
        public class Text extends Sprite {
 
 
 
                private var menuText:TextField;
 
                public function Text(_text:String, _format:TextFormat) {
 
                        menuText = new TextField();
                        menuText.autoSize = TextFieldAutoSize.LEFT;
                        menuText.defaultTextFormat = _format;
                        menuText.embedFonts = true;
            menuText.selectable = false;
                        menuText.text = _text;
                        addChild(menuText);
                }
 
                public function textPosition(_textX:Number, _textY:Number):void {
 
                        menuText.x = _textX;
                        menuText.y = _textY;
                }
        }
}

Но хотелось, что-б он был унаследован не от Спрайт, а от ТекстФтлд например(

in4core 01.06.2012 18:33

Ну блин же, не так это делается а вот так

Код AS3:

class SharedFonts ( начинка только эмбед, и ни от чего не расширяем. В main чтобы классс вкомпилися пишем просто SharedFonts; ВСЕ круто )
class DisplayText(...rest) форматы и прочее + создание текстовых поле, статичный класс.
 
private var _textField:TextField = DisplayText.addField('sharedFontName',14,'left');
addChild(_textField)


Sintesis 01.06.2012 18:41

а DisplayText это что за класс? Расширенный TextField?

in4core 01.06.2012 18:49

Нет. просто приватные поля. Не расширяется ни от чего

Добавлено через 1 минуту
Код 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 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;
                }
 
        }
 
}


Sintesis 01.06.2012 18:57

А это, объект с текстфилдами, хорошо, нужно попробовать, спасибо!

in4core 01.06.2012 19:04

Ну объект это так чисто для красоты. Любой класс он же от объекта наследуется по факту, поэтому я иногда пишу, а так можно было бы и без всего писать разницы никакой


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

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