Comunidad de diseño web y desarrollo en internet online

Problema al crear campos de texto desde un xml

Citar            
MensajeEscrito el 22 Sep 2008 11:13 am
Hola!Tengo el siguiente problema,quiero cargar unos campos de un xml a campos de texto en flash.El problema que tengo es que en flash solo me muestra el ultimo valor,que cojo del xml.Este es el codigo que tengo.

Código :

var posx=100;
      var posy=100
      for(var i=0;i<obj_xml.firstChild.childNodes.length;i++){            
          _root.createTextField("mytext"+i,1,posx,posy,300,100);      
         _root["mytext"+i].text=obj_xml.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;         
         trace(_root["mytext"+i].text);
         posy+=100;      
      }
   }
};
obj_xml.load("colecciones.xml");

El trace que veis ahi siq ue me devuelve los valores de forma correcta.Supongo que el problema estara en que siempre cargo los valores sobre el mismo campo de texto y se machacan o algo asi.Pero yo pensaba que se hacia de esta forma

Por jaime333

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 22 Sep 2008 12:34 pm
Pero si le dices al texto que se iguale al valor lo que ocurre es algo como esto:

Código ActionScript :

a = 1;
a = 2;
a = 3;


Al final el resultado de "a" no será 6, sino 3 que fue el último valor que le asignaste, pare hacer lo que deseas, debes sumarle cada nuevo valor al campo de texto:

Código ActionScript :

_root["mytext"+i].text += obj_xml.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;         

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 22 Sep 2008 05:10 pm
No me explique bien.yo lo que quiero es por ejemplo si cojo tres valores.Crear tres campos de texto.Con un valor en cada campo.No se supone que estoy creandos distintos campos de texto al poner.["mytext"+i]?.Sino es asi si podeis decirme como se hace

Por jaime333

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 22 Sep 2008 05:49 pm
Disculpa, el error fue mio, no vi que estabas creando diferentes campos de texto, lo que sucede es que le pones la misma profundidad, cambia la profundidad y no deberás tener problemas:

Código ActionScript :

var myTexto:TextField = _root.createTextField("mytext" + i, _root.getNextHighestDepth(),posx,posy,300,100);
myTexto.text = obj_xml.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 22 Sep 2008 06:14 pm
Muchas gracias,si que era eso.Sino es mucha molestia me puedes explicar como va eso de la profundidad.Porque yo pensaba que al variar la y.Pos la profundidad daba igual ya que ya estaban en sitios distintos del espacio.No entiendo muy bien eso de la profundiad y prefiero entender porque es asi que copiarlo y seguir sin saber que hace realmente.Sino es mucha molestia cuando tengas un rato si lo puedes explicar gracias y un saludo

Por jaime333

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 22 Sep 2008 07:12 pm
Al contrario de la profundidad en tiempo de diseño, que se basa en los layers y donde puedes tener varios objetos en el mismo layer, la profundidad en tiempo de ejecución (llamada también "nivel") sólo puede ser ocupada por un objeto a la vez; así que si colocas un objeto en el mismo nivel de profundidad donde se encuentra otro, aquel reemplazará a éste.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox
Citar            
MensajeEscrito el 22 Sep 2008 07:13 pm
Mira, si has trabajado con softwares de vectores, como Illustrator, Freehand, Corel o el mismo flash, notarás que si haces varios objetos siempre unos tienen que estar por delante de los otros, no hay forma que puedas insertar dos en una misma profundidad (depth en inglés), siempre hay uno que estará por delante a no ser que cambies la profundidad del de atrás.

Bueno al trabajar por códigos, si le asignas igual profundidad a dos objetos, el que prevalecerá será el último que creaste, ya que como viste no pueden haber dos compartiendo la misma:

Código ActionScript :

this.createemptyMovieClip("ejemplo1", 1);
this.createemptyMovieClip("ejemplo2", 1);


En el anterior ejemplo el movieclip 1 será borrado por el segundo porque se crearon los dos en iguales profundidades, pare evitar esto se le deben asignar diferentes niveles de profundidad:

Código ActionScript :

this.createemptyMovieClip("ejemplo1", 1);
this.createemptyMovieClip("ejemplo2", 2);


O lo que es más sencillo y complica menos, que flash tome la profundidad más alta que esté disponible en el movieClip señalado:

Código ActionScript :

this.createemptyMovieClip("ejemplo1", this.getNextHighestDepth());
this.createemptyMovieClip("ejemplo2", this.getNextHighestDepth());

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 22 Sep 2008 07:13 pm
Bueno dos respuestas mejor que una.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 22 Sep 2008 07:17 pm
Ahora ya esta todo mas claro muchas gracias.

Por jaime333

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 22 Sep 2008 07:49 pm
Al seguir,programando.Me he fijado que los campos de texto que cree en ese fotograma,ahora se me muestran en todos los otros fotogramas.Como se hace para que solo se muestren en el frame que los creo.Perdona si la pregunta es muy tonta,pero acabo de empezar en flash y este tipo de cosas para mi son extrañas,ya que siempre habia programado en lenguajes de programacion convencionales,y he buscado por ahi y no he conseguido encontrar nada.
Gracias por adelantado

