On 12/2/05, Mark Winterhalder <[EMAIL PROTECTED]> wrote:
> On 12/2/05, Marc Hoffman <[EMAIL PROTECTED]> wrote:
> > Jay,
> >
> > If you got this to work, could you send me the code? I can't make it
> > work even when doing the obvious clean-up to the line breaks and
> > changing naming conventions to AS2 (e.g. "Boolean" rather than "boolean").
>
> you can give the one i just hacked together proper testing, if you
> like, and let me know if it works...
forgot to check for the tag to avoid unwanted recursion. it didn't
cause a problem in my initial test because i had limited the recursion
depth (the ttl argument). sorry for the noise.
var types:Object = { movieclip: 1, object: 2, array: 4 };
var objTrace:Function = function( obj:Object, name2:String,
mask:Number, ttl:Number, indent:String, traceID:String ) {
if( !indent.length ) indent = "\t";
if( !( traceID.length ) ) traceID = String( getTimer() );
if( !ttl ) ttl = 0;
if( !mask ) mask = -1;
if( !( arguments.callee.$$tag == traceID ) ) {
arguments.callee.$$tag = traceID;
arguments.callee.idCntr = 0;
}
var type:String = typeof obj;
var id:String;
if( types[ type ] ) {
if( obj.$$id.length ) id = obj.$$id;
else {
id = obj.$$id = String( arguments.callee.idCntr++ );
_global.ASSetPropFlags( obj, "$$id", 1, 0 );
}
} else id = "";
trace( id + indent + name2 + " : " + type + ( id.length ? "" : "
\tvalue: " + obj ) );
if( !( types[ type ] & mask ) || ( obj.$$tag == traceID ) ) return;
obj.$$tag = traceID;
_global.ASSetPropFlags( obj, "$$tag", 1, 0 );
indent += "\t";
if( !( --ttl ) ) return;
for( var i:String in obj )
arguments.callee( obj[ i ], i, mask, ttl, indent, traceID );
};
usage:
(if it works at all)
objTrace( object, name, mask, ttl );
where:
object is the root object of the trace, e.g. _root,
name is the name of the first object, e.g. "_root"
mask defines which kind of objects to follow, you define it by adding
their respective bits as defined in the types object in the first
line. so, 1 would only follow movieclips, 5 would follow movieclips
and arrys, but not objects (1 + 4), 6 would follow objects and arrays
(2 + 4), and so on. omitting it (or passing 0) would follow all of
them. another way is to pass something like that: ( types[ "movieclip"
] | types[ "object" ] | types[ "array" ] ), with the ones you want to
include.
ttl is the time to live, e.g. the depth of the recursion. 0 is unlimited.
indent and traceID are best omitted initially.
so, to trace all, you would simply say:
objTrace( _root, "_root" );
to trace all clips, but not objects and arrays:
objTrace( _root, "_root", 1 );
to trace all clips and all objects, but only to the grandchildren of root:
objTrace( _root, "_root", 3, 3 );
and so on.
--
http://snafoo.org/
jabber: [EMAIL PROTECTED]
_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders