Foros del Web » Creando para Internet » Flash y Actionscript »

Poltergeist

Estas en el tema de Poltergeist en el foro de Flash y Actionscript en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 27/04/2004, 02:44
 
Fecha de Ingreso: marzo-2002
Ubicación: BarnaCity
Mensajes: 109
Antigüedad: 15 años, 8 meses
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++
}
}
  #2 (permalink)  
Antiguo 27/04/2004, 10:08
 
Fecha de Ingreso: marzo-2002
Ubicación: BarnaCity
Mensajes: 109
Antigüedad: 15 años, 8 meses
Puntos: 0
Bueno, al final he sacado el problema...

La cuestión en si es anidar la carga de los documentos XML, así hasta que no se cargue del todo el primer XML y hagamos las acciones de la funcion para ese XML no cargara el siguiente...

Para los interesados dejo el codigo:

//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);
}

//cargo el 1er XML cojo Witdh y Height del mapa del area que voy a dibujar y el nombre
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);
mapear();
_root.prueba1 = "ha entrado en 2";
//cargo 2do XML y cojo la cantidad de zonas que tiene el area
doc3 = new XML();
doc3.ignoreWhite = true;
doc3.onLoad = function() {
_root.largo = doc3.firstChild.childNodes.length;
dibujar();
_root.prueba2 = "ha entrado en 3";
//cargo el 3er XML y cojo los colores
doc1 = new XML();
doc1.ignoreWhite = true;
doc1.onLoad = function() {
_root.cant = doc1.firstChild.childNodes[0].childNodes.length;
colores = new Array(cant);
for (i=0; i<=cant-1; i++) {
colores[i] = doc1.firstChild.childNodes[0].childNodes[i].childNodes;
}
colorear();
ok3 = false;
ok1 = false;
_root.prueba3 = "ha entrado en 1";
}
doc1.load("../"+_root.puertoname+"/datos/xml_zonas/colores_"+_root.area+".xml");
};
doc3.load("../"+_root.puertoname+"/datos/xml_zonas/zonas"+_root.area+".xml");
}
doc2.load("../"+_root.puertoname+"/datos/xml_zonas/areas.xml");

}
// se hace la conexion de mas arriba
incoming_lc.connect("lc_name");
function mapear() {
//cargo fondo de imagen del puerto
loadMovie("../"+_root.puertoname+"/datos/areas_swf/area"+_root.area+".swf", _root.fondo);
//funciones del boton para abrir el mapa en grande
boton.onPress = function() {
variables = "?puerto="+_root.puertoname+"&area="+_root.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");
};
//escalar fondo
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;
}
}
//funcion que dibuja las zonas y pasa variables a la ventana nueva
function dibujar() {
zonas = new Array(_root.largo);
var pts;
// cantidad de zonas
j = 0;
i = 0;
_root.prueba3 = "";
while (i<=_root.largo-1) {
//coordenadas de cada zona
zonas[i] = doc3.firstChild.childNodes[i].childNodes[2].childNodes;
_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 el nro de zona=al nro de zona del xml de los 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 es una zona que no tiene color xq no esta en el xml de colores
if (i != zona_color) {
with (this[clip]) {
beginFill(0x000000, 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;
}
//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++;
}
}
function colorear() {
i = 0;
while (i<=_root.largo-1) {
with ("zona"+i) {
//crear objeto colorcuadro para colorear
colorcuadro = new Color("zona"+i);
colorstr = String(colores[i]);
if (colorstr == "V") {
colorcuadro.setRGB(0x009900);
} else if (colorstr == "R") {
colorcuadro.setRGB(0xFF0000);
} else if (colorstr == "N") {
colorcuadro.setRGB(0xFFCC00);
} else {
colorcuadro.setRGB(0x000099);
}
}
i++;
}
}


Un saludo y suerte con el codigo... XD

Raúl Jiménez
www.elecash.org
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:31.