Comunidad de diseño web y desarrollo en internet online

Problema con Eventos en AS (xml, bucles, movieclip y text)

Citar            
MensajeEscrito el 09 Jun 2008 02:49 pm
Hola a todos,

Tengo más de una semana rompiéndome la cabeza con un script en AS. Soy muy nuevo en AS así que de ante mano pido disculpa por mis errores y lo largo de este post.

Estoy sacando datos desde archivos xml para ser cargados en flash, los datos son textos e imágenes. Mi script funciona a la perfección sacando los datos y con los eventos siempre y cuando saco solo textos. El problema surge a la hora de querer asignarle eventos a al movieclip que carga las imagenes que estoy sacando de los xml.

El funcionamiento del Script es el siguiente:

-Crear un menú con botones (main_btn el cual es instancia de proyecto_item)
-Al tocar un boton se cambia la información correspondiente a la descripción (content_txt el cual es instancia de infobox_mc) y también se debería cambiar la información correspondiente a las imagenes thumbs_mc lo cual no sucede ya que la función que maneja esos eventos: DisplayInfo() está configurada para interactar con text o htmlText y no con movieclip.

Además tengo otro elemento llamado thumbs_txt el cual carga los nombres de las imagenes, lo tengo en el sript solo con fines de pruebas y para asegurarme de que las variables están siendo pasadas correctamente.

Bien, aquí copiare el Script completo (disculpen) ... ... La idea es poder asignarle los eventos a las imagenes y así cambien a la hora de tocar un boton

Código :

function DisplayInfo(){
   menu_mc._visible = true;
   infobox_mc._visible = true;
   infobox_mc.content_txt.htmlText = this.location_text;
   infobox_mc.thumbs_txt.htmlText = this.location_img;
   //infobox_mc.thumbs_mc = location_thumbs;
}

//Variables para configurar el menú donde se cargan los botones
var item_spacing = 28; // how far menu items are spaced veritcally
var item_count = 0; // counts menu items as they are added from the XML
var thumb_spacing = 40;

