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

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

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

Регистрация: Jul 2009
Сообщений: 240
Записей в блоге: 1
По умолчанию Не получается послать событие элементам массива

В нижеприведенном коде каждый экземпляр myObj сам себя подписывает на событие myEvent.PROBA. Для примера экземпляр только 1.

И дальше базовый класс вызывает disptchEvent(myEvent.PROBA). При этом событияе элементу массива не доходит.

Можно конечно делать rrr[0].dispacthEvent(), это работает, но тогда придется пробегать по всему массиву. Собственно, такой способ фактически равносилен вызову rrr[i].MyListener(), а хочется чтобы было именно через события. Чтобы один раз сделать dispatchEvent, а все слушатели мое событие приняли.

root.dispatchEvent тоже не работает как хочется.

Что я делаю не так, и как надо?

Код AS3:
	public class mainclass extends Sprite{
		var rrr:Array;	
		function mainclass(){
			super();
			rrr=new Array();
			rrr.push(new cMyObj() );//в массиве 1 элемент для примера
			addChild(rrr[0]);
			var m=new myEvent(myEvent.PROBA)
			dispatchEvent(m);
		}
	}
 
 
	public class cMyObj extends MovieClip{
		function cMyObj (){
			super();
			addEventListener(myEvent.PROBA, MyListener);
		}
		function MyListener(ev:myEvent){
			trace("ololo!");
		}
	}

Старый 01.08.2009, 02:33
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 2  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Я, конечно, сонный и все такое, но...

У вас событие рассылается на уровень выше, чем ловится. Естественно, вы его поймать не можете.

P.S., я понмиаю, конечно, что сложно иметь привычку именовать переменные, классы и т.п. разными способами в разных языках (я так понимаю, у вас тут в стиле C), но все же, лучше писать названия классов с большой буквы, а их полей и методов - с маленькой.
__________________
Дело не в тебе

Старый 01.08.2009, 02:58
chabapok вне форума Посмотреть профиль Отправить личное сообщение для chabapok Найти все сообщения от chabapok
  № 3  
Ответить с цитированием
chabapok

Регистрация: Jul 2009
Сообщений: 240
Записей в блоге: 1
Цитата:
У вас событие рассылается на уровень выше, чем ловится. Естественно, вы его поймать не можете.
Ну так мне это и нужно, чтобы на верхнем уровне сгенерировалось событие, которое бы поймали все, кто на уровень ниже. Это(по моему мнению)соответствует описанию обработки событий.
вот картинка, объясняющая как есть


у меня родительский узел - это mainclass, а "узел child1" -это rrr[0], являющийся экземпляром класса cMyObj. почему событие не заходит в rrr[0] и как сделать правильно?

Наверное, я тоже сонный и чего-то не понимаю.

ps. ну да, привык в стиле С. Пускай тут уже так остается, чтоб избежать путаницы а впредь учту.

Старый 01.08.2009, 03:53
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 4  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Вы его генерите на уровне "Родительский узел", а слушать пытаетесь в "Узел Child 1".

Ладно, лучше я спать пойду
__________________
Дело не в тебе

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от chabapok Посмотреть сообщение
Это(по моему мнению)соответствует описанию обработки событий.
Не соответствует. События, если всплывающие, распространяются вверх, к родителям, а не вниз к детям.

Старый 01.08.2009, 15:20
chabapok вне форума Посмотреть профиль Отправить личное сообщение для chabapok Найти все сообщения от chabapok
  № 6  
Ответить с цитированием
chabapok

Регистрация: Jul 2009
Сообщений: 240
Записей в блоге: 1
Цитата:
Вы его генерите на уровне "Родительский узел", а слушать пытаетесь в "Узел Child 1".
Да, я знаю что именно так я и делаю, но ведь именно так и задумано.


Цитата:
События, если всплывающие, распространяются вверх, к родителям, а не вниз к детям.
Если добавлять прослушиватель, чтоб слушал фазу захвата:

addEventListener(myEvent.PROBA, MyListener, true);

то тоже не работает.

Как мне одним dispatchEvent разослать событие множеству объектов, которые это событие слушают, в моем Array?

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

Регистрация: Sep 2002
Сообщений: 30,787
И не будет работать, это в лучшем случае для мышиных событий подойдет.

В вашем случае налицо ошибка проектирования. Либо дети должны получать некий объект с данными, умеющий рассылать события (проще говоря, MVC), на него подписываться и изменять своё состояние, либо родитель сам должен изменять какие-то свойства детей.

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

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

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


 


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


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