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

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

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Цитата:
А почему кстати? Я только недавно изучаю AS3.0, но по совету maincode расширял в данном случае не Sprite, а EventDispatcher.
Не заморачивайтесь пока такими вещами, на этапе обучения это только усложняет понимание принципов языка. Потом сами к этому придете.

Цитата:
Не совсем понимаю, что вы имеете ввиду? То есть на каждый кружок повесить addEventListener, но который ссылается на единый обработчик?
Три разных кнопки - один обработчик.
Если вешать слушатель на каждую кнопку в том элементе, где вы создаете кнопки, то .currentTarget покажет на конкретную кнопку.
В данном случае все таки лучше унаследоваться от Sprite чтобы не заморачиваться с двумя проблемами одновременно.

Код AS3:
...
private function setupButtons():void
{
	var button1:MyLittleButton = new MyLittleButton();
	var button2:MyLittleButton = new MyLittleButton();
	var button3:MyLittleButton = new MyLittleButton();
 
	addChild(button1);
	addChild(button2);
	addChild(button3);
 
	button1.addEventListener(MouseEvent.Click, genericClickListener);
	button2.addEventListener(MouseEvent.Click, genericClickListener);
	button3.addEventListener(MouseEvent.Click, genericClickListener);
}
 
private function genericClickListener(me:MouseEvent):void
{
	trace(me.currentTarget);
}
 
...

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

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

Цитата:
по совету maincode расширял в данном случае не Sprite, а EventDispatcher.
Видимо совет касался чего-то другого. Выносить обработчик события куда-то отдельно от самого объекта достаточно нестандартное решение, требующее дополнительной мотивации так сделать.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 15.08.2013, 14:45
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 13  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
KumoKairo, ваш пример несколько проще: у кнопок нет родительского объекта.
Если этот общий код попробовать реализовать применительно к моему примеру, то получается например так:

Код AS3:
package
{
 
	import flash.display.*;
	import flash.events.*;
 
	public class Main extends Sprite
	{
		private var area1:Area1 = new Area1();
		private var krug1:Krug1 = new Krug1();
		private var krug2:Krug2 = new Krug2();
		private var krug3:Krug3 = new Krug3();
 
		public function Main()
		{
			area1.x = 120;
			area1.y = 150;
			addChild(area1);
 
			krug1.addEventListener(MouseEvent.CLICK, genericClickListener);
			krug2.addEventListener(MouseEvent.CLICK, genericClickListener);
			krug3.addEventListener(MouseEvent.CLICK, genericClickListener);
 
		}
 
		private function genericClickListener(e:MouseEvent):void
		{
			trace("e.currentTarget", e.currentTarget);
		}
 
	}
 
}
Однако он не работает, при нажатии на кнопки ничего не происходит (ошибок тоже нет).
Я пробовал заменить строки вот так:
Код AS3:
area1.krug1.addEventListener(MouseEvent.CLICK, genericClickListener);
area1.krug2.addEventListener(MouseEvent.CLICK, genericClickListener);
area1.krug3.addEventListener(MouseEvent.CLICK, genericClickListener);
Но в таком случае появляется одна ошибка:
Цитата:
TypeError: Error #1010: A term is undefined and has no properties.
at Main$iinit()
Dukobpa3, ну да это сделано по аналогии с примером из этого поста.
Вариант более оптимального кода - вынести обработчик в отдельный класс.

Старый 15.08.2013, 14:49
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 14  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
В первом примере переменные krug1 и т.д. никакого отношения к кнопкам в area1 не имеют) Во втором случае ошибка из-за того, что переменные krug1 и т.д. private (скорее всего) и их не видно вне area1.

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

Регистрация: Mar 2013
Сообщений: 290
KumoKairo, но тогда я что-то общую картинку не сложу до конца.

Цитата:
В первом примере переменные krug1 и т.д. никакого отношения к кнопкам в area1 не имеют)
Вот есть родитель-контейнер, и у него экземпляр area1, и вот есть один его ребёнок-внутренний-объект, и у него экземпляр: krug1.

И как же тогда обратится к этому ребёнку, если нет никакого отношения?

Цитата:
Во втором случае ошибка из-за того, что переменные krug1 и т.д. private (скорее всего) и их не видно вне area1.
Сделал все переменные public, но ошибка для формата:
Код AS3:
area1.krug1.addEventListener(MouseEvent.CLICK, genericClickListener);
осталась.

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Покажите код Area1
Я не помню точно насчет нативных событий на флеш, но там можно определять, всплывает ли оно пузырьком по своим родителям или нет.

Старый 15.08.2013, 15:22
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 17  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Или я не вник особо, или у вас тут каша какая-то.
Вы что же это, рекомендуете вешать один слушатель на контейнер с кружочками и определять кружок по currentTarget?
__________________
Поймай яблоко 2!

Старый 15.08.2013, 15:41
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 18  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
KumoKairo, У него нет кода, это тупо квадрат (содержащий внутри кружки) созданный вручную в редакторе.
У него имя класса, как и у кружков, сделано посредством галочки Export to ActionScript.

Zebestov, ну вот выше в трэде мы выяснили что задачу легко решить через .target
А если попробовать сделать то же самое с currentTarget, то возникает вопрос, как это разрулить, с учетом того, что родительский объект содержит в себе объекты, на которых слушатели повешены.

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Я бы повесил всё таки один addEventListener на общий контейнер. А для кругов установил свойство
Код AS3:
mouseChildren = false;
и использовал бы target.
__________________
return this...

Старый 15.08.2013, 16:30
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 20  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от Fogflasher Посмотреть сообщение
Zebestov, ну вот выше в трэде мы выяснили что задачу легко решить через .target
Что значит "легко"? Других вариантов просто нет. Предложение использовать currentTarget — ошибка.

Цитата:
Сообщение от Fogflasher Посмотреть сообщение
А если попробовать сделать то же самое с currentTarget, то возникает вопрос, как это разрулить, с учетом того, что родительский объект содержит в себе объекты, на которых слушатели повешены.
Эти слушатели имеют отношение к решению данной задачи? Если да — пускай живут своей жизнью параллельно со слушателем на контейнере. Если нет — для чего они там?

Добавлено через 2 минуты
Цитата:
Сообщение от AlexCooper Посмотреть сообщение
Я бы повесил всё таки один addEventListener на общий контейнер. А для кругов установил свойство
Код AS3:
mouseChildren = false;
и использовал бы target.
В таком случае target всегда указывал бы на контейнер, делая его таким же бесполезным, как и currentTarget.
Нужно как раз наоборот
Код AS3:
mouseEnabled = false;
mouseChildren = true;
__________________
Поймай яблоко 2!

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

Теги
addeventlistener , movieclip , единый слушатель
Опции темы
Опции просмотра

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

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


 


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


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