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

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

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

Регистрация: May 2013
Сообщений: 2
По умолчанию removeEventListener для нескольких объектов

Здравствуйте! Целый четвертый день изучаю AS и флеш. Возник вопрос, на которй за последние шесть часов мне не удалось найти ответ.
Предположим есть какой то класс

Код AS3:
package menu 
{
	public class kn extends MovieClip
	{
		public var locate_kn_menu:MovieClip;
		public function kn(st:Object, kn_me_fClass:Class) 
		{
			locate_kn_menu = new kn_me_fClass();
			st.addChild(locate_kn_menu );
		}	
	}
}
И есть контейнер для этого класса, который создает 10 детей из этого класса. Так же присваивая каждому из них EventListener.

Код AS3:
		public function menu_container(st:Object) 
		{
			for (var i:int = 0; i < 4; i++) 
			{
				kn_me = new kn(st);
                                kn_me.locate_kn_menu.addEventListener(MouseEvent.ROLL_OVER, mo_OVER);
			}
}

Впорос: Как сделать так, что бы при удачном срабатывании одного события, удалялись слушатели событий для всех аналогичных элементов в этом контейнере?

Старый 01.05.2013, 19:59
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
dfvxtr, код в сообщении нужно выделять соответствующими тегами.
__________________
Идите первым!

Старый 01.05.2013, 21:42
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 3  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Как отписать событие?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Код AS3:
private var _kns:Array = [];
 
public function menu_container(st:Object) 
		{
			for (var i:int = 0; i < 4; i++) 
			{
				kn_me = new kn(st);
                                kn_me.locate_kn_menu.addEventListener(MouseEvent.ROLL_OVER, mo_OVER);
                             _kns.push(kn_me);
			}
}
private function mo_OVER(e:MouseEvent):void {
        for each (var k:kn in _kns) k.locate_kn_menu.removeEventListener(MouseEvent.ROLL_OVER, mo_OVER);
}
примерно так
Но лучше подписывать не сами объекты на события мыши, а родительский контейнер

Старый 01.05.2013, 23:55
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 5  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Чем лучше? Лишний бублинг

Старый 02.05.2013, 00:28
dfvxtr вне форума Посмотреть профиль Отправить личное сообщение для dfvxtr Найти все сообщения от dfvxtr
  № 6  
Ответить с цитированием
dfvxtr

Регистрация: May 2013
Сообщений: 2
to caseyryan
Пробовал так. При таком раскладе элементы массива _kns, оказываются undifined все, кроме того с которого произошел event. Смотрел их через trace(); перед тем как пытаться removeEvent сделать.

UPD.
О! Слегка видеоизменный вариант
Код AS3:
  for each (var k:kn in _kns) k.removeEventListener(MouseEvent.ROLL_OVER, mo_OVER);
Вот в таком виде оно работает. Очень премного благодарен.


Последний раз редактировалось dfvxtr; 02.05.2013 в 00:50.
Старый 02.05.2013, 07:46
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Вот в таком виде оно работает. Очень премного благодарен.
Что работает-то? Подписывается на событие объект locate_kn_menu, а отписывается kn
не может оно так работать
Цитата:
Чем лучше? Лишний бублинг
мм.. да, тут я что-то провтыкал, тем более, что у rollOver нет баблинга.
Но для click однозначно лучше.

Старый 02.05.2013, 09:28
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 8  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
Чем лучше? Лишний бублинг
Лучше тем, что в процессе хаотичного добавления/удаления объектов не надо задумываться о том, что надо от кого-то там отписываться. Утечки памяти и все такое.


Цитата:
мм.. да, тут я что-то провтыкал, тем более, что у rollOver нет баблинга.
Ставим у мувиков mouseChildren=false и спокойно пользуемся обычным маусовером.

Старый 03.05.2013, 03:20
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 9  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
*****


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

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

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


 


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


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