Tema: Poltergeist
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/04/2004, 01:44
Elecash
 
Fecha de Ingreso: marzo-2002
Ubicación: BarnaCity
Mensajes: 109
Antigüedad: 22 años
Puntos: 0
Pregunta Poltergeist

Saludos a todos, os escribo aqui porque se que si no lo saben aqui no creo que lo sepan en muchos otros sitios, la cosas es que me estoy enfrentando al problema mas raro que me ha dado Flash en mucho tiempo.

Para empezar deciros que trabajo con Flash MX y con MX 2004 y con ambos dos no funciona... Primero os explicare un poquito que hace el codigo y luego lo vereis mas abajo.

Tengo una pelicula que me dibuja una serie de mapas, estos se dibujan segun la opcion escogida en otra pelicula que hay en el mismo HTML. La conexion entre movies lo hago con la funcion "send" que me va muy bien para hacer conexiones locales entre las peliculas.

Para dibujar los mapas se tienen que cargar 4 archivos XML, uno para el user y pass, y los otros tres son localizaciones, colores y mas cosas que tampoco vienen a cuento.

Llegado a un momento se pierden datos XML mientras se esta ejecutando el programa, y se que es mientras se esta ejecutando el programa porque mediante trace lo he conseguido saber. Arriba de la linea de programacion estan los datos almacenados, y cuando llego abajo, ya no. Se han perdido datos en algun momento, y hay que tener en cuenta que no toco para nada los XML solo para leer. Tambien he probado borrando los objetos donde almaceno la informacion, y aun asi tampoco...

¿PUEDE SER UN ERROR DE FLASH?

Ahi va el código:

//cargo 1er xml
doc = new XML();
doc.ignoreWhite = true;
doc.onLoad = function() {
_root.puertoname=doc.firstChild.childNodes[2].firstChild.nodeValue
_root.area_select=doc.firstChild.childNodes[20].firstChild.nodeValue
if(_root.area_select==""){
gotoAndPlay(1)
}
}
doc.load("../xml/"+_root.user+".xml");

//conexion entre el "menu_areas.swf" y este swf ,pasa el nro de area activa
incoming_lc = new LocalConnection();
//ejecutar el metodo asignado en el paso de parametros
incoming_lc.methodToExecute = function(param) {
_root.area = String(param)

//borra clips anteriores
for(i=0;i<=largo;i++){
clip="zona"+i
removeMovieClip("zona"+i)
}
delete doc1;
doc1 = new XML();
doc1.ignoreWhite = true;
doc1.onLoad = function(){
_root.cant=doc1.firstChild.childNodes[0].childNodes.length;
delete colores;
colores=new Array(cant)
_root.prueba4="";
for(i=0;i<=cant-1;i++){
colores[i]=doc1.firstChild.childNodes[0].childNodes[i].childNodes
_root.prueba4=_root.prueba4+colores[i];
}
}
doc1.load("../"+_root.puertoname+"/datos/xml_zonas/colores_"+_root.area+".xml");

// cargo 2doxml veo el Witdh y height del mapa del area que voy a dibujar y el nombre del area
doc2 = new XML();
doc2.ignoreWhite = true;
doc2.onLoad = function(){

// hago un recorrido en el areas.xml porque el nro de area es dist a el nro de posicion de esa area en el xml
//(ej, area11 es el nro 10) abrir areas.xml,y alarmas.xml y ahi se ve claro
for(n=0;n<=doc2.firstChild.childNodes.length-1;n++){
if(String(doc2.firstChild.childNodes[n].childNodes[0].childNodes)==area){
_root.nombre = doc2.firstChild.childNodes[n].childNodes[1].childNodes;
_root.w = doc2.firstChild.childNodes[n].childNodes[2].firstChild.nodeValue;
_root.h = doc2.firstChild.childNodes[n].childNodes[3].firstChild.nodeValue;
}
}

_root.w=Number(_root.w)
_root.h=Number(_root.h)
}
doc2.load("../"+_root.puertoname+"/datos/xml_zonas/areas.xml");

//cargo 3erxml y veo la cantidad de zonas que tiene el area
doc3 = new XML();
doc3.ignoreWhite = true;
doc3.onLoad = function() {
_root.largo = doc3.firstChild.childNodes.length;
dibujar();
}
doc3.load("../"+_root.puertoname+"/datos/xml_zonas/zonas"+_root.area+".xml");

}

