PDA

Просмотр полной версии : mouseEnabled = false не работает


Rembrant
25.04.2013, 14:12
Имеется мувик template с двумя кнопками. На одну из кнопок должна указывать анимированная стрелка, которую я аддчайлдю в этот же template и делаю ей
arrow.mouseChildren = arrow.mouseEnabled = false;
При этом стрелка отчасти перекрывает вторую кнопку. Кнопка в месте перекрытия не прокликивается.
Повесил слушатель на MouseEvent.CLICK на stage, оказалось, событие при клике по стрелке ловит сам template.
Не могу понять, почему так происходит, ведь я вырубил mouseEnabled стрелки. Подскажите пожалуйста, как можно решить эту проблему.

chamele0n
25.04.2013, 14:32
mouseEnabled означает что вы отключаете события мыши на этом обьекте, это не означает что обьект будет пропускать события сквозь себя

Rembrant
25.04.2013, 14:38
chamele0n, и как быть?

Rembrant
25.04.2013, 14:39
P.S. неправильно сформулировал изначальную задачу. кнопка 2 находится не в template, а в другом спрайте. например как на рисунке

bav
25.04.2013, 14:41
Rembrant, приведите, пожалуйста, побольше кода, а то трудно интерпретировать словесное описание.

chamele0n
25.04.2013, 14:45
ну логически так и должно работать, если тебе нужно чтобы стрелка не мешала и перекрывала одновременно, тогда можно сделать так:
1. создаем MovieClips с кнопками
2. создаем стрелку
3. создаем прозрачные кнопки
4. вешаем события на прозрачные кнопки, при событиях меняем\анимируем MovieClips в пункте 1

Добавлено через 2 минуты
ну или убрать стрелку чтобы не перекрывала

Rembrant
25.04.2013, 14:48
bav, вот с таким кодом красная стрелка не даёт кликать кнопку btn1
import flash.events.MouseEvent;

template.btn0.buttonMode = template2.btn1.buttonMode = true;
var arrow:Arrow = new Arrow();
arrow.x = -35;
arrow.y = 131;
arrow.mouseEnabled = arrow.mouseChildren = false;
template.addChild(arrow);
template2.btn1.addEventListener(MouseEvent.CLICK, onBtn1);

function onBtn1(event:MouseEvent):void
{
trace("1");
}

bav
25.04.2013, 15:22
Добавьте строчку
template.mouseEnabled = false;
Вот смоделированный пример:

// Создаем объекты
var template:Sprite = new Sprite();
var template2:Sprite = new Sprite();
var btn0:Sprite = new Sprite();
var btn1:Sprite = new Sprite();
var arrow:Sprite = new Sprite();

// Рисуем объекты
var g:Graphics = template.graphics;
g.lineStyle(1);
g.beginFill(0xAAAAAA);
g.drawRect(0, 0, 300, 300);
g.endFill();

g = template2.graphics;
g.lineStyle(1);
g.beginFill(0x888888);
g.drawRect(0, 0, 100, 200);
g.endFill();

g = btn0.graphics;
g.lineStyle(1);
g.beginFill(0x00FF00);
g.drawRect(0, 0, 50, 50);
g.endFill();

g = btn1.graphics;
g.lineStyle(1);
g.beginFill(0xFF0000);
g.drawRect(0, 0, 50, 50);
g.endFill();

g = arrow.graphics;
g.lineStyle(1);
g.beginFill(0x00FFFF);
g.drawCircle(0, 0, 25);
g.endFill();

// Располагаем объекты
template.x = 30;
btn1.x = btn1.y = 10;
btn0.x = btn0.y = 20;
arrow.x = 10;
arrow.y = 30;

// Добавляем на сцену
addChild(template2);
addChild(template);
template2.addChild(btn1);
template.addChild(btn0);
template.addChild(arrow);

// Функции clk и clk0 выводят соответственно
// "btn1 clicked" и "btn0 clicked"
btn1.addEventListener(MouseEvent.CLICK, clk);
btn0.addEventListener(MouseEvent.CLICK, clk0);
arrow.mouseEnabled = false;
template.mouseEnabled = false;

Zebestov
25.04.2013, 16:30
mouseEnabled означает что вы отключаете события мыши на этом обьекте, это не означает что обьект будет пропускать события сквозь себя
Вот это мы приехали.

Rembrant
26.04.2013, 00:35
bav, большое спасибо.