Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.12.2012, 17:35
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 1  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
По умолчанию "Пользовательские события" и "Интерфейсы" на пальцах...

"Пользовательские события" и "Интерфейсы" на пальцах может кто нибудь объяснить с простыми примерами и обзором в каких случаях используется обычно.

Читая Колина Мука, не совсем понимаю, что он хочет донести в соответствующих главах. То есть примеры там есть,но не очевидные, к тому же в "Код листингах" многое остается без комментариев. Заранее спасибо.

Старый 03.12.2012, 17:46
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
PasserBy, советую не забвивать себе голову интерфейсами данном этапе. Когда я читал эту книжку, мне тоже было не понятно это. Все прийдет со временем. Пока этот момент можно пропустить и разобраться с более понятными вещами.

Старый 03.12.2012, 17:52
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 3  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
Цитата:
Сообщение от caseyryan Посмотреть сообщение
PasserBy, советую не забвивать себе голову интерфейсами данном этапе. Когда я читал эту книжку, мне тоже было не понятно это. Все прийдет со временем. Пока этот момент можно пропустить и разобраться с более понятными вещами.
Что касается событий?

Как я понял из форума, классы и события - основа основ AS

Старый 03.12.2012, 17:59
DaFive вне форума Посмотреть профиль Отправить личное сообщение для DaFive Посетить домашнюю страницу DaFive Найти все сообщения от DaFive
  № 4  
Ответить с цитированием
DaFive
 
Аватар для DaFive

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
Есть события, которые возникают на стороне FP когда происходит какое-либо действие (клик, завершение загрузки и т.п.). Их вы можете отследить, подписав что либо на эти события (кнопку на клик, лоадер на завершение).
Но, например, вы хотите сделать своё собственное, которого нет в принципе в природе. Допустим когда чья-то бабушка подойдёт к микрофону и громко крикнет "Тагиииил!" - ваша система распознает голос, определит, что он исходит от бабушки и "вручную" создаст своё событие и разошлет его подписчикам:

Код AS3:
dispatchEvent(new Event("GRANDMOTHER_TAGIL_ROAR", true));
А что-то, будучи подписанным на это событие .addEventListener("GRANDMOTHER_TAGIL_ROAR", handler) - в функции handler выполнит соответствующее действие.
__________________
Кодинг, багинг, алгоритминг. me @

Старый 03.12.2012, 18:04
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 5  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
Цитата:
Сообщение от DaFive Посмотреть сообщение
Код AS3:
dispatchEvent(new Event("GRANDMOTHER_TAGIL_ROAR", true));
А что-то, будучи подписанным на это событие .addEventListener("GRANDMOTHER_TAGIL_ROAR", handler) - в функции handler выполнит соответствующее действие.
Ох, спасибо! Более понятная форма!...

Скажите пожалуйста, а зачем заморачиваться как в примерах К. Мука?
..например вот, только что написал по его примерам =>

Main
Код AS3:
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;
			}
		}
	}
}
Rect
Код AS3:
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 );
                                 //ВНИМАНИЕ ОБРАТИТЬ СЮДА
			}
		}
	}
 
}
Alphaevent
Код AS3:
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");
		}
 
	}
 
}

Старый 03.12.2012, 18:14
DaFive вне форума Посмотреть профиль Отправить личное сообщение для DaFive Посетить домашнюю страницу DaFive Найти все сообщения от DaFive
  № 6  
Ответить с цитированием
DaFive
 
Аватар для DaFive

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
Ну всё правильно. Вы можете расширить класс Event, описав своё событие так как вам нужно.
С той же оперы, что и создать мувиклип с квадратом внутри на лету, выполняя все эти graphics.draw и т.п. или создать свой класс, расширяющий мувиклип, в котором это все заранее описано, а потом создать экземпляр этого расширенного класса.
__________________
Кодинг, багинг, алгоритминг. me @

Старый 03.12.2012, 18:23
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 7  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
Цитата:
Сообщение от DaFive Посмотреть сообщение
Ну всё правильно. Вы можете расширить класс Event, описав своё событие так как вам нужно.
С той же оперы, что и создать мувиклип с квадратом внутри на лету, выполняя все эти graphics.draw и т.п. или создать свой класс, расширяющий мувиклип, в котором это все заранее описано, а потом создать экземпляр этого расширенного класса.
Эм...попроще объясните пожалуйста =\...( + пример )

Старый 03.12.2012, 18:36
DaFive вне форума Посмотреть профиль Отправить личное сообщение для DaFive Посетить домашнюю страницу DaFive Найти все сообщения от DaFive
  № 8  
Ответить с цитированием
DaFive
 
Аватар для DaFive

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
Эм, куда проще? Вам удобно создавать нужные вам объекты каждый раз описывая свойства и логику работы при создании?

Или удобно запихнуть все в один класс, описав все действия в нём, а потом создать экземпляр этого класса, не задумываясь, забыл ли указать какое-либо из свойств? То же и с событиями.
__________________
Кодинг, багинг, алгоритминг. me @

Старый 03.12.2012, 18:46
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 9  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
Цитата:
Сообщение от DaFive Посмотреть сообщение
Эм, куда проще? Вам удобно создавать нужные вам объекты каждый раз описывая свойства и логику работы при создании?

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

Старый 03.12.2012, 19:22
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
PasserBy, пока не поздно, почитайте Правила форума.
У нас не принято создавать "тему имени себя" и спрашивать в ней все, что придет в голову. Многие люди используют Поиск по форуму для нахождения ответов на свои вопросы (для этого, конечно, надо отложить на время веру в свою уникальность), а для эффективного поиска важно, чтобы тема была посвящена одному вопросу и имела правильное название, раскрывающее суть этой темы. Вы уже нарушили это правило, задав два несвязанных вопроса в названии, и теперь задаете третий. Я так понимаю, вопросы, озвученные в названии, уже исчерпаны? Можно закрывать?

По поводу событий. Есть два способа "своих" событий —
1. Использование класса Event. При этом задается только своё "имя" события, то есть строковый тип, как в примере dispatchEvent(new Event("моё_имя_события");
2. Расширение класса Event, то есть создание своего КЛАССА события (как в Вашем примере из Мука).
Расширяя класс, Вы можете добавлять в него собственные свойства любого типа, и тогда сам объект события, который передается в обработчик, сможет содержать/переносить/отдавать какую-то дополнительную информацию (подобно тому, как MouseEvent, расширяя Event, содержит данные о координатах мыши, состоянии служебных клавиш в момент события и т.п. полезные данные).

Добавлено через 6 минут
То есть конкретно "извращаться" как в данном примере нет никакого смысла, поскольку никаких пользовательских данных новый класс события не содержит. С таким же успехом можно было использовать и простой Event, только константу с именем пришлось бы хранить в другом месте.
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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