Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как применить загруженый шрифт по всему swf? (http://www.flasher.ru/forum/showthread.php?t=186460)

fduch 03.11.2012 12:29

Как применить загруженый шрифт по всему swf?
 
Как применить загруженый шрифт по всему swf? Не к отдельному TF а ко всем?

Wolsh 03.11.2012 13:13

Пройтись по всем TF и применить к каждому отдельно... Есть другие варианты?

fduch 03.11.2012 14:11

имхо бредовый способ, а если у меня 100500 тф?

iNils 03.11.2012 14:16

Цитата:

Сообщение от fduch (Сообщение 1102667)
а если у меня 100500 тф?

Значит нужно пройтись по 100500 полям.

djyamato 03.11.2012 19:08

Был бы флекс, задача бы решилась 2мя строками кода, а так, я думаю также - пройтись по всем текстфилдам
Ну или Observer + интерфейс с методом смены шрифта, но по сути, это все равно что проходить по всем текстфилдам, только девелоуперу удобнее

Observer
Код AS3:

package classes.managers
{
        import classes.interfaces.IFontChangable;
 
        public class ObserverManager
        {
                protected static var instance:ObserverManager;
 
                protected static var _items:Vector.<IFontChangable>=new Vector.<IFontChangable>();
 
                public static function getInstance():ObserverManager
                {
                        if(!instance)
                        {
                                instance=new ObserverManager();
                        }
                        return instance;
                }
 
                public function subscribe(value:IFontChangable):void
                {
                        _items.push(value);
                }
 
                public function notifyFontChanged(fontName:String):void
                {
                        var i:int;
                        var total:int=_items.length;
                        for(i=0;i<total;i++)
                        {
                                _items[i].changeFont(fontName);
                        }
                }
        }
}

interface
Код AS3:

package classes.interfaces
{
        public interface IFontChangable
        {
                function changeFont(fontName:String):void;
        }
}

потомок текстфилда
Код AS3:

package classes.components
{
        import classes.interfaces.IFontChangable;
 
        import flash.events.Event;
        import flash.text.TextField;
        import flash.text.TextFormat;
 
        public class CustomTextField extends TextField implements IFontChangable
        {
                public function CustomTextField()
                {
                        super();
                }
 
                public function changeFont(fontName:String):void
                {
                        var tf:TextFormat=new TextFormat(fontName);
                        super.setTextFormat(tf);
                }
        }
}

использование
Код AS3:

var customTextField:CustomTextField;
 
                                var i:int;
                                var total:int=15;
                                for(i=0;i<total;i++)
                                {
                                        customTextField=new CustomTextField();
 
                                        someContainer.addChild(customTextField);
                                        ObserverManager.getInstance().subscribe(customTextField);
                                }
 
                                ObserverManager.getInstance().notifyFontChanged("some font name");


expl 03.11.2012 21:33

Цитата:

Пройтись по всем TF
Наверняка у автора найдется пара из всех, которым надо другой формат

Самый надёжный способ - копипаста вызова функции применения формата по всем кускам кода, чем чего-то там циклом рекурсивно делать
Это, конечно, если весь код в руках автора.

Wolsh 03.11.2012 23:48

Вложений: 1
Зачем сразу рекурсивно.. создать свой классик для текста
TextKit.as
Код AS3:

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

        public class TextKit extends TextField
        {
                private static var _fields:Vector.<TextField> = new Vector.<TextField>();
 
                public function TextKit()
                {
                        super();
                        _fields.push(this);
                }
 
                public static function setFont(fontName:String):void
                {
                        for each(var txt:TextField in _fields)
                        {
                                var format:TextFormat = txt.defaultTextFormat;
                                format.font = fontName;
                                txt.defaultTextFormat = format;
                                txt.setTextFormat(format);
                        }
                }
        }
}

Main.as
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.text.TextFormat;
 
        /**
        * ...
        * @author wolsh
        */

        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                        for (var i:uint = 0; i < 10; i++)
                        {
                                var txt:TextKit = new TextKit();
                                txt.defaultTextFormat = new TextFormat("Arial", 21, 0x669966);
                                txt.text = "Text # " + i.toString();
                                super.addChild(txt);
                                txt.x = i * 80;
                                txt.y = 100;
                        }
                        stage.addEventListener(MouseEvent.CLICK, clickHandler);
                }
 
                private function clickHandler(event:MouseEvent):void
                {
                        TextKit.setFont("Courier New");
                }
        }
}

Кликаем:
AutoFormattingInstances.swf   (1.6 Кб)

fduch 04.11.2012 20:05

Мне надо было с двумя разными шрифтами работать.
зафигачил "найти и заменить" к половине ТФов)
Всем спс.


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

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