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

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

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

Регистрация: Apr 2010
Адрес: Москва Кузминки
Сообщений: 109
Post Слушать события двух клипов друг под другом.

Доброго вам, уважаемые flash-самураи.
Вот очередной тупой вопрос про мышиные слушатели и дисплей лист.

Есть задача ловить мышиные события двух клипов друг под другом.
А точнее так:

0 - stage
0.1 - bottom (MouseDown)
0.2 - top
0.2.1 - topChild (MouseDown)

Клипы bottom и top одинакового размера, но top не интерактивный, однако блокирует события bottom.
Клип topChild интерактивный, и только его события срабатывают.
Как можно заставить эту схему работать?
Пузыри, видимо тут не помогут, потому что у клипов разные родители.


Код AS3:
import flash.display.Sprite;
import flash.display.Graphics;
import flash.events.MouseEvent;
 
var bottom:Sprite = new Sprite()
addChild(bottom);
draw(bottom,0xFF0000,1);
 
var top:Sprite = new Sprite();
addChild(top);
draw(top,0x00FF00,0.5);
 
var topChild:Sprite = new Sprite();
top.addChild(topChild);
draw(topChild,0x0000FF,1,true);
 
bottom.addEventListener(MouseEvent.MOUSE_DOWN, function (event:MouseEvent){trace('bottoom')});
topChild.addEventListener(MouseEvent.MOUSE_DOWN, function (event:MouseEvent){trace('topChild')});
 
function draw(sprite:Sprite,color:uint,alpha:Number,small:Boolean = false)
{
	sprite.x = 
	sprite.y = small ? 25 : 50;
	var size:Number = small ? 50 : 100;
	var graph:Graphics = sprite.graphics;
	graph.beginFill(color,alpha);
	graph.drawRect(0,0,size,size);
	graph.endFill();
}

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

Регистрация: Dec 2008
Сообщений: 305
Записей в блоге: 1
Код AS3:
клип_который_не_должен_срабатывать.mouseEnabled = false;
клип_который_не_должен_срабатывать.mouseChildren = false;

Старый 19.07.2011, 14:31
cv' вне форума Посмотреть профиль Отправить личное сообщение для cv' Найти все сообщения от cv'
  № 3  
Ответить с цитированием
cv'

Регистрация: Apr 2010
Адрес: Москва Кузминки
Сообщений: 109
Цитата:
Сообщение от MXPain Посмотреть сообщение
Код AS3:
top.mouseEnabled = false;
top.mouseChildren = false;
Так topChild не работает. Не совсем понял, как это может помочь...


Последний раз редактировалось cv'; 19.07.2011 в 14:34.
Старый 19.07.2011, 14:35
MXPain вне форума Посмотреть профиль Отправить личное сообщение для MXPain Найти все сообщения от MXPain
  № 4  
Ответить с цитированием
MXPain
 
Аватар для MXPain

Регистрация: Dec 2008
Сообщений: 305
Записей в блоге: 1
ну так всем неинтерактивным поставьте данное свойство

Старый 19.07.2011, 14:42
cv' вне форума Посмотреть профиль Отправить личное сообщение для cv' Найти все сообщения от cv'
  № 5  
Ответить с цитированием
cv'

Регистрация: Apr 2010
Адрес: Москва Кузминки
Сообщений: 109
Всего три клипа
1) Нижний - интерактивный
2) Верхний - НЕ интерактивный
3) ребенок верхнего - интерактивный

Если верхнему сделать mouseChildren = false, его ребенок поломается. А это не служит достижению цели, где работают оба интерактивных клипа.

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

Регистрация: Dec 2008
Сообщений: 305
Записей в блоге: 1
ну можно через event.target определять что именно делать

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Подписать top на мышиные события, которые необходимо блокировать. В обработчике написать:
Код AS3:
event.stopPropagation();
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Apr 2010
Адрес: Москва Кузминки
Сообщений: 109
Цитата:
ну можно через event.target определять что именно делать
у нижнего клипа эвент не срабатывает.
Верхний не интерактивный.
Ребенок верхнего - единственный, у которого что-то происходит и у него всегда target будет один и тот же. Я снова не понял, как это может помочь.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Изъясняйтесь яснее, вам надо что-бы top не блокировал bottom?
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 19.07.2011, 15:24
cv' вне форума Посмотреть профиль Отправить личное сообщение для cv' Найти все сообщения от cv'
  № 10  
Ответить с цитированием
cv'

Регистрация: Apr 2010
Адрес: Москва Кузминки
Сообщений: 109
Цитата:
Сообщение от alatar Посмотреть сообщение
Подписать top на мышиные события, которые необходимо блокировать. В обработчике написать:
Код AS3:
event.stopPropagation();
Он итак блокирует MOUSE_DOWN, мне нужно чтобы он наоборот его пропускал.
Я сдалал так:
Код AS3:
top.addEventListener(MouseEvent.MOUSE_UP, function (event:MouseEvent)
{
	trace('top')
	event.stopPropagation();
});
Трейсы случаются, но нижний клип по прежнему нем и грух.

Добавлено через 47 секунд
Цитата:
Сообщение от alatar Посмотреть сообщение
Изъясняйтесь яснее, вам надо что-бы top не блокировал bottom?
Я в самом верху написал:
"Клипы bottom и top одинакового размера, но top не интерактивный, однако блокирует события bottom."

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

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

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


 


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


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