Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/06/2008, 12:12
Avatar de hrxnet
hrxnet
 
Fecha de Ingreso: julio-2002
Ubicación: Sto. Dgo. RD
Mensajes: 516
Antigüedad: 22 años, 4 meses
Puntos: 0
Problema con Eventos en AS (xml, bucles, movieclip y text)

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:
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");