这是我正在研究的组件:
这是组件的类:
public class PromoPanel extends Canvas
{
private var corner:PromoCorner;
private var text:Text;
private var roundedMask:Sprite;
private var cornerUpdated:Boolean = false;
private var textUpdated:Boolean = false;
private var container:Canvas;
public function PromoPanel()
{
super();
// Defining corner's properties
corner.addEventListener(MouseEvent.Roll_Over, objectHandler);
corner.addEventListener(MouseEvent.Roll_Out, objectHandler);
// Defining text's properties
roundedMask = new Sprite;
roundedMask.mouseChildren = false;
roundedMask.mouseEnabled = false
container = new Canvas;
container.percentWidth = 100;
container.minHeight = 100;
container.maxHeight = 345;
container.setStyle('backgroundColor', 0xffffff);
container.addChild(corner);
container.addChild(text);
container.horizontalScrollPolicy = 'off';
this.addChild(container);
}
public function update():void{
var s:String = 'blabla';
text.addEventListener(FlexEvent.UPDATE_COMPLETE, updateHandler);
text.text = s;
corner.addEventListener(MyEvent.CORNER_UPDATED, updateHandler);
corner.build();
}
private function updateHandler(e:Event):void{
switch(e.type){
case MyEvent.CORNER_UPDATED:
cornerUpdated = true;
corner.removeEventListener(MyEvent.CORNER_UPDATED, updateHandler);
break;
case FlexEvent.UPDATE_COMPLETE:
textUpdated = true;
text.removeEventListener(FlexEvent.UPDATE_COMPLETE, updateHandler);
break;
}
if(cornerUpdated && textUpdated){
roundedMask.graphics.clear();
roundedMask.graphics.beginFill(0xFFFFFF);
roundedMask.graphics.drawRoundRect(0, 0, container.width, container.height, 20, 20);
roundedMask.graphics.endFill();
this.mask = roundedMask;
dispatchEvent(new MyEvent(MyEvent.PROMO_UPDATED));
}
var glow:DropShadowFilter = new DropShadowFilter(0,0,0x2E2E2E,0.6,10,10,0.5,1);
this.filters = [glow];
}
private function objectHandler(e:Event):void{
switch(e.type){
case MouseEvent.ROLL_OUT:
trace('out' + mouseX + '/' + mouseY);
break;
case MouseEvent.ROLL_OVER:
trace('on' + mouseX + '/' + mouseY);
break;
}
}
...
}
更详细的理解:角是带有(i)和'Promotion'的黑角,文本是一些随机文本,可以显示在白色剩余空间中,容器包含角和文本,最后这个类包含容器!
我需要做什么?
我需要从角落检索事件mouseevent.rollover / rollout。
出了什么问题?
1.当我将面具放在容器(container.rawchildren.addchildren + container.mask = mask)和容器上的dropshacefilter(container.filters = [glow])时,我无法检测鼠标事件。
2.当我将面具放在promopanel(this.rawchildren.addchildren + this.mask = mask)和promopanel上的dropshafilter(this.filters = [glow])时,我无法检测到鼠标事件。
3.当我将面罩放在一个组件中而过滤器放在另一个组件中时,它也不起作用
4.如果我取下面膜或过滤器,它的作用!但我需要他们两个......
那么,有没有人知道如何使这项工作?我一直在试图寻找过滤器,掩码和鼠标事件的问题,但没有找到任何可以启发这个问题的东西......
任何事情都会有所帮助,如果事情不够清楚,可随意提问。
THX!
问候,
BS_C3
答案 0 :(得分:1)
嗯,我觉得有点回答我自己的问题:) 我确信我做过的组合(肯定不会)有效:如果我将面具放在容器上并将过滤器放在promopanel上,它就可以工作....
经过一番思考,这是有道理的 我注意到,将掩码和过滤器放在同一个组件中,不知何故,使它对mouseevents充耳不闻。但是,当只使用一个或另一个一切正常 但是,将面具放在promopanel上并且容器中的过滤器不起作用。而且,这样,掩码会隐藏过滤器(我需要!) 将掩码放在没有过滤器的容器上为我工作,听众可以接收鼠标事件。然后将过滤器添加到promopanel并没有让容器听到角落的事件...
希望这可能有助于某人:)
问候。
BS_C3