如何以编程方式删除Flash Professional中定义的掩码?

时间:2012-04-10 04:21:18

标签: flash actionscript flash-cs5 mask

我意识到这是一个全新的问题,但它让我疯狂......

在Flash Professional中我有一个影片剪辑,比如1000px高和50px宽。我把它包含在掩模层内(下面),掩模层高100px,宽50px。在我的程序中,我垂直移动影片剪辑,正如预期的那样,它被屏蔽,这样我只能垂直看到100px。

我的问题是:如何从影片剪辑中删除遮罩?当我在Flash Builder中调试影片剪辑时,其.mask属性为null。但 蒙面......

我错过了什么?

提前致谢,

格雷格

5 个答案:

答案 0 :(得分:1)

格雷格是对的。您可能认为可以通过DisplayObject的掩码属性访问在Flash IDE中设置的掩码,但您不能。在flash中设置的掩码在actionscript中始终为null。

删除掩码的hacky版本是你可以尝试

displayObjectWithMaskOnIt.parent.removeChild(displayObjectWithMaskOnIt) 

然后

displayObjectWithMaskOnIt.parent.addChild(displayObjectWithMaskOnIt). 

答案 1 :(得分:0)

通过actionscript检查掩码是否适用于MovieClip的父级:

MovieClip(movicClipInstanceName_mc.parent).mask

如果是,则将其设置为... .mask = null;

通常我在时间轴中声明的任何面具我都不会在我的AS代码中混乱,因为对我来说,我认为它是一个永久的条件。如果您希望以后以编程方式更改它,我建议在AS代码中设置掩码属性。

movicClipInstanceName_mc.mask = someOtherMovieClipInstanceThatIsMyMask_mc;

对我这样做,这种方式感觉更清洁,我觉得我可以更好地控制它。

答案 2 :(得分:0)

为大影片剪辑(比如big_mc)提供实例名称,然后

big_mc.mask = null; 

答案 3 :(得分:0)

来自http://forum.starling-framework.org/topic/weird-how-to-read-mask-info-from-an-swf-file

  

这很简单:mask属性是一个完全不同的掩码   而不是时间线面具。

     

mask属性允许您将任何对象用作任何其他对象的掩码   对象(只记得将它们放在同一个显示树或事物上   会变得毫无意义。

     

时间线蒙版将给定的深度范围指定为蒙版   由一个特定的对象。

     

这两个系统完全没有通信,但他们做同样的工作。

     

如果你想访问,你最好带出你的swf解析器或jsfl   时间线面具。

因此,时间轴掩码使用与mask属性分开的不同机制。这就是你无法访问它们的原因。正如其他人所提到的,您可以通过删除和添加子项来间接停用时间轴掩码,但是如果没有解析SWF文件,我认为没有办法检测对象是否在第一次使用时间轴掩码时被屏蔽的地方。

答案 4 :(得分:0)

我知道这不是您正在寻找的答案,但这会删除面具。 如果你创建一个单独的剪辑将面具推到它上面,将从它之前屏蔽的对象中移除面具,

例如...

object1.mask = mask1;

然后将您的代码添加到新对象 object2.mask = mask1;

因为对象一次只能屏蔽1个对象,现在它将屏蔽新对象,从而有效地从旧对象中删除掩码