function loadXML(loaded) {
   if (loaded) {

      
      //Definir Array para buscar dentro del xml
      var total = this.firstChild.childNodes.length;
      totalnodos_txt.text = total;
      
      //Primer bucle para sacar datos de los proyectos
      for (p=0; p<total; p++) {
         var id = this.firstChild.childNodes[p].childNodes[0].firstChild.nodeValue;
         var cliente = this.firstChild.childNodes[p].childNodes[1].firstChild.nodeValue;
         var proyecto = this.firstChild.childNodes[p].childNodes[2].firstChild.nodeValue;
         var descripcion = this.firstChild.childNodes[p].childNodes[3].firstChild.nodeValue;
         
         // Crear un menu item movie clip como instanacia de menu_mc 
         var item_mc = menu_mc.attachMovie("proyecto_item","item"+item_count, item_count);
         item_mc._y = item_count * item_spacing;
         item_count++;
         
         // Asginar valores:  Etiquetas de los botones
         item_mc.proyecto_txt.text = proyecto;
         
         //Configurar el evento del boton 
         item_mc.main_btn.onRelease = DisplayInfo;

            //Definir Array para buscar dentro del xml
         var detalles_total = this.firstChild.childNodes[p].childNodes[4].childNodes.length;
         
         //Segundo bucle (es aninado del primero) para sacar datos de los detalles e imagenes de los proyectos
         for (d=0; d<detalles_total; d++) {
            var det_id = this.firstChild.childNodes[p].childNodes[4].childNodes[d].childNodes[0].firstChild.nodeValue;
            var det_proyectoid = this.firstChild.childNodes[p].childNodes[4].childNodes[d].childNodes[1].firstChild.nodeValue;
            var det_titulo = this.firstChild.childNodes[p].childNodes[4].childNodes[d].childNodes[2].firstChild.nodeValue;
            var det_descripcion = this.firstChild.childNodes[p].childNodes[4].childNodes[d].childNodes[3].firstChild.nodeValue;
            
            //Asignar valores:  Descripción de los proyectos
            detalle = "<b>"+det_titulo+"</b> <br />"+det_descripcion+" <br /><br />";
            item_mc.main_btn.location_text = item_mc.main_btn.location_text + detalle;   
            
            //Sacar las imagenes
            var img_id = this.firstChild.childNodes[p].childNodes[5].childNodes[d].childNodes[0].firstChild.nodeValue;
            var img_thumbs = this.firstChild.childNodes[p].childNodes[5].childNodes[d].childNodes[1].firstChild.nodeValue;
            var img_titulo = this.firstChild.childNodes[p].childNodes[5].childNodes[d].childNodes[2].firstChild.nodeValue;
            
            //Aquí está el problema con los eventos
            //Construir los movie clip para cargar las imagenes dentro de  infobox_mc.thumbs_mc 
            //las cuales deberían cambiar al tocar un boton con le nombre del proyecto pero no cambian!
            var currentThumb_mc = infobox_mc.thumbs_mc.createEmptyMovieClip("thumbnail_mc"+d,d);
            currentThumb_mc = currentThumb_mc;
            currentThumb_mc._x = d * thumb_spacing;
      
            currentThumb_mc.createEmptyMovieClip("thumb_container",0);
            currentThumb_mc.thumb_container.loadMovie(img_thumbs);
      
            //currentThumb_mc.image = img_thumbs;

            //currentThumb_mc.onRelease = function(){
            //image_mc.loadMovie(this.image);
            //}            
            
            //Esto es para mostrar los nombres de las imagenes en un campo htmlText 
            //y así asegurarme de que se estan sacadno las variables correcta de los xml
            imagen = ""+img_thumbs+" <br />";
            //Asignar valores:  Nombres de las imagenes en htmlText
            item_mc.main_btn.location_img = item_mc.main_btn.location_img + imagen;
            
         }
         //Defino esta variable fuera del bucle anidado para indicar que para el siguiente 
         //ciclo del bucle empieze en blanco.
         infobox_mc.thumbs_mc = "";
         
      }
   } else {
      trace("file not loaded!");
   }
}

xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("portafolio2.xml");

Por herohat

3 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 Jun 2008 01:11 pm
En estas líneas que tienes comentadas copias la imagen al contenedor y das el evento:

Código :

