Actionscript 3 过滤器问题:sprite不再发送MouseeEvents

Actionscript 3 过滤器问题:sprite不再发送MouseeEvents,actionscript-3,filter,mouseevent,sprite,Actionscript 3,Filter,Mouseevent,Sprite,我正在处理一个非常简单的问题:在对雪碧应用斜面过滤器后,它似乎不再发送鼠标事件。我试图重新启用buttonMode,但没有成功。我是错过了一些非常基本的东西,还是这是一个Flash bug?DropShadowFilter也会出现这种情况 编辑:这里有一些代码。问题似乎来自遮罩和过滤器的组合: var s:Sprite = new Sprite(); s.graphics.beginFill(0xff0000,1); s.graphics.draw

我正在处理一个非常简单的问题:在对雪碧应用斜面过滤器后,它似乎不再发送鼠标事件。我试图重新启用buttonMode,但没有成功。我是错过了一些非常基本的东西,还是这是一个Flash bug?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、MouseeEnabled和buttonMode的面具设置为true,但没有结果。谢谢

如果没有代码,很难说到底是什么问题。但背景:

mouseChildren = false;
至少可以消除一些潜在的问题

我不相信它与Beverfilter有直接关系,你能移除Beverfilter并发送鼠标事件吗?如果是这样的话,我会很惊讶

还要检查的另一件事是eventListener设置在哪里?在某种程度上,您是否可能没有在给定的情况下实际添加eventListener


除了在没有代码的情况下理论化之外,真的很难做任何事情。

我试着运行你的代码,得到了同样的结果。奇怪

无论如何,我能够通过创建“容器”精灵并在那里应用过滤器使其工作:

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;

该解决方案在您的情况下有效吗?

问题在于,您添加的掩码是您试图掩码的对象的子对象,而您没有将掩码设置在原始对象所在的位置。以下是固定代码:

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');
}

你能把你的密码寄出去吗?任何过滤器都不应单独导致此功能,我不知道有任何错误,在使用flashAscension系统的近5年中也没有遇到过此错误/行为。Aaron,谢谢你的回答。我只能在几个小时内测试它,并会让你知道我的结果!嗨,谢谢你的回答。问题似乎来自过滤器和遮罩的组合。下面是一些示例代码:代码没有出现在您的评论Marc Andre中,这是一件好事。。。能否根据my&Prototypic的要求更新您的问题以显示一些源代码?我们都很乐意帮助您,但正如Prototypic所指出的,任何人所能做的就是猜测。您的答案也是正确的,但这并不是因为奇怪或未知的原因,为什么他的原始代码不起作用。我在我的回答中贴出了原因。不过我会投票,因为基本上你也解决了这个问题。如果这个答案被选中,我会给它添加原因。小时候的面具确实是个问题。所以我选择这个答案是因为它很有效,而且在我尝试过的所有其他解决方案中,它所产生的样板最少。请不要100%地引用我的话,但我相信一个对象的面具必须占据与面具目标相同的范围(在显示列表上)。例如,不能将movieclip的遮罩设置为该movieclip的子项之一。我认为这是正确的,因为这将在渲染代码中创建一个循环引用,告诉掩码屏蔽自己。我同意添加剪辑的掩码作为其子项可能有点奇怪,也许这不是最佳做法,但是请记住,OP的代码——作为子项添加掩码——只要不添加过滤器就可以工作。所以,仅仅在孩子的时候加上面具本身并不是问题。是的,事实上这是一件奇怪的事情。我不认为将mask作为子元素添加到masked元素中会导致这个问题,因为我发现:如果你使masked精灵足够大(例如400*400px),问题就会消失。无论如何,谢谢你,阿森松岛系统!