![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Banned
Регистрация: Nov 2012
Сообщений: 43
|
"Пользовательские события" и "Интерфейсы" на пальцах может кто нибудь объяснить с простыми примерами и обзором в каких случаях используется обычно.
Читая Колина Мука, не совсем понимаю, что он хочет донести в соответствующих главах. То есть примеры там есть,но не очевидные, к тому же в "Код листингах" многое остается без комментариев. Заранее спасибо. |
|
|||||
|
PasserBy, советую не забвивать себе голову интерфейсами данном этапе. Когда я читал эту книжку, мне тоже было не понятно это. Все прийдет со временем. Пока этот момент можно пропустить и разобраться с более понятными вещами.
|
|
|||||
|
Banned
Регистрация: Nov 2012
Сообщений: 43
|
Цитата:
Как я понял из форума, классы и события - основа основ AS |
|
|||||
|
Есть события, которые возникают на стороне FP когда происходит какое-либо действие (клик, завершение загрузки и т.п.). Их вы можете отследить, подписав что либо на эти события (кнопку на клик, лоадер на завершение).
Но, например, вы хотите сделать своё собственное, которого нет в принципе в природе. Допустим когда чья-то бабушка подойдёт к микрофону и громко крикнет "Тагиииил!" - ваша система распознает голос, определит, что он исходит от бабушки и "вручную" создаст своё событие и разошлет его подписчикам: А что-то, будучи подписанным на это событие .addEventListener("GRANDMOTHER_TAGIL_ROAR", handler) - в функции handler выполнит соответствующее действие.
__________________
Кодинг, багинг, алгоритминг. me @ |
|
|||||
|
Banned
Регистрация: Nov 2012
Сообщений: 43
|
Цитата:
Скажите пожалуйста, а зачем заморачиваться как в примерах К. Мука? ..например вот, только что написал по его примерам => Main package { import flash.display.*; import flash.events.*; import flash.ui.*; import flash.utils.Timer; public class Main extends MovieClip{ private var timer:Timer; private var mama:Array = new Array(); private var massiveSize:int = 10; public function Main() { // constructor code var i:int = 0; var _some:Rect = new Rect(40); _some.x = 100; _some.y = 100; addChild(_some); _some.addEventListener(AlphaEvent.ALP, killSome); //ВНИМАНИЕ ОБРАТИТЬ СЮДА _some.randColor(); function killSome(e:AlphaEvent):void{ //ВНИМАНИЕ ОБРАТИТЬ СЮДА trace("AlphaEvent.ALP was DESTROED"); _some.removeEventListener(AlphaEvent.ALP, killSome); _some = null; } } } } package { import flash.display.*; import flash.events.*; import flash.ui.*; public class Rect extends Sprite { private var _graph:Shape; private var _size:int = 10; private var _color:uint = 0x000000; private var _alp:Number = 0.9; public function Rect(size:int = 10) { // constructor code _size = size; _graph = new Shape(); _graph.graphics.beginFill(_color, 1); _graph.graphics.drawRect(0, 0, _size, _size); _graph.graphics.endFill(); addChild(_graph); } public function randColor():void{ _graph.graphics.clear(); _color = Math.floor(Math.random()*999999); _graph.graphics.beginFill(_color, 1); _graph.graphics.drawRect(0, 0, _size, _size); _graph.graphics.endFill(); _graph.addEventListener(Event.ENTER_FRAME, goAlphaDown); } public function goAlphaDown(e:Event):void{ _graph.alpha = _alp; _alp -= 0.02; if( _alp < 0 ){ _graph.removeEventListener(Event.ENTER_FRAME, goAlphaDown); trace("Event.ENTER_FRAME was DESTROED"); //ВНИМАНИЕ ОБРАТИТЬ СЮДА var alpEvent:AlphaEvent = new AlphaEvent(AlphaEvent.ALP, true, true); dispatchEvent( alpEvent ); //ВНИМАНИЕ ОБРАТИТЬ СЮДА } } } } package { import flash.events.Event; public class AlphaEvent extends Event{ public static const ALP:String = "alpha";//Константа события альфа public function AlphaEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false) { // constructor code super(type, bubbles, cancelable); } public override function clone():Event{ return new AlphaEvent(type, bubbles, cancelable); } public override function toString():String{ return formatToString("AlphaEvent", "type", "bubbles", "cancelable", "eventPhase"); } } } |
|
|||||
|
Ну всё правильно. Вы можете расширить класс Event, описав своё событие так как вам нужно.
С той же оперы, что и создать мувиклип с квадратом внутри на лету, выполняя все эти graphics.draw и т.п. или создать свой класс, расширяющий мувиклип, в котором это все заранее описано, а потом создать экземпляр этого расширенного класса.
__________________
Кодинг, багинг, алгоритминг. me @ |
|
|||||
|
Banned
Регистрация: Nov 2012
Сообщений: 43
|
Цитата:
|
|
|||||
|
Эм, куда проще? Вам удобно создавать нужные вам объекты каждый раз описывая свойства и логику работы при создании?
Или удобно запихнуть все в один класс, описав все действия в нём, а потом создать экземпляр этого класса, не задумываясь, забыл ли указать какое-либо из свойств? То же и с событиями.
__________________
Кодинг, багинг, алгоритминг. me @ |
|
|||||
|
Banned
Регистрация: Nov 2012
Сообщений: 43
|
Цитата:
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
PasserBy, пока не поздно, почитайте Правила форума.
У нас не принято создавать "тему имени себя" и спрашивать в ней все, что придет в голову. Многие люди используют Поиск по форуму для нахождения ответов на свои вопросы (для этого, конечно, надо отложить на время веру в свою уникальность), а для эффективного поиска важно, чтобы тема была посвящена одному вопросу и имела правильное название, раскрывающее суть этой темы. Вы уже нарушили это правило, задав два несвязанных вопроса в названии, и теперь задаете третий. Я так понимаю, вопросы, озвученные в названии, уже исчерпаны? Можно закрывать? По поводу событий. Есть два способа "своих" событий — 1. Использование класса Event. При этом задается только своё "имя" события, то есть строковый тип, как в примере dispatchEvent(new Event("моё_имя_события"); 2. Расширение класса Event, то есть создание своего КЛАССА события (как в Вашем примере из Мука). Расширяя класс, Вы можете добавлять в него собственные свойства любого типа, и тогда сам объект события, который передается в обработчик, сможет содержать/переносить/отдавать какую-то дополнительную информацию (подобно тому, как MouseEvent, расширяя Event, содержит данные о координатах мыши, состоянии служебных клавиш в момент события и т.п. полезные данные). Добавлено через 6 минут То есть конкретно "извращаться" как в данном примере нет никакого смысла, поскольку никаких пользовательских данных новый класс события не содержит. С таким же успехом можно было использовать и простой Event, только константу с именем пришлось бы хранить в другом месте.
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|