【发布时间】:2013-04-09 07:20:31
【问题描述】:
显然,按照 Adobe 的说法,被蒙版的对象和蒙版对象都包含“蒙版”属性。这会导致循环引用,从而阻止确定哪个是实际掩码,哪个是掩码。
例如...
var clip:MovieClip = new MovieClip();
clip.name = "clip";
addChild(clip);
var boundary:Shape = new Shape();
boundary.name = "boundary";
clip.addChild(boundary);
clip.mask = boundary;
trace(clip.mask.name); // outputs "boundary"
trace(clip.mask.mask.name); // outputs "clip"
我已经遍历了clip 和boundary 的属性,似乎没有任何独特之处可以将它们区分开来。我的第一个想法是强制删除boundary 中多余的“掩码”引用,但是,这也会将clip 中的mask 属性设置为空,从而移除掩码。
我的第二个想法是检查掩码的父关系。如果父对象与对象的掩码相同,则所讨论的对象本身就是掩码。
var a:Array = [clip, boundary];
for each (var item in a) {
if (item.mask == item.parent) {
trace(item.name + " is a mask");
}
}
// outputs "boundary is a mask"
似乎可以工作,并且在检查了掩码上的API reference 之后,很明显,在缓存时,掩码将需要成为被掩码的子项,但是......它也是有效的有一个与被遮罩的深度相同的遮罩(当遮罩需要不与被遮罩的内容一起移动时,我会不时这样做)。
例如...
MainTimeline ¬
0: clip ¬
0: boundary
...也可以布局为...
MainTimeline ¬
0: clip ¬
1: boundary
所以,难题来了。有关如何解决此问题的任何想法?
【问题讨论】:
标签: actionscript-3 mask