Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Слушать события двух клипов друг под другом. (http://www.flasher.ru/forum/showthread.php?t=160944)

cv' 19.07.2011 14:19

Слушать события двух клипов друг под другом.
 
Доброго вам, уважаемые 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();
}


MXPain 19.07.2011 14:30

Код AS3:

клип_который_не_должен_срабатывать.mouseEnabled = false;
клип_который_не_должен_срабатывать.mouseChildren = false;


cv' 19.07.2011 14:31

Цитата:

Сообщение от MXPain (Сообщение 1012815)
Код AS3:

top.mouseEnabled = false;
top.mouseChildren = false;


Так topChild не работает. Не совсем понял, как это может помочь...

MXPain 19.07.2011 14:35

ну так всем неинтерактивным поставьте данное свойство

cv' 19.07.2011 14:42

Всего три клипа
1) Нижний - интерактивный
2) Верхний - НЕ интерактивный
3) ребенок верхнего - интерактивный

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

MXPain 19.07.2011 15:03

ну можно через event.target определять что именно делать

alatar 19.07.2011 15:18

Подписать top на мышиные события, которые необходимо блокировать. В обработчике написать:
Код AS3:

event.stopPropagation();


cv' 19.07.2011 15:18

Цитата:

ну можно через event.target определять что именно делать
у нижнего клипа эвент не срабатывает.
Верхний не интерактивный.
Ребенок верхнего - единственный, у которого что-то происходит и у него всегда target будет один и тот же. Я снова не понял, как это может помочь.

alatar 19.07.2011 15:23

Изъясняйтесь яснее, вам надо что-бы top не блокировал bottom?

cv' 19.07.2011 15:24

Цитата:

Сообщение от alatar (Сообщение 1012865)
Подписать top на мышиные события, которые необходимо блокировать. В обработчике написать:
Код AS3:

event.stopPropagation();


Он итак блокирует MOUSE_DOWN, мне нужно чтобы он наоборот его пропускал.
Я сдалал так:
Код AS3:

top.addEventListener(MouseEvent.MOUSE_UP, function (event:MouseEvent)
{
        trace('top')
        event.stopPropagation();
});

Трейсы случаются, но нижний клип по прежнему нем и грух.

Добавлено через 47 секунд
Цитата:

Сообщение от alatar (Сообщение 1012868)
Изъясняйтесь яснее, вам надо что-бы top не блокировал bottom?

Я в самом верху написал:
"Клипы bottom и top одинакового размера, но top не интерактивный, однако блокирует события bottom."


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

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