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

Chum 15.11.2012 01:46

Работа с классом объектов созданных в режиме дизайна
 
Не знаю с чего начать.
На главной временной шкале в одном слое сделал: мувик, текстовое поле, кнопку, проименовал их(my_mc, my_txt и my_btn), затем выделил их, нажал F8, создал из них один мувиклип mc и и одновременно с созданием mc создал для него класс MyClass. Открыл этот класс и заступорился. Подскажите плиз хотя бы на одном примере как можно в этом классе (если конечно можно) обращаться к вложенными в mc объектам my_mc, my_txt и my_btn. У меня есть опыт написания классов "с чистого листа" но с такой ситуацией столкнулся впервые, объекты созданы не программно а в режиме дизайна, пробую, но что-то никак пока не получается.
Если писать долго то плиз, скиньте ссылочку.

Wolsh 15.11.2012 01:52

getChildByName()?

spirit2 15.11.2012 03:30

Цитата:

Сообщение от Chum (Сообщение 1104472)
сделал: мувик, текстовое поле, кнопку, проименовал их(my_mc, my_txt и my_btn), затем выделил их, нажал F8, создал из них один мувиклип mc и и одновременно с созданием mc создал для него класс MyClass

Ну вот, откройте ваш мувик и пропишите объектам внутри него instance_name'ы. После, внутри класса вашего мувика сможете управлять этими объектами по этим именам.

Chum 15.11.2012 10:16

Instance_name'ы были прописаны при создании и именно их я имел ввиду когда говорил о них. Тут закавыка в том что этот подход для меня новый и я не могу пока за что-то ухватиться, я не знаю что стоит за - getChildByName(). Ну хоть какой-то пример в коде или ссылочку на материал по этому вопросу.

Wolsh 15.11.2012 11:17

У Вас нет справки в редакторе? Безобразие. Воспользуйтесь онлайн-справкой.
http://help.adobe.com/ru_RU/FlashPla...ldByName%28%29

Добавлено через 4 минуты
Попробуйте написать в конструкторе своего класса
Код AS3:

var txt:TextField = this.getChildByName("my_txt") as TextField;
txt.text = "Я нашлась";

Добавлено через 8 минут
Но вообще, если у Вас уже есть опыт работы с классами, лучше бы развивать его, а не дизайнерский подход "навалить, а там разберемся". Укажите классы вашим символам в библиотеке и добавляйте их в свой мувиклип (а лучше спрайт) кодом, а не ручками.

Chum 15.11.2012 12:09

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

alatar 15.11.2012 12:32

Если мне память не изменяет, можно создать публичные переменные с тем же именем, что и instance name. При создании экземпляра класса эти переменные будут инициализированы.

spirit2 15.11.2012 13:44

Цитата:

Сообщение от alatar (Сообщение 1104521)
Если мне память не изменяет, можно создать публичные переменные с тем же именем, что и instance name. При создании экземпляра класса эти переменные будут инициализированы.

Именно.

Достаточно присвоить класс одному "клипу-контейнеру", а к детям обращаться по инстансам.

Код AS3:

package {
        import flash.display.MovieClip;
        import flash.text.TextField;
        import flash.display.SimpleButton;
        import flash.events.MouseEvent;
 
        public class MyClass extends MovieClip{
                public var my_mc:MovieClip;
                public var my_btn:SimpleButton;
                public var my_txt:TextField;
 
                public function MyClass() {
                        my_mc.addEventListener(MouseEvent.CLICK, myMCHandler);
                }
                private function myMCHandler(e:MouseEvent):void {
                        trace("меня нажали");
                }
        }
}

Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.MouseEvent;
        import flash.events.Event;
 
        public class Main extends Sprite {
                private var _myClass:MyClass;
 
                public function Main():void {
                        if (stage) {
                                this.init();
                        } else {
                                addEventListener(Event.ADDED_TO_STAGE, init);
                        }
                }
 
                private function init(event:Event = null):void {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        _myClass = new MyClass();
                        addChild(_myClass);
                        _myClass.my_btn.addEventListener(MouseEvent.CLICK, myButtonHandler);
                }
                private function myButtonHandler(e:MouseEvent):void {
                        trace("и меня нажали");
                }
        }
 
}


udaaff 15.11.2012 14:36

Цитата:

и одновременно с созданием mc создал для него класс MyClass
Просто пропишите для своего мувика класс MyClassGraphic. Он создастся автоматически. Все ваши инстансы будуд доступны через getChildByName() или []. Скомпильте swc. Далее уже создайте класс MyClass, в котором инстанциируйте MyClassGraphic из swc, и т.д.

SpetZ_Naz 25.11.2012 02:52

Здравствуйте!

Наткнулся на этот топик и думал решилась моя проблема по созданию стиля (формы) приложения, но не разобрался с пояснениями форумчан (опыта маловато). В общем, допер я как создать форму с помощью Adobe Flash Pro CS5.5 и создавать для нее события с помощью FB 4.6.

Пишу все это с целью окончательного допонимания, может сделал что-то не правильно, направите, да и для некоторых новичков тема окажется актуальна (например для тех кто привык в делфинарии с компонентами работать) :)

Мои действия по созданию формы:
1. В Flash Pro CS5 создал "проект ActionScript 3.0".
2. Создал новый символ (ctrl+F8). Назвал Form_1.
3. Создал квадрат в кадре символа. На него набросал стандартные компоненты из меню компонентов (кнопки, текстовые поля и т.п.)(вызов -> ctrl+F7).
4. Важно указать "Instance Name" каждому компоненту в свойствах компонента (там же другие свойства редактируются), через это имя происходит обращение к компоненту.
5. Вышел с редактора символов на главную сцену.
6. Перетащил всю группу символов на сцену (в кадр). Указал "Instance Name" - _Form_Par
7. Конвертанул их в так скажем общий символ (правой кнопкой по вытащеному символу - Convert to Symbol), Назвал его MyForm с галочкой экспорта в ActionScript 3.
8. Сохранил. Важно в свойствах публикации поставить галочку "SWC". Опубликовал (alt+shift+F12).
9.В FB 4.6 создал "проект ActionScript 3.0".
10. В свойствах проекта, во вкладке "Путь сборки.." добавил сохраненный SWC из Flash Pro CS5.
11. Написал следующий код:

Код AS3:

package
{
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public class Test_interface extends Sprite
        {
                public var _Form:MyForm;
                public function Test_interface()
                {
                                _Form = new MyForm();
                                addChild(_Form);
                                _Form._Form_Par.btn_1.addEventListener(MouseEvent.CLICK, onMc);
                }
                private function onMc(e:MouseEvent):void {
                        _Form._Form_Par.btn_1.removeEventListener(MouseEvent.CLICK, onMc);
                        _Form._Form_Par.lbl_1.text = "Hello Word!!";
                }
        }
}

У кого есть какие замечания, приму во внимание, но пока что так разобрался.


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

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