Static global state is a bad thing. In this case, you have no way of knowing whether or not the sh objects you are retrieving from your static array have anything to do with the current "vex" object or not.
Instead of having SurfaceElement
track all instances of itself that have been added, consider having your Vex
Class expose a surfaceElements Array (or better yet, Vector). If these are built on the stage (I suspect you're tracking them statically because you don't have a good "handle" on working with timeline/stage objects), then you could do something like this in your constructor:
public var surfaceElements:Array = []; function Vex() { super(); var loops:int = numChildren; for (var i:int=0; i<loops; i++) { var surface:SurfaceElement = getChildAt(i) as SurfaceElement; if (surface) { surfaceElements[surfaceElements.length] = surface; } } }
Then, when you are done with that specific Vex, you are also done with its surfaceElements with no crossover.