Pregunta

¿Es posible obtener una lista de todas las instancias con un nombre en una película flash usando actionscript 2. Como una matriz que contiene todas las áreas de texto con nombre, o todas las instancias de movieClip, etc. Me gustaría obtener esto para que el diseñador pueda agregar o eliminar áreas de texto, etc. y el ActionScript puede encontrarlas dinámicamente y obtener los textos de una fuente de datos separada.

Supongo que lo que quiero es algo así como un árbol DOM o incluso algo mejor como cómo funciona getElementByName () en JavaScript. Y también obtengo el valor de cadena del nombre de la instancia para que pueda encontrar su valor de texto en un xml.

Digamos que el diseñador agrega una nueva área de texto con el nombre " copyright " y mi código debe (sin tener que cambiar el guión) encontrar los datos con la identificación "copyright" en un archivo XML si está allí, y agregue el valor al área de texto.

¿Fue útil?

Solución

@Stein Gauslaa Strindhaug

¡Esto es bastante difícil, pero debería funcionar!

private function traceAllChildren(rootContainer:DisplayObjectContainer):void {
    for(var i=0; i < rootContainer.numChildren; i++) {
        var item:* = rootContainer.getChildAt(i);
        try {
            traceAllChildren(item);
        } catch (e:Error) {
            trace(e.toString());
        }
        trace(item.toString());
        // This is the block where you can affect
        // an 'item' depending on it's type, name, etc..
        // eg: 
        //      if (item.toString() == '[object TextField]') {
        //          item.text = "The text I want to insert";
        //      }
        // or
        //      if (item.name == myTextFieldNameVar) {
        //          item.text = "The text I want to insert";
        //      }
    }
}

Luego llámelo así: traceAllChildren (this) o traceAllChildren (myParentMovieClip).

Espero que esto ayude, ¡buena suerte!

Otros consejos

Respuesta corta: no hay " incorporado " manera de hacer esto. Podría intentar buscar una funcionalidad similar a getElementByName (), pero requeriría comenzar en _root y recorrer su contenido, y estrictamente hablando, un clip de película comienza con referencias a sus hijos, pero podrían ser eliminado en tiempo de ejecución, por lo que esto podría fallar.

Dicho esto, este es un problema común y hay muchos enfoques al respecto. Una cosa que puede resultarle más útil es crear un componente personalizado adjunto a una clase personalizada, por ejemplo, "TextPlaceholder", y hacer que su diseñador coloque copias de eso donde quiera texto dinámico. Luego, en tiempo de ejecución, este componente podría examinar su propiedad _name u otros parámetros de componentes personalizados, y en base a ellos podría crear un campo de texto del tamaño, contenido, etc. Esa es solo una forma de abordarlo.

Ha pasado un tiempo desde que hice cualquier codificación AS2, pero quizás podría usar una combinación de MovieClip.getInstanceAtDepth () y this.getNextHighestDepth () para encontrar la profundidad más alta en su película y luego rastrear a través de cada profundidad más baja hasta encontrar un getInstanceAtDepth () que corresponde al clip que desea llenar con nuevos datos.

También noté este código de ejemplo en la documentación de AS2.

El siguiente código rastrea la profundidad de todas las instancias de clip de película en el escenario:

for (var i in this) {
    if (typeof (this[i]) == "movieclip") {
    trace("movie clip '"+this[i]._name+"' is at depth "+this[i].getDepth());
    }
}

PD: ¡Sé que probablemente no quieras escuchar esto, pero en AS3 es un juego de niños ya que puedes iterar a través de this.children!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top