Por jaime333

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 22 Sep 2008 08:26 pm
Lo mejor es que crees un MovieClip en la escena solo en ese frame y crees los textos dentro, de esta manera cuando pases a otro frame estos no estarán.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 22 Sep 2008 08:49 pm
He hecho lo que me has comentado y sigo teniendo el mismo error te pego el codigo a ver que ves mal.


Código :


 _root.createEmptyMovieClip("contenedor", _root.getNextHighestDepth());
          var contenedor=_root["contenedor"];
          contenedor.createTextField("mytext"+i,contenedor.getNextHighestDepth(),posx,posy,50,20);      
          var titulo=contenedor["mytext"+i].text=obj_xml.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;         
           contenedor.createEmptyMovieClip("diapo"+i, contenedor.getNextHighestDepth());
         var clip = contenedor["diapo"+i];         
 clip.loadMovie(obj_xml.firstChild.childNodes[i].childNodes[1].firstChild.nodeValue);
 

Lo que intento hacer en el codigo es cojo del xml,dos campos uno que lo meto en textfield y otro que lo que hace es cargarme una foto en un movieclip que tambien creo.Lo que te entendi que teneia que hacer para que en otros frames no se vean ni los campos de texto ni las fotos es meterlos en un moviclivacio.Eso seria contenedor.Pero tanto los campos de texto como las fotos me siguen saliendo en otros frames

Por jaime333

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 22 Sep 2008 09:01 pm
Claro porque creaste el movieClip en el mayor depth y por lo tanto estará presente en los demás frames, me refería a que hicieras un movieClip vacío en la escena llamado contenedor, solamente en ese frame.

Si no deseas hacerlo así entonces deberás poner la propiedad _visible del contenedor en false. cuando pases a otros frames.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 22 Sep 2008 09:19 pm
De momento lo tengo puesto con lo de visible.
Pero vamos a ver lo que te refieres,es que los movieclips que creo mediante codigo son "globales" se podria decir.Y a lo que te referias es que crease uno con un cuadrado arrastrandolo al frame y esos son los que son "locales" solo a ese frame.
¿Es esto asi?

Por jaime333

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 22 Sep 2008 10:49 pm
No, lo que trataba de decirte es que cuando creas un MovieClip en la escena este estará presente solo en el fotograma donde lo hayas creado y su profundidad será negativa, cuando creas uno por código estará por encima de todo, incluso aunque cambies de frame. Por lo que te recomendaba que hicieras un MovieClip vacío sin nada dentro en este frame y le pusieras de nombre de instancia "contenedor".

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 23 Sep 2008 11:12 am
Si si ya te entendi.Pero que lo que te comentaba arriba por hablarlo de una forma que me aclare.Si que es lo que te comentaba.Lo que creas por codigo son como globales y los que creo arrastrando son locales a ese frame. Bueno en cuanto a eso ya lo tengo claro.


Ahora me ha surgido otro problemilla,como te comente antes lo que queria hacer es cojer dos campos de un xml,Un campo lo meto en el flash como campo de texto y el otro campo es una ruta de una imagen que cargo en un movieclip.
Por ahi te lei en un post que para poder hacer un on(press) en las imagnenes.Debia meter lo que es la carga de la imagen en un moviclip.En el primer meter el codigo y en el segundo cargar la imagen.Pos bien eso es lo que hice hasta ahi todo perfecto.Mi problema viene en que yo lo que quiere,es que dependiendo de la imagen que pinche lo que haga sea distinto.Pero con mi codigo siempre hace lo mismo.Podrias explicarme como va esto.Aqui te dejo mi codigo.

Código :

for(var i=0;i<obj_xml.firstChild.childNodes.length;i++){   
          _root.createEmptyMovieClip("contenedor",_root.getNextHighestDepth());
          var contenedor=_root["contenedor"];
          contenedor.createTextField("mytext"+i,contenedor.getNextHighestDepth(),posx,posy,50,20);      
          var titulo=contenedor["mytext"+i].text=obj_xml.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;         
           contenedor.createEmptyMovieClip("codigo"+i, contenedor.getNextHighestDepth());
         var codigo = contenedor["codigo"+i];
         codigo.createEmptyMovieClip("diapo"+i, codigo.getNextHighestDepth());      
         var clip= codigo["diapo"+i];
            clip.loadMovie(obj_xml.firstChild.childNodes[i].childNodes[1].firstChild.nodeValue);
         clip._x = posx;
            clip._y = posy+20;                  
                    
         codigo.onPress = function(){
            clip._x=posx+100;
         };         

         posy+=133;         
      }

Por jaime333

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 23 Sep 2008 12:53 pm
He conseguido resolver el problema mirando un post tuyo que habia por ahi sobre un carrito.Gracias de todas formas y perdon por no haber mirado mas el foro antes de postear

Por jaime333

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 23 Sep 2008 06:51 pm
No hay de que, me alegro que hayas resuelto.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox

 

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