currentThumb_mc.image = img_thumbs;
currentThumb_mc.onRelease = function(){
    image_mc.loadMovie(this.image);
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Jun 2008 01:30 pm
Hola Jorge,

Te cuento, una vez que se genera el thumbs de fotos con las líneas:

Código :

            var currentThumb_mc = infobox_mc.thumbs_mc.createEmptyMovieClip("thumbnail_mc"+d,d);
            currentThumb_mc = currentThumb_mc;
            currentThumb_mc._x = d * thumb_spacing;
      
            currentThumb_mc.createEmptyMovieClip("thumb_container",0);
            currentThumb_mc.thumb_container.loadMovie(img_thumbs);


luego intervienen las líneas que están comentadas con el objetivo que al tocar una de las fotos del thumbs, se abra esa misma foto en el movieclip de nombre: image_mc

En otras palabras, realmente esas lineas no las necesitamos ahora, lo importante ahora es hacer que se genere el thumbs (eso funciona perfecto) y que al hacer click en un botón cambie las fotos a general ya con los nuevos parámetros que le da el bucle en cada ciclo.

Por herohat

3 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 Jun 2008 01:42 pm
y que al hacer click en un botón cambie las fotos a general ya con los nuevos parámetros que le da el bucle en cada ciclo.


¿Te refieres a que al darle a un botón cambias el XML que se carga? (portafolio2.xml)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Jun 2008 02:05 pm
No... el xml es un solo.

portafolio2.xml:

Código :

<?xml version="1.0" encoding="utf-8"?>
<lave>
    <proyecto> 
       <id>1</id>
      <Cliente>SuperCasas</Cliente>
      <proyecto>Casa Madrid</proyecto>
      <descripcion>Descripcion General del Proyecto ID 1</descripcion>
      <detalles>
         <detalle> 
             <id>5</id>
            <proyectoid>1</proyectoid>
            <titulo>Casa 01</titulo>
            <descripcion>Descripcion Casa 01</descripcion>
         </detalle> 
          <detalle> 
             <id>2</id>
            <proyectoid>1</proyectoid>
            <titulo>Casa 02</titulo>
            <descripcion>Descripcion Casa 02</descripcion>
         </detalle> 
          <detalle> 
             <id>6</id>
            <proyectoid>1</proyectoid>
            <titulo>Casa 03</titulo>
            <descripcion>Descripcion Casa 03</descripcion>
         </detalle> 
       </detalles> 
      <imagenes>
         <imagen> 
             <id>1</id>
            <imagen>portfolio_images/thumbs/diskcollection.jpg</imagen>
            <titulo>Foto 1</titulo>
         </imagen> 
          <imagen> 
             <id>2</id>
            <imagen>portfolio_images/thumbs/garden.jpg</imagen>
            <titulo>melvyn</titulo>
         </imagen> 
          <imagen> 
             <id>3</id>
            <imagen>portfolio_images/thumbs/green.jpg</imagen>
            <titulo>Foto 2</titulo>
         </imagen> 
       </imagenes>
   </proyecto>
   <proyecto> 
       <id>2</id>
      <Cliente>Omnimedia</Cliente>
      <proyecto>edificio corporativo</proyecto>
      <descripcion>Descripcion General del Proyecto ID 2</descripcion>
      <detalles>
         <detalle> 
             <id>3</id>
            <proyectoid>2</proyectoid>
            <titulo>PUESTOS</titulo>
            <descripcion>CANTIDAD DE PUESTOS: 45</descripcion>
         </detalle> 
          <detalle> 
             <id>4</id>
            <proyectoid>2</proyectoid>
            <titulo>PERSONAS</titulo>
            <descripcion>CANTIDAD DE PERSONAS 55</descripcion>
         </detalle> 
       </detalles> 
      <imagenes>
         <imagen> 
             <id>4</id>
            <imagen>portfolio_images/thumbs/tinydisk.jpg</imagen>
            <titulo>prueba</titulo>
         </imagen> 
          <imagen> 
             <id>5</id>
            <imagen>portfolio_images/thumbs/plug.jpg</imagen>
            <titulo>dsad</titulo>
         </imagen> 
       </imagenes>
   </proyecto>
</lave> 



Como verás, en ese xml existen dos proyectos, cada uno con sus detalles y fotos. Mi AS actual funciona a la perfección sacando la información del xml, también funciona bien cuando al darle click al boton con el nombre de los proyectos y me muestras sus detalles especificos... Ahora bien, con las imagenes (thumbs) es otro tema... al correr el script tal cual está ahora me muestras las tres imagenes (thumbs) del primer proyecto y Nada ocurre al tocar el boton del segundo proyecto, en este punto debería cambiarme las tres imagenes del primer proyecto por las dos imagenes del segundo proyecto.


Espero me hallas entendido mejor ahora en lo que deseo hacer.


Saludos y gracias.

Por herohat

3 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 Jun 2008 02:11 pm
¿Que code tiene el botón?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Jun 2008 02:26 pm
Ninguno... aunque anteriormente probé ponerle códigos en mis intentos... De todas formas, el nombre del boton es:

main_btn y es instancia de proyecto_item..... osea, en ese mismo AS se le podría poner el evento. Aunque si te fijas en el AS en la forma en como funcionan los eventos para mostrar los detalles de los proyectos:

item_mc.main_btn.location_text = item_mc.main_btn.location_text + detalle;

Quizas se te ocurre algo... notar que : location_text esta declarado arriba en el AS en al función: DisplayInfo

Por herohat

3 de clabLevel



Genero:Masculino  

firefox

 

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