// se hace la conexion de mas arriba
incoming_lc.connect("lc_name");

//funcion que dibuja las zonas y pasa variables a la ventana nueva
function dibujar() {

//cargo fondo de imagen del puerto
loadMovie("../"+_root.puertoname+"/datos/areas_swf/area"+_root.area+".swf", fondo);

boton.onPress = function() {
variables="?puerto="+_root.puertoname+"&area="+_ro ot.area+"&titulo=Area "+_root.area+" "+_root.nombre
pagina = "ventana.asp"+variables
getURL("javascript:NewWindow=window.open('"+pagina +"','ventana','width="+(_root.w*0.8)+",height="+(_ root.h*0.8)+",left=150,top=50,toolbar=No,location= No,scrollbars=No,status=No,resizable=no,fullscreen =no');NewWindow.document.bgColor='black'; NewWindow.focus();void(0);", "", "POST");
}

zonas = new Array(_root.largo);
var pts;
// cantidad de zonas
j=0
i=0
_root.prueba3="";
while (i<=largo-1) {
//coordenadas de cada zona
zonas[i] = doc3.firstChild.childNodes[i].childNodes[2].childNodes;
//_root.zona_color=Number(String(doc1.firstChild.chi ldNodes[0].childNodes[j].nodeName).substr(4,3))
_root.zona_color=i
// array con las coordenadas (cantidad de coordenadas x zona =10)
ptos = new Array(10);

// creo clip zona[i]
var clip = "zona"+i;

for (k=0; k<8; k++) {
ptos[k] = String(zonas[i]).split(";")[k];
}

//creo clip x zona
this.createEmptyMovieClip(clip, 1+i);

//pinto zonas
//si es una zona que no tiene color xq no esta en el xml de colores
if(i!=zona_color){
with (this[clip]){
beginFill (0xCCCCCC, 70);
lineStyle (1, 0x000000, 100);
moveTo (ptos[0], ptos[1]);
lineTo (ptos[2], ptos[3]);
lineTo (ptos[4], ptos[5]);
lineTo (ptos[6], ptos[7]);
lineTo (ptos[0], ptos[1]);
endFill();
}
}

//si el nro de zona=al nro de zona del xml de los colores
if(i==zona_color){

with (this[clip]){
// el codigo de color lo saco del array de colores
colorstr=String(colores[i])
_root.prueba3+=colorstr;
if(colorstr=="V"){
beginFill (0x009900, 70);
}
else if(colorstr=="R"){
beginFill (0xFF0000, 70);
}
else if(colorstr=="N"){
beginFill (0xFFCC00, 70);
}
else{
beginFill (0x000099, 70);
}

lineStyle (1, 0x000000, 100);
moveTo (ptos[0], ptos[1]);
lineTo (ptos[2], ptos[3]);
lineTo (ptos[4], ptos[5]);
lineTo (ptos[6], ptos[7]);
lineTo (ptos[0], ptos[1]);
endFill();
}
}
//si hay mas zonas dibujadas de las que me pasa el xml de colores
if(i>zona_color){
j=j+1
}
if(_root.w>_root.h){
_root.fondo._xscale=18000/_root.w
_root.fondo._yscale=_root.fondo._xscale
}
else{
_root.fondo._yscale=20000/_root.h
_root.fondo._xscale=_root.fondo._yscale
}
//escala zonas
this[clip]._xscale = _root.fondo._xscale;
this[clip]._yscale = _root.fondo._yscale;
this[clip]._x=this[clip]._x+10;
this[clip]._y=this[clip]._y+10;
i++
j++
}
}