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

КорДум 21.01.2011 02:46

Элегантно распарсить клип на элементы и отдать полученное
 
Здравствуйте все. Хочется элегантно решить ситуацию:
имеем swc с одним клипом, в нем куча мелких клипов-элементов. Целесообразно ли создавать отдельный класс со статическим (?) методом для парсинга этого клипа на составляющие? И как в таком случае отдавать полученное логике программы?
Был вариант формировать Object, в логике парсить его. Но это двойная работа и, хоть, парсинг самого интерфейса будет сидеть красиво в отдельном не менее красивом классе, парсинг же конечно обджекта кажется каким-то нерациональным и портит всю элегантность. Хотелось бы узнать мнения знающих людей.

nOobCrafter 21.01.2011 03:29

я просто беру инстансы визуальных классов из свц, и скармливаю их некойоболочке, которая сверу накладывает логику.
Код AS3:

                        _view                                 = new Game_View(); // клип из свц
                        addChild(_view);
 
                        _controller                        = new Game_Controller(_view); // класс с логикой
                        _controller.show                = false;

Далее элементы разбираю как удобнее:
Код AS3:

                        _moneyHint                         = _target.getChildByName("moneyHint") as Sprite;
                        _moneyHint.mouseChildren        = false;
                        _moneyHint.mouseEnabled        = false;
                        _moneyHint.alpha                = 0;
-------------------------------------------
                        _money                                = _target.getChildByName("money") as GUI_BaseItem;
                        _money.hint                        = _moneyHint;

зачем вам статика я правда не понял(

КорДум 21.01.2011 03:33

Эм, то есть, мне нужно скормить этот клип "некой оболочке" (судя по всему, как раз тот самый класс-парсер), которая мне все распарсит и наложит сверху логику? Тогда это ведь нагромождение всего в одном классе получается (утрирую, но все же). Или же я не так понял?

nOobCrafter 21.01.2011 03:39

ну его же еще можно разбить, вам же не обязательно в одном классе хранить всю логику элементов? нашли там клип для меню, скормили менюшной логике, а та в свою очередь разобрала все по кнупочкам.
Код AS3:

                public function Game_Controller($target:DisplayObjectContainer) 
                {
                        _target                        = $target;
                        _target.alpha                        = 0;
                        _target.mouseChildren                = false;
                        _target.mouseEnabled                = false;
 
                        initHints();
                        initGUI(); // каждый гуи элемент описавается как ему надо.
                        initTimer();
                        initLog();
                }


JackFromChaos 21.01.2011 03:46

Не сосем понятна суть вопроса... Можно как то, пример что ли привести?

Добавлено через 6 минут
Если речь идет о интерфейсе и MVC. То тут, мне кажется, лучше всего подходит вариант, когда мы наш вью наследуем от клипа, а затем уже непосредственно наследнике настраиваем связку с моделью и контроллером. Таким образом контроллер минимум знает о содержимом view...

К примеру
Код AS3:

                        _target.alpha                         = 0;
                        _target.mouseChildren                = false;
                        _target.mouseEnabled                = false;

это все таки эпархия view, а не контроллера.

КорДум 21.01.2011 03:57

nOobCrafter, вот теперь стала понятнее ваша мысль. Согласен, можно так. Тогда тот класс-парсер будет еще формировать корни логики.
JackFromChaos, нет, не MVC.

Еще есть варианты?

JackFromChaos 21.01.2011 04:16

Все равно я не до конца понял суть проблемы.
Лично я, обычно, накладываю логику путем наследования от графического клипа, и далее через публичные переменные которые там есть для всех членов(без getChildByName).
Так же иногда делаю всякие утилитные классы, ну например очень простой вариант:
Код AS3:

public class Btn 
{
        private var _owner:Sprite;
        private var _label:TextField;
 
        public function Btn(owner:Sprite,text:String,onClick:Function)
        {
                _owner = owner;
                _owner.useHandCursor = true;
                _owner.buttonMode = true;
                _label = _owner.getChildByName("label") as TextField;
                if (_label)
                {
                        _label.text = text;
                        _label.mouseEnabled = false;
                }
                _owner.addEventListener(MouseEvent.CLICK, onClick);
        }
 
        public function get text(): String
        {
                if (!_label)
                        return null;
                return _label.text;
        }
 
        public function set text(value:String):void
        {
                if (_label)
                        _label._text = value;
        }
 
}

Ну а в наследнике своего клипа уже пишу, что нить типа:
Код AS3:

new Btn(__close,”Закрыть”,onClose);

Сохранять ли указатель на Btn – вопрос уже чисто ситуационный... По разному может быть.
к
P.S. Пример, естественно, синтетический, но очень похожий на реальный код...

КорДум 21.01.2011 04:22

Нет, вы поняли неправильно ;)
Мне нужно всего лишь распарсить один клип из swc на составляющие и скормить его содержимое разным вещам. Как это сделать лучше моего варианта, мне уже посоветовал nOobCrafter. Но если есть и другие способы - я буду рад их выслушать тоже, авось будет что-то оптимальнее и эстетичнее :)

mikhailk 21.01.2011 11:01

А что значит "распарсить и скормить"?
Логика программы как потом с этими классами работает?
Она знает их по именам?

КорДум 21.01.2011 11:28

Какие классы? В swc только один класс, прилинкованный к одному клипу. В этом клипе тонна других клипов, которые мы хватаем через getChildByName.


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

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