Comunidad de diseño web y desarrollo en internet online

flash que lea datos de un xml y pinte un mapa

Ir a página 1, 2  Siguiente

Foros de discusión > Flash

Citar            
MensajeEscrito el 24 Ago 2010 08:10 pm
Hola Yolanda Reyes yo no se mucho de igual forma estoy aprendiendo, pero no se si ya intentaste declarar los colores por separado si no te ayudo de nada mi respuesta lo siento :oops: :oops:
Si no, no se si pudiera ver tu action script
Suerte, Saludos :) :)

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 24 Ago 2010 08:16 pm
¿Como cargas el color? Recuerda que siempre lo lee como String, y que tienes que hacer un cast a Number para que lo interprete como color

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Ago 2010 11:02 pm
Pon todo el code, no lo entiendo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2010 01:21 pm
Estás chequeando por pcolor, pero en realidad lod efines como una propiedad de un objeto, objetoPueblo.pcolor, que es un objeto que metes en el array pueblos_array. Luego no se de donde sale ese botón, pero deberías asignarle los datos del pueblo al que apunta, y lo deberías hacer en el mismo loop en que creas los pueblos usando una función anónima, no un on(release)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2010 01:39 pm
¿deon están esos botones a los que asignas el on(release) ? ¿Y el código que pusiste? (cuando pregunto donde está, quiero decir en que timeline)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2010 02:07 pm
Ok, dado que no lo entiendo claro, lo traduzco en un fallo de diseño. Entonces voy a proponer esto: tienes todos tus pueblos en el mapa, que son MC con nombre de instancia p1, p2, p3, etc ... aunque el nombre da igual siempre y cuando vengan en el XML. Luego supongo que todos esos clips están adentro de un MovieClip que los contiene a todos que se llama mapa, entonces solo me queda pintarlos en cuanto cargue la data, y lo hacemos en la función pasar_a_array que se ejecuta sobre cada uno de los nodos del XML

Código ActionScript :

function pasar_a_array(nodo) { 
   var objetoPueblo = new Object(); 
   var atributos = nodo.attributes; 
   objetoPueblo.pcolor =(atributos.pcolor=="Amarillo")?0xFFFF00:0xFF0000;
   if(atributos.pcolor=="Verde") objetoPueblo.pcolor = 0x00FF00;
   objetoPueblo.bgcolor = atributos.bgcolor; 
   objetoPueblo.cantidad = atributos.cantidad; 
   objetoPueblo.id = Number(atributos.id); 
   pueblos_array.push(objetoPueblo);    
   var col = new Color(mapa["p"+id]).setRGB(objetoPueblo.pcolor) //el nombre de instancia es "p"+ un nro de id
} 


En lo expuesto, he pintado cada pueblo del color que viene en el XML sin necesidad de pinchar ningún botón, y pasando directamente el atributo de color en la propiedad del objeto

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2010 02:37 pm
¿Pero las opciones son tres colores o hay mas?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2010 02:55 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2010 03:25 pm
La idea es que cada MovieClip que represente un pueblo tenga un nombre que se componga de la letra p+id del pueblo. Enctonces supongamos que tienes el MC "p1" que quieres de verde, entonces en el XML vendrá:

<pueblo id="1" pcolor="Verde" cantidad="100" />

Y así con cada uno de los pueblos (recordar que están todos dentro de un MovieClip que los contiene a todos con nombre de instancia mapa) Siempre estoy hablando de nombre de instancia, es decir del nombre que introduces en el inspector de propiedades

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2010 03:42 pm
Entonces en vez de

mapa["p"+id]

Usa

this["p"+objetoPueblo.id]

Dado que el id esta realmente dentro del objetoPueblo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2010 06:06 pm
En el escenario tiene que haber un MovieClip con nombre de instancia p1. de hecho, para probar el mecanismo, te recomiendo que lo hagas en una peli nueva donde solo tengas un clip con ese nombre de instancia en el escenario. Para asegurarte que el loop se ejecuta agrega un trace:

