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

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

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

Регистрация: Mar 2009
Сообщений: 107
Post Передача переменных в функции событий

Доброго времени суток.
Столкнулся с такой проблемой, нужно передать данные в функцию которая вызывается событием.
Мне на другом форуме подсказали одно решение, хотел бы обсудить насколько предложенный там вариант является корректным и верным?

Вот вспомогательный класс сюда записываем все нужные мне переменные для передачи:
Код AS3:
package main{
	import flash.display.Sprite;
 
	public class mySprite extends Sprite {
		public var id:*;
 
		public function mySprite():void {
			super();
		}
	}
}
А это уже сама реализация
Код AS3:
package main{
	import flash.display.Sprite;
 
	public class myClass extends Sprite {
		public var sp:Array = new Array();
 
		public function myClass():void {
			for (var i:int = 0; i <= 50; i++) {
				sp[i] = new mySprite();			
				sp[i].id = i;			
				sp[i].addEventListener(MouseEvent.MOUSE_UP, myMouseUp, false, 0, true);
			}
		}
		private function myMouseUp(e:MouseEvent):void {
			trace('id:'+e.currentTarget.id);
		}
	}
}
Если есть другие более лучшие варианты, то буду очень признателен.


Последний раз редактировалось vvvvvvf; 07.06.2009 в 00:14.
Старый 07.06.2009, 14:24
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 2  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
больше никогда не ходите на тот сайт...
Самый нормальный, но может самую малость муторный, это создание кастомного события. наследуетесь от Event и передаете через него то что нужно.
А это ужас.

Старый 07.06.2009, 15:28
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 3  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
а что, собственно, смущает ?
любой event несет target/currentTarget, так чего бы и не читать его свойства
ничем не хуже чем читать свойства кастомного евента

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

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
а смущает засорение памяти какими непонятными классами контейнерами.
Хотя может я и чего то не понимаю.

Старый 07.06.2009, 16:28
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
т.е. создание кастомного евента плюс необходимость диспатчить его, дублируя штатный, тебя не смущает, а вот по-простому добавить свойство объекту почему-то смущает..
тем более, что в примере не "непонятный класс контейнер", а просто спрайт, расширенный свойством id
к слову: можно и не расширять спрайт, а писать этот id в name, например

Старый 07.06.2009, 21:32
vvvvvvf вне форума Посмотреть профиль Отправить личное сообщение для vvvvvvf Найти все сообщения от vvvvvvf
  № 6  
Ответить с цитированием
vvvvvvf

Регистрация: Mar 2009
Сообщений: 107
Цитата:
Сообщение от silin Посмотреть сообщение
т.е. создание кастомного евента плюс необходимость диспатчить его, дублируя штатный, тебя не смущает, а вот по-простому добавить свойство объекту почему-то смущает..
тем более, что в примере не "непонятный класс контейнер", а просто спрайт, расширенный свойством id
к слову: можно и не расширять спрайт, а писать этот id в name, например
А можно какой нибудь пример дать =)

Добавлено через 37 секунд
Цитата:
Сообщение от ramshteks Посмотреть сообщение
больше никогда не ходите на тот сайт...
Самый нормальный, но может самую малость муторный, это создание кастомного события. наследуетесь от Event и передаете через него то что нужно.
А это ужас.
Можешь тоже пример дать

Старый 07.06.2009, 21:54
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
а чем тобой приведенный не устраивает?
вот он же, но с хранением id в name
Код AS3:
public class Main extends Sprite 
{
	public function Main():void 
	{
		for (var i:int = 0; i < 10; i++) 
		{
			var s:Sprite = new Sprite();
			s.graphics.beginFill(0x000000);
			s.graphics.drawRect(0, 0, 20, 20);
			s.x = 30 * i;
			s.name = i.toString();
			addChild(s);
		}
		addEventListener(MouseEvent.CLICK, clickHandler);
	}
 
	private function clickHandler(evnt:MouseEvent):void 
	{
		var s:Sprite = evnt.target as Sprite;
		if (s)
		{
			var id:String = s.name;
			trace( "id : " + id );
		}
	}
}
вот почти такой же, но с хранением данных не в самих объектах, а в Dictionary:
Код AS3:
public class Main extends Sprite 
{
	private var _dict:Dictionary = new Dictionary();
	public function Main():void 
	{
		for (var i:int = 0; i < 10; i++) 
		{
			var s:Sprite = new Sprite();
			s.graphics.beginFill(0x000000);
			s.graphics.drawRect(0, 0, 20, 20);
			s.x = 30 * i;
			addChild(s);
			_dict[s] = i;
		}
		addEventListener(MouseEvent.CLICK, clickHandler);
	}
 
	private function clickHandler(evnt:MouseEvent):void 
	{
		var id:*= _dict[evnt.target];
		trace( "id : " + id );
	}
}
суть обоих в том, что любое событие несет target, по которому достаем нужные данные, из самого объекта или еще откуда - это уже по обстоятельствам..

Старый 08.06.2009, 08:10
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А что сразу «*»-то?

Старый 08.06.2009, 08:23
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
* из-за того, что undefined для int, например, трактуется как 0 и для отсутствующего в словаре элемента поимеем путаницу
т.е. получается, что кастить надо после того как убедишься, что элемент есть

Старый 08.06.2009, 08:46
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
if (event.target in this._dict) и вперед.

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

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

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


 


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


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