Форум 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=187767)

Fartoviy_Spec 23.11.2012 21:02

Перекрывание объекта
 
Есть 2 объекта. Один частично накрыт другим. по клику мышкой по нему в области не перекрывающей, происходит вызов функции, а по клику в области где перекрывает другой объект не происходит вызов функции.
Код AS1/AS2:

var a1:BitmapData = new BitmapData(80,80,true,0x80FF3300);
var b1:Bitmap = new Bitmap(a1);
var c1:MovieClip=new MovieClip();
c1.addChild(b1);
addChild(c1)
c1.y=25
c1.addEventListener(MouseEvent.MOUSE_DOWN, onMD);
 
var a2:BitmapData = new BitmapData(80,80,true,0xFF0450FF);
var b2:Bitmap = new Bitmap(a2);
var c2:MovieClip=new MovieClip();
c2.addChild(b2);
addChild(c2)
 
function onMD(e:Event):void
{
        trace(e.currentTarget);
}

Как сделать, чтобы при клике на область где есть объект, но его перекрывает другой все равно объект улавливал клик?

Korchy 23.11.2012 21:10

Сделать свой hitTest и через hitTestPoint смотреть, на какой конкретно объект попала точка клика.

Fartoviy_Spec 23.11.2012 21:12

Так она попадает естественно на верхний объект, а нужно чтобы улавливал клик под ним который находится

Korchy 23.11.2012 21:15

Я делал так:
- перехватывал клик
- получал все объекты под точкой клика (getObjectsUnderPoint)
- начиная с верхнего искал первый, на котором точка клика непрозрачна (hitTestPoint)
- отправлял событие клик полученному объекту

Fartoviy_Spec 23.11.2012 21:18

спасибо, щас попробую, а вот 4 пункт, как это отправить событие объекту?

Korchy 23.11.2012 21:26

dispatchEvent(new MouseEvent(MouseEvent.CLICK))

silin 23.11.2012 21:44

а по простому ?
Код AS3:

c2.mouseEnabled = false;


Fartoviy_Spec 23.11.2012 22:01

Спасибо. И первый вариант получился, но второй гораздо проще)

Nickolai 23.11.2012 22:21

У меня кастате тоже такая проблема, но вот
Код AS1/AS2:

NumberPage1 = visual.NumberPage1;
NumberPage1.addEventListener(MouseEvent.CLICK, btnClickHandler);
NumberPage1.mouseEnabled = false;

Ничего не катит...(

silin 23.11.2012 22:31

>> Ничего не катит...(
осмелюсь предположить, что у тебя мешает не c2 (это был мувик из примера Fartoviy_Spec), а кто-то другой, вот ему и надо запретить реагировать на мышь

Nickolai 23.11.2012 22:34

Да я уже понял что скосячил, и отредактировал код) Гребанный копипаст)) Вот исправил но таже ерунда...

silin 23.11.2012 22:57

Код AS3:

NumberPage1.addEventListener(MouseEvent.CLICK, btnClickHandler);
NumberPage1.mouseEnabled = false;

непонятно чего ты ожидаешь присвоив объекту мышиный обработчик и тут же запретив ему реагировать на мышь..
предполагается, что мы должны догадаться какая именно 'ерунда' происходит
mouseEnabled = false нужно определить объекту, который мешает, если что

Nickolai 23.11.2012 23:07

Ой спасибки вам ребят))

Korchy 23.11.2012 23:14

Цитата:

Сообщение от silin (Сообщение 1105837)
а по простому ?
Код AS3:

c2.mouseEnabled = false;


А как узнать, по с1 или по с2 был клик?

silin 23.11.2012 23:41

так, например
Код AS3:

c1.name = "c1";
c2.name = "c2";
function onMD(e:Event):void
{
        trace(e.currentTarget.name);
}


Korchy 24.11.2012 10:40

Цитата:

Сообщение от silin (Сообщение 1105859)
так, например
[

Т.е. switdh-case растянуть. Разве это метод? :)

silin 24.11.2012 11:06

естественно switch не слишком кошерный вариант, если нужен выбор из многих, для этого есть Dictionary

Korchy 24.11.2012 13:13

Цитата:

Сообщение от silin (Сообщение 1105899)
естественно switch не слишком кошерный вариант, если нужен выбор из многих, для этого есть Dictionary

Такой способ тоже может быть. Но мне кажется, мой вариант универсальнее.


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

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