Una de las propiedades es un array que contendrá otros objetos serializados mediante una clase similar que también se cargan desde el xml.
Una parte de la estructura del xml es esta:
Código :
<nivel atributos> <nodohijo/> <nodohijo/> <nodohijo/> </nivel> <nivel atributos> <!--nodo vacío --> </nivel> <nivel atributos> </nivel>
Se cargan clases Nivel y Actividad mediante este código:
Código :
private function xmlOnLoad(sucess:Boolean)
{
//trace(this);
var nivel:Nivel;
var node:Array = this.firstChild.childNodes;
var ln:Number = node.length;
for (var i:Number = 0; i < ln; i++)
{
var nNode:XMLNode = node[i];
nivel = new Nivel(nNode.attributes.nombre);
var nArr:Array = nNode.childNodes;
var nLn:Number = nArr.length;
for (var j:Number = 0; j < nLn; j++)
{
var aNode:XMLNode = nArr[j];
var act:Actividad = new Actividad(aNode.attributes.nombre, aNode.attributes.descripcion, aNode.attributes.tiempo);
var aArr:Array = aNode.childNodes;
var aLn:Number = aArr.length;
for (var l:Number = 0; l < aLn; l++)
{
act.assests.push(aArr[l].attributes.source);
//trace(act.assests);
}
nivel.actividades.push(act);
}
trace(nivel.actividades);
levels.push(nivel);
}
onGameLoad();
}
En resumidas cuentas, lo que hace es parsear el xml y sacar varios objetos Nivel que contienen un Array de objetos Actividad.
Lo curioso es que aunque los nodos del xml que tendrían que contener las actividades están vacíos, salvo en el primer caso, que sí contiene actividades, todos los siguientes objetos Nivel que se creaban tenían el mismo array de actividades, y eso que vi con el depurador que parseaba bien el xml (es decir se saltaba el for que tenía que rellenar las actividades cuando no las había). Todos los trace(nivel.actividades); daban lo mismo.
La clase Nivel es esta:
Código :
class Nivel
{
public var name:String;
public var actividades:Array = new Array();
public var diploma:Boolean;
function Nivel(name:String)
{
this.name = name;
}
}
Y lo solucioné añadiendo una línea en el constructor:
Código :
this.actividades=[]
¿Alguien sabe por qué pasa, por qué lo de
Código :
nivel = new Nivel(nNode.attributes.nombre);
no funciona como debería?
