bitMaps aleatorios con XML en Papervision
Hola.... Tengo el siguiente código. La idea es cargar unas imagenes a traves de XML para usarlas como material para una serie de planos que se montan dentro de un contenedor, para que ese contenedor tenga dos caras. Lo consigo, pero cada vez que se carga el documento las imágenes se cargan aleatoriamente sin respetar el orden que les doy en el XML.
Le he dado vueltas y vueltas pero llego hasta aquí. Muchas gracias por su ayuda.
XML:
<?xml version="1.0" encoding="utf-8"?>
<imagedata>
<data imagepath="Image01.jpg" backimagepath="Image01.jpg" indice="1" />
<data imagepath="Image02.jpg" backimagepath="Image02.jpg" indice="2"/>
<data imagepath="Image03.jpg" backimagepath="Image03.jpg" indice="3"/>
<data imagepath="Image04.jpg" backimagepath="Image04.jpg" indice="4"/>
<data imagepath="Image05.jpg" backimagepath="Image05.jpg" indice="5"/>
<data imagepath="Image06.jpg" backimagepath="Image06.jpg" indice="6"/>
....
</imagedata>
AS:
//Aparecen una serie de contadores (j,k y contadorBack) que están inicializados con valor 0. No he puesto la parte de imports ni declaración de variables...
//Primero cargo el xml en el constructor
loader = new URLLoader();
loader.load(new URLRequest("XML/ImagesData01.xml"));
loader.addEventListener(Event.COMPLETE, initfront);
private function initfront(e:Event):void {
XML_Load=new XML(e.target.data);
lista =new XMLList (XML_Load.data.@backimagepath);
indice=new XMLList (XML_Load.data.@indice);
var long:int=XML_Load.data.length()
for (var i:int = 0; i < long; i++) {
loadimagedata = new Loader();
cargadores.push(loadimagedata)
cargadores[i].contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
cargadores[i].load(new URLRequest("IMAGES/" + XML_Load.data[i].@imagepath));
}
}
private function loaded(e:Event):void {
bmd =Bitmap(e.target.content).bitmapData;
bm = new BitmapMaterial(bmd);
bm.interactive = true;
bm.oneSide = true;
bm.precise = true;
materials.push(bm);
loadBackimagedata = new Loader();
cargadoresBack.push(loadBackimagedata);
cargadoresBack[contadorBack].contentLoaderInfo.addEventListener(Event.COMPLETE, loadedBack);
cargadoresBack[contadorBack].load(new URLRequest("IMAGES/" + lista[contadorBack]));
contadorBack++;
}
private function loadedBack(e:Event):void {
bmdBack =Bitmap(e.target.content).bitmapData;
bmBack = new BitmapMaterial(bmdBack);
bmBack.interactive = true;
bmBack.oneSide = true;
bmBack.precise = true;
materialsBack.push(bmBack);
poner ();
}
private function poner():void {
do3d = new DisplayObject3D();
do3d.useOwnContainer=true;
p = new Plane(materials[j],100,100,quality,quality);
p2 = new Plane(materialsBack[k],100,100,quality,quality);
p.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, planeClickedHandler, false, 0, true);
p2.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, planeClickedHandler, false, 0, true);
k++;
j++;
do3d.addChild(p);
do3d.addChild(p2);
p2.rotationY=180;
planes.push(p);
planesBack.push(p2);
///Aquí vendría un código para la colocación de los do3d
holder.addChild(do3d);
}