gpt4 book ai didi

actionscript-3 - Actionscript 3 和动态蒙版

转载 作者:行者123 更新时间:2023-12-04 06:49:09 24 4
gpt4 key购买 nike

我有一个容器 MovieClip,用作我需要屏蔽的内容区域。当我使用 Shape 在该容器内创建 mask 时,我似乎无法与我在此处创建的其他容器的内容进行交互,例如按钮等。

这就是我在代码中所做的(我省略了所有导入等):

class MyContainer extends MovieClip
{
protected var masker : Shape = null;
protected var panel : MyPanel = null;

public function MyContainer()
{
this.masker = new Shape();
this.masker.graphics.clear();
this.masker.graphics.beginFill( 0x00ff00 );
this.masker.graphics.drawRect(0, 0, 1, 1); // 1x1 pixel.
this.masker.graphics.endFill();
addChild( this.masker );

this.panel = new MyPanel(); // has buttons and stuff.
addChild( this.panel );

this.mask = this.masker;
}

// called by it's parent when the stage is resized.
public function resize( width : Number, height : Number ) : void
{
// set the mask to half the size of the stage.
this.masker.width = width / 2;
this.masker.height = height / 2;

// set the panel to half the size of the stage.
this.panel.resize( width / 2, height / 2);
}
}

当我将 mask (形状)添加到显示层次结构时,我无法再与 MyPanel 中定义的任何按钮进行交互。但是,将掩码添加到显示层次结构确实让我可以与 MyPanel 上的内容进行交互,但掩码的大小/位置不正确。我猜想当 mask 未添加到显示层次结构时,它位于电影的左上角(虽然我无法证明这一点)。

如何正确设置 mask 大小/位置并让用户与 MyPanel 中的按钮交互?

最佳答案

this.masker.mouseEnabled = false; //set on this.masker

那应该行得通。现在它正在拦截您的事件,然后再到达容器中的任何其他内容。不能 100% 确定,但我相信面具会放在容器的顶部。另一种选择是在 displayList 底部向 MyContainer 添加另一个屏蔽子项,并将面板添加为其同级。不过,您仍然希望在蒙面 Sprite /mc 上将 mouseEnabled 和 mouseChildren 设置为 false。

package
{
import flash.display.Shape;
import flash.display.Sprite;

public class MyContainer extends Sprite
{
protected var masker : Shape = null;
protected var panel:MyPanel;

public function MyContainer()
{

this.masker = new Shape();
this.masker.graphics.clear();
this.masker.graphics.beginFill( 0x00ff00 );
this.masker.graphics.drawRect(0, 0, 1, 1); // 1x1 pixel.
this.masker.graphics.endFill();
addChild( this.masker );

this.panel = new MyPanel();
this.addChild(panel);
this.mask = this.masker;
}

// called by it's parent when the stage is resized.
public function resize( width : Number, height : Number ) : void
{
// set the mask to half the size of the stage.
this.masker.width = width / 2;
this.masker.height = height / 2;

// set the panel to half the size of the stage.
}
}
}

-

package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;

public class MyPanel extends Sprite
{
public function MyPanel()
{
this.graphics.beginFill(0xFF0000)
this.graphics.drawRect(0,0,10,10);
this.addEventListener(MouseEvent.MOUSE_OVER, this.handleMouseOver)
this.addEventListener(MouseEvent.MOUSE_OUT, this.handleMouseOut)
}

public function handleMouseOver(event:Event):void
{
this.graphics.clear();
this.graphics.beginFill(0x00FF00)
this.graphics.drawRect(0,0,10,10);
}

public function handleMouseOut(event:Event):void
{
this.graphics.clear();
this.graphics.beginFill(0xFF0000)
this.graphics.drawRect(0,0,10,10);
}
}
}

关于actionscript-3 - Actionscript 3 和动态蒙版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1089891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com