I’m spoiled by jQuery. When I want to find an element and do something it’s as painless as $(element).doSomething(now);. Not so in Flash. God help you if the sprite you want is nestled inside a dynamically loaded SWF inside of a movieClip in a different layer. That’s, like, getChildAt()*10200.
This little guy has saved me so much time traversing Flash’s DisplayList. It’s not quite as functional as the CSS selectors in jQuery, but selecting something by name without having to chain node-by-node is suuuuch a time saver. Enjoy:
import flash.utils.getQualifiedClassName; function getClassName(obj:Object):String { if (obj is Class) { var s:String = obj.toString(); // "[class SoAndSo] return s.substring(7, s.length - 1); } else { var fullClassName:String = getQualifiedClassName(obj); return fullClassName;//.slice(fullClassName.lastIndexOf('::') + 2); } } function findByName(container:*, objName:String):* { /** findByName takes a container and a name and returns the object if found. Because Flash is so annoying with it's displaylist. **/ var child:Object; for (var i:uint=0; i < container.numChildren; i++) { child=container.getChildAt(i); if(getClassName(child) == objName || child.name == objName) { trace('Found: ' + objName); return container.getChildAt(i); break; } else if (container.getChildAt(i) is DisplayObjectContainer) { child=findByName(DisplayObjectContainer(child), objName); } } return child; }