Código ActionScript :

function pasar_a_array(pueblos) {
   trace("Pintando pueblo p"+atributos.id)
   (....)


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2010 08:05 pm
Ok, prueba esto:

1. En un archivo nuevo dibujas un cuadradito, lo conviertes en MovieClip, lo borras del escenario
2. Arrastras tres instancias desde la biblioteca, le das nombre de instancias p1, p2 y p3
3. Pegas este code en el primer y único frame:

Código ActionScript :

System.useCodepage = true;
XML.prototype.ignoreWhite = true;
datos_txt.autoSize = "left";
datos_xml = new XML();
datos_xml.onLoad = cargarDatos;
pueblos_array = new Array();
function cargarDatos(exito) {
   if (exito) {
      pueblosCargados = this.firstChild.childNodes;
      for (var k = 0; pueblosCargados[k]; k++) {
         pasar_a_array(pueblosCargados[k]);
      }
      delete pueblosCargados;
      delete datos_xml;
      verPueblos();
   }
}
function pasar_a_array(pueblos) {
   var objetoPueblo = new Object();
   var atributos = pueblos.attributes;
   objetoPueblo.pcolor = (atributos.pcolor == "Amarillo") ? 0xFFFF00 : 0xFF0000;
   if (atributos.pcolor == "Verde") objetoPueblo.pcolor = 0x00FF00;      
   objetoPueblo.cantidad = atributos.cantidad;
   objetoPueblo.id = Number(atributos.id);
   pueblos_array.push(objetoPueblo);
   trace(this["p"+atributos.id])
   var col = new Color(this["p"+atributos.id]).setRGB(objetoPueblo.pcolor);//el nombre de instancia es "p"+ un nro de id }   
}
datos_xml.load("pueblos.xml");
stop();


El xml es

Código :

<?xml version="1.0" encoding="UTF-8"?>
<pueblos>
  <pueblo id="1" pcolor="Amarillo" cantidad="100" />
  <pueblo id="2" pcolor="Rojo" cantidad="100" />
  <pueblo id="3" pcolor="Verde" cantidad="100" />
</pueblos>


Cada cuadradito se pinta de un color. Verifica que esto ocurra

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2010 08:12 pm
Por supuesto que me funcionó, lo simplifiqué de esta manera para que pilles bien la base y entiendas lo que pasa, sobre todo si iniciaste esto con copy&paste

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 Ago 2010 02:02 pm
Tienes que ir a Archivo, opciones de publicación, Tab Flash y cambiar a Actionscript 2

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 Ago 2010 03:15 pm
Es decir salen los dos otros datos (pcolor y id) preo no cantidad?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 Ago 2010 04:17 pm
Hay una cosa que puedes usar a tu favor: el nombre del botón contiene el id. Si los botones están en la misma línea de tiempo donde declaraste pueblos_array, entonces algo así podría funcionar:

Código ActionScript :

on(rollOver){
  var i:Number = Number(this._name.substr(1))
  pueblos = "<b>"+pueblos_array[i].pcolor+" "+pueblos_array[i].cantidad+"</b> - Vel. Máx </b> - id: <b>"+pueblos_array[i].id+"</b><br>";
}


Supongo que pueblo es una variable atada a un campo de texto dinámico que tienes en la misma línea de tiempo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 Ago 2010 07:13 pm
Si los botones son los mismos MovieClips, en el fotograma donde tienes el código agrega esto:

Código ActionScript :

function verPueblos() { 
   pueblos = ""; 
   for (var i = 0; pueblos_array[i]; i++) { 
     this["p"+i].onpress = function(){
       var i:Number = Number(this._name.substr(1)) 
        pueblos_txt.htmlText = "<b>"+pueblos_array[i].pcolor+" "+pueblos_array[i].cantidad+"</b> - Vel. Máx </b> - id: <b>"+pueblos_array[i].id+"</b><br>"; 
     }
   } 


Para mostrar los datos crea un campo de texto llamado pueblos_txt que sea dinámico, y márcalo como html

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 Ago 2010 08:21 pm
Crea un campo de texto, lo seleccionas, y en el inspector de propiedades al lado del desplegable que dice Single Line tienes tres botones, el primero lo hace seleccionable, el segundo (que es el que tienes que marcar) es para que interprete el texto como HTML, el tercero es que muestre el background

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 27 Ago 2010 02:08 pm
Es lo que se denomina un operador trinario, que es una forma fácil de reemplazar un if/else, pero para que sea claro puedes reemplazar esas dos líneas por:

Código ActionScript :

if(atributos.pcolor == "Amarillo"){
   objetoPueblo.pcolor = 0xFFFF00;
} else if(atributos.pcolor == "Rojo"){
   objetoPueblo.pcolor =  0xFF0000;
} else if (atributos.pcolor == "Verde") {
         objetoPueblo.pcolor = 0x00FF00; 
}


Esta es la forma completa y correcta, solo que yo soy vago para escribir código y muchas veces lo escribo resumido y un poco inentendible

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 27 Ago 2010 03:51 pm
Agrega todos los nodos pueblos a pueblosCargados, luego los recorre y mete cada nodo en un Array (ya dentro de la función pasar_a_array)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Oct 2011 12:34 pm
Jorge, estuve viendo este foro y me ayudo bastante, pero tengo que adaptarlo a mi proyecto; tengo un mapa que tiene pueblos, cada pueblo es un movie clip, y cuando carga el xml
<listado>
<PROVINCIA id="1" valor="50" color="#A5F3B4"/>
<PROVINCIA id="2" valor="30" color="#CA028E"/>
</listado>
deberia pintarse cada pueblo de un color y mostrar el valor. Actualmente lo arme con la ayuda del ejemplo de yolanda, pero hay cosas q no puedo resolver, realmente estoy frenada con esto!! te copio mi codigo de as:

System.useCodepage = true;
XML.prototype.ignoreWhite = true;
datos_txt.autoSize = "left";
datos_xml = new XML();
datos_xml.onLoad = cargarDatos;
listado_array = new Array();
function cargarDatos(exito) {
if (exito) {
listadoCargados = this.firstChild.childNodes;
for (var k = 0; listadoCargados[k]; k++) {
pasar_a_array(listadoCargados[k]); }
delete listadoCargados;
delete datos_xml;
verListado();
}
}
function pasar_a_array(listado) { /se que aca esta el inconveniente pero no se como resolverlo!!
var objetoProvincia = new Object();
var atributos = listado.attributes;
objetoProvincia.color = (atributos.color == "Amarillo") ? 0xFFFF00 : 0xFF0000;
if (atributos.color == "Verde") objetoProvincia.color = 0x00FF00;
objetoProvincia.valor = atributos.valor;
objetoProvincia.id = Number(atributos.id);
listado_array.push(objetoProvincia);
trace(this["p"+atributos.id])
var col = new Color(this["p"+atributos.id]).setRGB(objetoProvincia.color);//el nombre de instancia es "p"+ un nro de id
}

datos_xml.load("pueblos.xml");
stop();

MUCHAS GRACIAS!!!

Por galape

11 de clabLevel



 

msie8
Citar            
MensajeEscrito el 20 Oct 2011 12:36 pm
Olvide decir que el color del pueblo varia segun el valor, cada valor tiene asignado un color por mi cliente.

Por galape

11 de clabLevel



 

msie8
Citar            
MensajeEscrito el 20 Oct 2011 02:56 pm
¿Y cual es el problema exactamente? ¿No los pinta?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Oct 2011 05:25 pm
si los pinta pero si pongo este codigo en xml

<listado>
<provincia id="1" color="Amarillo" valor="50" />
<provincia id="2" color="Rojo" valor="100" />
<provincia id="3" color="Verde" valor="100" />
</listado>

y yo necesito que el color este en xml no en as o sea:
<listado>
<PROVINCIA id="1" valor="50" color="#A5F3B4"/>
<PROVINCIA id="2" valor="30" color="#CA028E"/>
</listado>

y otra cosa que no me muestra es el valor de cada pueblo. gracias!!

Por galape

11 de clabLevel



 

msie8
Citar            
MensajeEscrito el 20 Oct 2011 05:33 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Oct 2011 05:52 pm
claro, encima el valor debe salir en cada pueblo y no se como hacer que aparezca!

Por galape

11 de clabLevel



 

msie8
Citar            
MensajeEscrito el 20 Oct 2011 05:55 pm
igual creo qeu me pueden ayudar con respecto a la carga de color, que lo cargue desde el xml y no lop inte desde as. se entiende?
El tutorial ya lo vi pero realmente no encuentro la solucion...

Por galape

11 de clabLevel



 

msie8
Citar            
MensajeEscrito el 20 Oct 2011 06:11 pm
A ver si entiendo, si usas AS escribiendo el XML directamente puedes hacerlo, pero no si lo intentas cargar externo?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Oct 2011 06:24 pm
voy a tratar de explicarme actualmente, me pinta los pueblos pero no me muestra el valor, eso no se como hacerlo: aca va el codigo
xml

Código :

<?xml version="1.0" encoding="UTF-8"?>
<listado>
  <provincia id="1" color="Amarillo" valor="50" />
  <provincia id="2" color="Rojo" valor="100" />
  <provincia id="3" color="Verde" valor="100" />
</listado>

y el codigo as2

Código ActionScript :

System.useCodepage = true;
XML.prototype.ignoreWhite = true; 
datos_txt.autoSize = "left"; 
datos_xml = new XML(); 
datos_xml.onLoad = cargarDatos; 
listado_array = new Array(); 
function cargarDatos(exito) {    
   if (exito) {      
   listadoCargados = this.firstChild.childNodes;       
   for (var k = 0; listadoCargados[k]; k++) {          
   pasar_a_array(listadoCargados[k]);       }       
   delete listadoCargados;      
   delete datos_xml;       
   verListado();   
   }
} 
function pasar_a_array(listado) {  
   var objetoProvincia = new Object();    
   var atributos = listado.attributes;    
   //objetoProvincia.color = (atributos.color == "Amarillo") ? 0xFFF59A : 0xE2003B;    
   if(atributos.color == "Amarillo"){   
   objetoProvincia.color = 0xFFFF00; } 
   else if(atributos.color == "Rojo"){    
   objetoProvincia.color =  0xFF0000; } 
   else if (atributos.color == "Verde") {          
   objetoProvincia.color = 0x00FF00;  }
   objetoProvincia.valor = atributos.valor;    
   objetoProvincia.id = Number(atributos.id);  
   listado_array.push(objetoProvincia);    
   //trace(this["p"+atributos.id])    
   var col = new Color(this["p"+atributos.id]).setRGB(objetoProvincia.color);//el nombre de instancia es "p"+ un nro de id 
   }    
function verListado() {
   listado = "";
   for (var i = 0; listado_array[i]; i++) {
   listado += "<b>"+listado_array[i].color+" "+listado_array[i].valor+"</b>"+listado_array[i].id+"</b><br>";
}
}

   datos_xml.load("pueblos.xml"); 
   stop(); 

asi me pinta el movie clip, lo que no se es como agregar el tema del texto que me muestre el atributo valor de mi xml. eso en una primera parte. por lo menos tnego q poder resolver eso, lo otro luego lo comento. mil gracias!!

Por galape

11 de clabLevel



 

msie8
Citar            
MensajeEscrito el 20 Oct 2011 11:11 pm
Suponiendo que cada provincia tuviera una caja de texto con nombre de instancia t+id, puedes agregar

Código ActionScript :

objetoProvincia.valor = atributos.valor;   
this["t"+atributos.id].text = atributos valor


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Ir a página 1, 2  Siguiente
Foros de discusión > Flash

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.