Masks in the flash IDE are an interesting thing. You may have noticed that masks created in the IDE are not found in the normal “mask” property found on a movieclip. This is because it isn’t a normal mask. The mask is working on a layer instead of on a single DisplayObject. This little quirk causes some interesting behavior that you may never have noticed before.
If you have a MovieClip with a mask as a top layer of the timeline there is some strange behavior when you addChild to that MovieClip. The added content gets placed under the mask. Wait! What? The added content gets placed under the mask. You may not have noticed this behavior in the past because you may never have done it, you may not have your item cut off by the mask or you just might not have been able to figure out why you couldn’t see your item. However, it is happening.
Another twist on this phenomenon is that if the mask isn’t the top layer but your remove the items that are on the top layer then add a DisplayObject. Well, in that scenario your new DisplayObject is also placed under this “Layer Mask”. I found this out today when I had a top layer above a mask that was a TextField. For a localization project I’m working on I had to wrap the field in a wrapper class that then gets added back where the textfield was. I was trying to figure out why the textfield was now appearing like it was under the mask. The answer…because it now was.
So how did I deal with this? How can you deal with this if you find it happening? First off, it might be an easy thing to just restructure your timeline so the mask isn’t on top. If that isn’t possible, the
hack easy fix is to add a blank MovieClip symbol to the layer above the mask layer. That is what I did for this asset and all is well.
I haven’t extensively tested this but my guess is the quirk may exist if you add something to any layer right above a “Layer Mask” it will placed under the mask. Is this something you have experienced? How have you worked around it? Have you used it for any type of effect?
I don’t believe you really want to count on this behavior for anything as I don’t believe I’ve seen it documented anywhere. Someone at Adobe might read my blog 🙂 and decide this isn’t appropriate behavior they might fix it in Flash Player 20 or something.