flash list actionscript movieclip

flash - ActionScript 2, lista de clips de película anidados



movieclip (6)

¿Alguien ha intentado alguna vez obtener la lista de todos los clips de película (incluso los anidados) que están en el escenario en un marco detenido (y actual) especificado en Flash 8, AS 2?

Hice lo siguiente:

for(i in _root){ if(typeof(_root[i])=="movieclip"){ trace(_root[i]);} }

Pero esto es bueno para una búsqueda de primer nivel: es decir, si dentro de los clips de película tienes otros clips de película, no puedes alcanzarlos. Además, dentro de un clip de película puede haber más de un clip de película.

¿Alguien ha intentado alguna vez hacer lo que intento hacer?

¡Adiós!


¿Estás tratando de rastrear? Si es así, hay una pequeña utilidad indocumentada llamada ObjectDumper que puede hacer esto.

Esta es probablemente la mejor explicación de esto

Entonces, ¿qué puedes hacer es esto?

import mx.data.binding.ObjectDumper; trace(ObjectDumper.toString(_root));

Puede haber muchos extras (funciones, variables, etc.) allí, por lo que hay parámetros adicionales que puede usar:

ObjectDumper.toString(obj, showFunctions, showUndefined, showXMLstructures, maxLineLength, indent)


Mi experiencia AS2 es bastante limitada (he hecho un poco de AS3), pero aquí va:

¿Qué pasaría si escribiera una función recursiva que, si encontrara un clip de película, vería todos sus objetos secundarios para otros clips de película (e hizo lo mismo con los clips de película que encontró allí, etc.)? La función puede tomar el parámetro de objeto, así como una matriz de clips "encontrados" que se agrega en cada pasada.

Me gustaría poder escribir el código que haría esto, pero (como dije), no soy un tipo AS2: /


Hice algo muy similar a esto hoy. Mis clips formaban parte de una navegación y eran duplicados de un clip de película. Para averiguar cuántos había, puse una variable en el escenario principal que se incrementó por acciones en los clips de película. Configuré un intervalo para esperar hasta que todos los clips fueran contabilizados, luego usé un bucle para completar la interactividad de mi navegación. Funciona bastante bien también. Espero que esto ayude a alguien.


Puede hacer algo como eso agregando una función a la clase MovieClip:

MovieClip.prototype.StopEverything = function() { stop(); for (var i in this) { if (typeof(this[i]) == "movieclip") { this[i].StopEverything(); } } } ASSetPropFlags(MovieClip.prototype, ["StopEverything"], 1);

Ese último bit ASSetPropFlags es algo que encontré que permite que StopEverything itere sobre clases incorporadas como MovieClip usando for..in para cada campo, incluso propiedades y elementos ocultos. Sin ASSetPropFlags, StopEverything () podría no afectar a cada clip de película contenido.


La razón por la cual la característica ObjectDumper no documentada de AS2.0 no enumera clips de película en la raíz es porque ignora los pares de valor de nombre en el nivel raíz del Objeto, que es una falla flagrante (por decir lo menos), ya que la definición de una matriz asociada es array / object que está formado por pares nameValue en su raíz.

Por ejemplo: trace (ObjectDumper.toString ({myName: "myValue"})) // output = "". No es de extrañar que dejaran esta "característica" indocumentada. Francamente, creo que es sorprendente que no haya una forma incorporada de enumerar fácil y confiablemente todos los contenidos de un objeto para depuración en AS2 ni AS3. Si busca en la red todo lo que encontrará son trabajos de hackeo para ... en loops que solo miran la raíz de una matriz ... nada recursivo.


exactamente como lo sugiere inkedmn

printStuff comprueba primero si el valor que encuentra es un mc y si lo está, rastrea y luego verifica dentro de él para obtener más mcs.

printStuff = function(object){ for(var x in object){ if(typeof(object[x])=="movieclip"){ trace(object[x]); printStuff(object[x]); } } } printStuff(_root);

oh ... y disculpa por ser un año y algunos cambian tarde ...