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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.01.2011, 00:48
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 1  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
По умолчанию Пользовательское событие

Никак не могу разобраться с пользовательскими событиями. Вроде пишу что-то, но не работает.

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

Заранее благодарен.

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
А может для начала вы скажете что именно не получается, и свой код скинете, а мы уж коллективным разумом ошибки поищем?

Здается мне, так эффективнее получится)
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 16.01.2011, 01:03
JackFromChaos вне форума Посмотреть профиль Отправить личное сообщение для JackFromChaos Найти все сообщения от JackFromChaos
  № 3  
Ответить с цитированием
JackFromChaos
 
Аватар для JackFromChaos

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
Само событие, расширяющее стандартный event 2 параметрами - x и y(по типу как mouse event);

Код AS3:
package
{
	import flash.events.Event;
	/**
	 * ...
	 * @author Denis `Jack` Vinogradsky
	 */
	public class EventChangePos extends Event
	{
		public static const CHANGE_POS : String = "changePos";
		private var _x:Number;
		private var _y:Number;
		public function EventChangePos(type:String,x:Number,y:Number) 
		{
			super(type);
			_x = x;
			_y = y;
		}
 
		public function get x():Number 
		{
			return _x;
		}
 
		public function set x(value:Number):void 
		{
			_x = value;
		}
 
		public function get y():Number 
		{
			return _y;
		}
 
		public function set y(value:Number):void 
		{
			_y = value;
		}
 
	}
 
}
Класс, который генерит событие по изменению свойств X и Y:
Код AS3:
package
{
	import flash.events.EventDispatcher;
	/**
	 * ...
	 * @author Denis `Jack` Vinogradsky
	 */
	public class TestObject extends EventDispatcher
	{
		private var _x:Number;
		private var _y:Number;
		public function TestObject() 
		{
 
		}
 
		public function get x():Number 
		{
			return _x;
		}
 
		public function set x(value:Number):void 
		{
			_x = value;
			dispatchEvent(new EventChangePos(EventChangePos.CHANGE_POS, _x, _y);
		}
 
		public function get y():Number 
		{
			return _y;
		}
 
		public function set y(value:Number):void 
		{
			_y = value;
			dispatchEvent(new EventChangePos(EventChangePos.CHANGE_POS, _x, _y);
		}
 
	}
 
}
Пример использования:
Код AS3:
			var test:TestObject = new TestObject();
			test.addEventListener(EventChangePos.CHANGE_POS, onChangePos);
__________________
Искренне Ваш, Джек.

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

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
эм... а зачем у вас в событии сеттеры?
__________________
Блог, Twitter
Брюзга.

Старый 16.01.2011, 07:00
JackFromChaos вне форума Посмотреть профиль Отправить личное сообщение для JackFromChaos Найти все сообщения от JackFromChaos
  № 5  
Ответить с цитированием
JackFromChaos
 
Аватар для JackFromChaos

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
Цитата:
Сообщение от mayakwd Посмотреть сообщение
эм... а зачем у вас в событии сеттеры?
Ну, как бы правила хорошего тона, в ООП... можно и публичные переменные, дело вкуса...
Но хочу обратить ваше внимание на то, что во flash нет ни одного события с открытыми членами, все реализовано через свойства...
Подозреваю, что так обстоит дело не только с событиями, а и со всеми стандартными классами flash.
Константы, естественно, не в счет...

Добавлено через 3 минуты
Там в примере еще атрибутов по хорошему не хватает, вроде такого:
Код AS3:
[Event(name="activate", type="flash.events.Event")]
Как для самого события, так и для класса с этим событием... Но это конечно не обязательно... Решил не запутывать человека сверх меры...
__________________
Искренне Ваш, Джек.

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

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
Цитата:
Сообщение от JackFromChaos Посмотреть сообщение
Ну, как бы правила хорошего тона, в ООП...
Вы немножко заблуждаетесь. Правило хорошего тона — не использовать сеттеры в эвентах, так как события выполняют функцию оповещения (тавтология мой конек), и отдают данные.

Использовать сеттеры в событиях это мягко скажем моветон.

Ваше же объяснение совсем не по теме вышло.
__________________
Блог, Twitter
Брюзга.

Старый 16.01.2011, 11:13
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 7  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
в чем моветон то?
ну сеттер и сеттер... хочешь 1 раз при создании передать в него что-то - передай всего 1 раз. благо if никто не отменял)

Добавлено через 8 минут
п.с. я, просто, вообще не сторонник "много параметров в конструктор". в отношении Ивентов - больше одного кастомного параметра для ивента - моветон (ИМХО). в данном случае х,у легко заменяется одним поинтом.
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 16.01.2011, 11:39
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 8  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Ну вот событие, которое у меня посылается при взлете вертолета в игре:
Код AS3:
package  
{
	import flash.events.Event;
 
	public class UpEvent extends Event 
	{
		public static const INAIR:String = "inair";
 
		public function UpEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false) 
		{ 
			super(type, bubbles, cancelable);
 
		} 
 
		public override function clone():Event 
		{ 
			return new UpEvent(type, bubbles, cancelable);
		} 
 
		public override function toString():String 
		{ 
			return formatToString("UpEvent", "type", "bubbles", "cancelable", "eventPhase"); 
		}
 
	}
 
}

Старый 16.01.2011, 13:48
JackFromChaos вне форума Посмотреть профиль Отправить личное сообщение для JackFromChaos Найти все сообщения от JackFromChaos
  № 9  
Ответить с цитированием
JackFromChaos
 
Аватар для JackFromChaos

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
Цитата:
Сообщение от mayakwd Посмотреть сообщение
Вы немножко заблуждаетесь. Правило хорошего тона — не использовать сеттеры в эвентах, так как события выполняют функцию оповещения (тавтология мой конек), и отдают данные.

Использовать сеттеры в событиях это мягко скажем моветон.

Ваше же объяснение совсем не по теме вышло.
До меня дошло, о чем вы... Вы спросили, для чего тут "СЕТТЕРЫ". я для себя прочел/подумал, для чего тут свойства Да, вы правы, данном случае сеттер, в общем то не нужен.

Но это вовсе не значит, что в событиях не нужны сеттеры, просто они не нужны конкретно здесь...
К примеру взгляните на тот же MouseEvent, и вы найдете там сеттеры, и не случайно

Впрочем когда я писал код примера, я как то об этом не задумывался, нужны там сеттеры или нет... На вопрос, как сделать пользовательские события, такие тонкости, как наличие сеттеров... врятли имеет какое то значение....
__________________
Искренне Ваш, Джек.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
goodguyабсолютно не понял, в чем "кастомность" Вашего события, в каком месте оно "расширяет" обычное Событие и, в частности, чем отличается метод clone в Вашем событии от исходного, что его пришлось оверрайдить. Не логичнее было бы создать класс ВертолётИвэнт, а в нем уже разные ТИПЫ этого события - ап, даун, дестрой и т.п.? Даже в этом ключе в нем нет особой необходимости - можно создать класс-список констант типа HELICOPTER_UP, HELICOPTER_DOWN, HELICOPTER_DESTROYED и диспатчить обычные экземпляры Event с нужным Типом из этого списка. Нет смысла множить сущности.
Кастомные классы событий нужны, когда Вы хотите передавать в событиях дополнительные параметры.
По поводу количества параметров - можно иногда отказаться от передачи типа в конструктор кастомного события, если тип в реальности один. Например
Код AS3:
package  
{
	import flash.events.Event;
 
/* * * * * * * * * *
*                  *
*  @author wolsh   *
*                  *
\* * * * * * * * * */ 
	public class SizeEvent extends Event 
	{
		public static const CHANGED:String = "sizeChanged";
		public var width:Number;
		public var height:Number;
 
		public function SizeEvent(width:Number, height:Number, bubbles:Boolean=false, cancelable:Boolean=false) 
		{ 
			super(CHANGED, bubbles, cancelable);
			this.width = width;
			this.height = height;
		} 
 
		public override function clone():Event 
		{ 
			return new SizeEvent(width, height, bubbles, cancelable);
		} 
 
		public override function toString():String 
		{ 
			return formatToString("SizeEvent", CHANGED, "width", "height", "bubbles", "cancelable", "eventPhase"); 
		}
	}
}
Код AS3:
addEventListener(SizeEvent.CHANGED, onSizeEvent);
dispatchEvent(new SizeEvent(stage.stageWidth, stage.stageHeight));
private function onSizeEvent(event:SizeEvent):void 
{
	trace(event.type);
	trace(event.width, event.height);
}
Но есть неприятная непрозрачность конечно с типом, указываемым в листенере и не указываемым при создании события)))
__________________
Reality.getBounds(this);

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

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

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


 


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


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