Ver Mensaje Individual
  #13 (permalink)  
Antiguo 17/01/2006, 19:20
califa010
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 10 meses
Puntos: 5
Jaja. Bueno, y ahora termino lo que empecé. Podés usar este código (rearmalo de acuerdo a tus necesidades) o cualquier otro, pero te aseguro que más importante que tener un código que funcione es entender cómo funciona. Una vez que lo logres --y no es muy difícil-- vas a ver que podés hacer un montón de cosas más, porque en esencia es siempre lo mismo. Incluso, seguramente se te van a ocurrir otras cosas cuando veas las posibilidades que te da...

Bueno, al punto. Primero el script y después cómo funciona:
Código:
System.useCodepage = false;
var escenario = this;
var objXml:XML = new XML();
objXml.ignoreWhite = true;
objXml.load("bandas.xml");
objXml.onLoad = cargarBandas;
function cargarBandas(ok) {
	if (ok) {
		var bandas:XMLNode = objXml.firstChild;
		var cantidadBandas:Number = bandas.childNodes.length;
		var nombre:String;
		var estilo:String;
		var region:String;
		var contacto:String;
		var web:String;
		for (var i = 0; i<cantidadBandas; i++) {
			duplicateMovieClip("banda_mc", "banda_mc"+i, i);
			setProperty("banda_mc"+i, _y, eval("banda_mc"+(i-1))._y+eval("banda_mc"+(i-1))._height+10);
                        nombre = bandas.childNodes[i].attributes.nombre;
			estilo = bandas.childNodes[i].attributes.estilo;
			region = bandas.childNodes[i].attributes.region;
			contacto = bandas.childNodes[i].attributes.contacto;
			web = bandas.childNodes[i].attributes.web;
			escenario["banda_mc"+i].nombre_txt.text = nombre;
			escenario["banda_mc"+i].estilo_txt.text = estilo;
			escenario["banda_mc"+i].region_txt.text = region;
			escenario["banda_mc"+i].contacto_txt.text = contacto;
			escenario["banda_mc"+i].web_txt.text = web;
		}
	} else {
		trace("error al cargar el XML");
	}
}
System.useCodepage = false; --> Siempre que uses XML te conviene poner esto para evitar problemas de codificación.

Después cargás el xml normalmente y agregás ignoreWhite para que no haya problemas con los espacios en blanco.

Código:
var escenario = this;
Esta línea es simplemente una referencia al escenario. Después la vas a necesitar dentro de la función, pero ahí la palabra "this" ya no te sirve ("apunta" o se refiere al objeto XML).

Cuando termina de cargar el XML, se "dispara" la función cargarBandas().

Código:
var bandas:XMLNode = objXml.firstChild;
var cantidadBandas:Number = bandas.childNodes.length;
Acá decís que bandas es el primer nodo (firstChild) del objeto XML.
Después averiguás cuántas bandas hay dentro de este nodo, o sea, cuántos "nodos hijos/childNodes" tiene, y lo guardás en una variable.

Las siguientes 5 líneas son declaraciones de variables y no son estrictamente necesarias, aunque ayudan a mantener todo más claro y ordenado. Es una buena práctica acostumbrarse a hacerlo.

Después empieza el loop. Va a ir desde 0 hasta que el contador (i) sea menor a la cantidad de bandas. Si tenés 10, va de 0 a 9.

Dentro del loop empezás a duplicar los movieClips, que contienen dentro cinco campos de texto:

Código:
duplicateMovieClip("banda_mc", "banda_mc"+i, i);
Cada nuevo mc se va a llamar "banda_mc" más un número, que es el número de vuelta del loop. Mientras todos se llamen distinto, no hay problema. Además, le indicás la "profundidad" en el último parámetro. Lo mismo, mientras no se "pisen", todo bien.

Código:
setProperty("banda_mc"+i, _y, eval("banda_mc"+(i-1))._y+eval("banda_mc"+(i-1))._height+10);
Ahora los ubicás. Para eso, "seteás" la propiedad "_y" (2º parámetro), del mc actual (1º parámetro) y le das un valor: la posición _y del mc anterior, más el alto del mc anterior, más una distancia en píxeles (en este caso 10, pero es a gusto).

Listo, ya estás creando en cada vuelta los mc que van a contener los cinco campos de texto de cada banda.

Ahora, averiguás las propiedades o "atributos" del nodo en el que estés y lo tirás a una variable. En la primera vuelta es el 0, que equivale al primer nodo <banda>.

Por ejemplo, acá

Código:
nombre = bandas.childNodes[i].attributes.nombre;
estás pidiendo, el atributo "nombre" del hijo número 0 de <bandas>. Con los otros atributos es lo mismo.

Código:
escenario["banda_mc"+i].nombre_txt.text = nombre;
Y por último, asignás esa variable que creaste (nombre, por ej) al campo de texto que está en el mc actual (el que corresponde a cada vuelta, en la 1º vuelta o vuelta 0, es "banda_mc0").

Ese mc es una propiedad del escenario. O sea que lo que hacés es decirle: el escenario contiene a la propiedad "banda_mc0", que contiene a su vez al campo de texto "nombre_txt", que tiene una propiedad "text". Bueno, ahí, poné el valor de la variable "nombre". Y ya estás, con el resto de los campos es lo mismo.

Bueno, al principio parece chino, pero si lo analizás paso a paso, vas a ver que no es tanta ciencia.

Y cuando ya tengas el esquema incorporado, luego de hacer unos cuantos XML y de volverte loco porque te aparecen errores inexplicables... vas a ver la luz, jaja. No, en serio, te van a salir con los ojos cerrados.

Suerte
Califa

PD: tal vez muchas de las cosas que explico acá ya la entendés, pero en fin, me embalé y terminé haciendo un paso a paso. Pero probablemente a alguien le sirva para orientarse