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

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

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

Регистрация: Oct 2012
Сообщений: 191
Question Определение клика - кликнуть на ребенка, игнорируя родителя

Здравствуйте! Ситуация следующая: есть один большой спрайт с событиями мыши, и в нем спрайты поменьше со своими слушателями мыши. Задача: определить если клик произошел над ребенком большого спрайта, то чтоб выполнялись функции ребенка, а родителя игнорировались. Если же на месте клика пусто, то выполнялись функции родителя.
В общем, вопрос скорее сводится к определению нажат ли ребенок спрайта или нет. В остальном, я думаю разберусь. Но если времени не жалко,можно и полную картинку вкратце обрисовать. Спасибо!

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
 
 
	public class Main extends Sprite {
 
		private var _parentObject:	Sprite	= new Sprite();
 
		public function Main() {
			_parentObject.graphics.beginFill(0xFFFF00);
			_parentObject.graphics.drawRect(0, 0, 500, 300);
			_parentObject.graphics.endFill();
			addChild(_parentObject);
			for (var i:int = 0; i < 10; i++) {
				var child:Sprite = new Sprite();
				child.graphics.beginFill(0xFFFFFF * Math.random());
				child.graphics.drawCircle(0, 0, 50);
				child.graphics.endFill();
				child.x = 500 * Math.random();
				child.y = 300 * Math.random();
				_parentObject.addChild(child);
			}
			addEventListener(MouseEvent.CLICK, onClick, true);
		}	
 
		private function onClick(e:MouseEvent):void {
			if (e.target == _parentObject) {
				trace("Щелчок по родителю");
			} else {
				trace("Щелчок по", e.target);
			}
		}
	}
}

Старый 17.05.2013, 20:24
vitamin4er вне форума Посмотреть профиль Отправить личное сообщение для vitamin4er Найти все сообщения от vitamin4er
  № 3  
Ответить с цитированием
vitamin4er

Регистрация: Oct 2012
Сообщений: 191
да, трейс показывает нажатие по ребенкам, но функции родителя все равно не игнорируются

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

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

Старый 17.05.2013, 20:32
vitamin4er вне форума Посмотреть профиль Отправить личное сообщение для vitamin4er Найти все сообщения от vitamin4er
  № 5  
Ответить с цитированием
vitamin4er

Регистрация: Oct 2012
Сообщений: 191
Цитата:
Сообщение от Babylon Посмотреть сообщение
запрети распространение
звучит дельно, подскажите незнающему как. Спасибо!

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

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

Старый 17.05.2013, 21:18
vitamin4er вне форума Посмотреть профиль Отправить личное сообщение для vitamin4er Найти все сообщения от vitamin4er
  № 7  
Ответить с цитированием
vitamin4er

Регистрация: Oct 2012
Сообщений: 191
В конкретной ситуации я разобрался! теперь рубрика необязательных вопросов: а запрещать распространения события в каждой ситуации по разному надо?

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
по ситуации
__________________
местонахождение

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
а запрещать распространения события в каждой ситуации по разному надо?
смотреть в сторону Event#stopPropagation и Event#stopImmediatePropagation
а вообще да, по ситуации.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Подписываться надо туда, куда нужно, а не на всю дедушкину деревню.
В Вашем случае был нужен спрайт, залитый прозрачным цветом и лежащий на нулевой глубине, под детишками. И на него подписываться. Или, возможно, там уже есть нечто подобное на фоне, не суть важно. Суть в том, что сама логика "клик по всему контейнеру" здесь неправильная. Потому и приходится потом огороды городить и сортировать весь колхоз. Вам был нужен клик не по контейнеру, а по пространству между детишками, то есть по тому, что лежит под ними. Так в чем смысл извращаться с кастингами и тем более с остановками распространения? Давайте тогда всегда подписываться на клик по стейджу и потом разгребаться с таргетами?
__________________
Reality.getBounds(this);

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

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

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


 


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


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