显然,在 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
,但这也会将mask
属性设置clip
为 null,从而移除掩码。
我的第二个想法是检查掩码的父关系。如果父对象与对象的掩码相同,则所讨论的对象本身就是掩码。
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 参考之后,很明显,在缓存时,掩码需要是掩码的子项,但是......具有与掩码相同深度的掩码也是有效的(当面具不需要与被掩盖的内容一起旅行时,我会不时这样做)。
例如...
MainTimeline ¬
0: clip ¬
0: boundary
...也可以布置为...
MainTimeline ¬
0: clip ¬
1: boundary
所以,有一个难题。关于如何解决这个问题的任何想法?