Проблема с фильтром: спрайт больше не отправляет MouseEvents - PullRequest
2 голосов
/ 31 мая 2011

Я имею дело с довольно простой проблемой: после применения BevelFilter к спрайту, он больше не отправляет MouseEvents.Я попытался снова включить buttonMode, но безуспешно.Я что-то упускаю элементарно, или это ошибка Flash?Это также происходит с DropShadowFilter.

Редактировать: вот код.Кажется, проблема связана с комбинацией маски и фильтра:

        var s:Sprite = new Sprite();
        s.graphics.beginFill(0xff0000,1);
        s.graphics.drawRect(0,0,50,50);
        s.buttonMode = true;
        s.addEventListener(MouseEvent.CLICK, onClick);
        this.addChild(s);
        s.x = s.y = 100;
        var m:Sprite = new Sprite();
        m.graphics.beginFill(0,1);
        m.graphics.drawRect(0,0,50,50);
        s.addChild(m);

        // comment one of these two lines out and it works
        s.filters = [new BevelFilter()];
        s.mask = m;

Я пытался установить mouseChildren, mouseEnabled и buttonMode маски в значение true, но безрезультатно.Спасибо!

Ответы [ 3 ]

3 голосов
/ 31 мая 2011

Я попытался запустить ваш код и получил тот же результат.Странно.

В любом случае, я смог заставить его работать, создав спрайт-контейнер и применив там фильтр:

var c:Sprite = new Sprite();
this.addChild(c);

var s:Sprite = new Sprite();
s.graphics.beginFill(0xff0000,1);
s.graphics.drawRect(0,0,50,50);
s.buttonMode = true;
s.addEventListener(MouseEvent.CLICK, onClick);
c.addChild(s);
s.x = s.y = 100;
var m:Sprite = new Sprite();
m.graphics.beginFill(0,1);
m.graphics.drawRect(0,0,50,50);
s.addChild(m);

c.filters = [new BevelFilter()];
s.mask = m;

Будет ли это решение работать в вашем случае?

0 голосов
/ 31 мая 2011

Проблема в том, что вы добавляете маску, чтобы она была дочерней по отношению к объекту, который вы пытаетесь замаскировать, и не устанавливаете маску там, где находится исходный объект.Вот фиксированный код:

import flash.events.MouseEvent;

var s:Sprite = new Sprite();
s.graphics.beginFill(0xff0000,1);
s.graphics.drawRect(0,0,50,50);
s.buttonMode = true;
s.addEventListener(MouseEvent.CLICK, onClick);
this.addChild(s);
s.x = s.y = 100;
var m:Sprite = new Sprite();
m.graphics.beginFill(0,1);
m.graphics.drawRect(0,0,50,50);
m.x = m.y = 100;
this.addChild(m);

// comment one of these two lines out and it works
s.filters = [new BevelFilter()];
s.mask = m;

function onClick(e:MouseEvent):void
{
    trace('clicked');
}
0 голосов
/ 31 мая 2011

Очень сложно точно сказать, в чем проблема без кода. Но установка:

mouseChildren = false;

Может хотя бы устранить некоторые потенциальные проблемы.

Я не верю, что он имеет прямое отношение к BevelFilter, вы можете удалить только BevelFilter, и он отправляет MouseEvents? Я был бы удивлен, если бы это было так.

Еще одна вещь, которую нужно проверить - где установлен eventListener? Возможно ли, что каким-то образом вы на самом деле не добавляете eventListener в данном случае?

Действительно трудно что-либо делать, кроме теоретизирования без кода.

...