Comunidad de diseño web y desarrollo en internet online

Acciones en botones duplicados...

Citar            
MensajeEscrito el 07 Nov 2006 02:57 pm
Buenas!

Llevo dandole vueltas al mismo problemas varias horas. Mi pelicula carga un archivo xml, parseo los valores y los guardo en variables de la siguiente manera:

Código :

function recullXML(carregat) {
   if (carregat) {
      xmlNode = this.firstChild;
      NomCarpeta = [];
      posX = [];
      posY = [];
      SubCarpetes = [];
      totCarpetes = xmlNode.childNodes.length;
      for (i=0; i<totCarpetes; i++) {
         NomCarpeta[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
         posX[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
         posY[i] = xmlNode.childNodes[i].childNodes[2].firstChild.nodeValue;
         SubCarpetes[i] = xmlNode.childNodes[i].childNodes[3].firstChild.nodeValue;
      }
      tempoMostra = setInterval(mostraCarpetes, 1000);
   } else {
      trace("no ha carregat el XML");
   }
}
xmlAlbum = new XML();
xmlAlbum.ignoreWhite = true;
xmlAlbum.onLoad = recullXML;
xmlAlbum.load("nom_carpetes.xml");


Importo de la libreria este movieclip:

Código :

this.attachMovie("icos_carpetes", "icos_carpetes", 5);
icos_carpetes._visible=false;


Una vez parseo todos los nodos, cargo la funcion:

Código :

//inicio la variable j a 0.
j = 0;
function mostraCarpetes(){
   //Duplico la movie tantas vezes como nodos en el xml
   if (j<=totCarpetes) {
      icos_carpetes.duplicateMovieClip("icos_carpetes"+j,j+55);
      //Le paso a la movie el valor de j, en la variable "id_carpeta"
      eval("icos_carpetes"+j).id_carpetes=j;
      
      eval("icos_carpetes"+j).bot_fons_carpets.onPress=function(){
         //Intento imprimir la variable id_carpetas y me da undefined.
         trace(eval("icos_carpetes"+j).id_carpetes);
      }
      //Si pongo el mismo trace fuera del boton, si que me imprime los valores:
      trace(eval("icos_carpetes"+j).id_carpetes);
      
   }
   j++;
   if(j==totCarpetes){
      clearInterval(tempoMostra);
   }
}


Todo esto funciona bien. El problema que tengo y el más importante es que no consigo pasarle acciones al boton. En las acciones del botón, he puesto un trace, que tendria que imprimir el valor de "j" de ese botón, pero me da undefined.

No se se entiende el problema. Lo del xml, quizas no importa, pero es para que vean como lo estoy planteando todo.


Muchas gracias por su tiempo!

Salut!

Por loisin

65 de clabLevel



Genero:Masculino  

Colonia-Castells

firefox
Citar            
MensajeEscrito el 07 Nov 2006 03:14 pm
Hola!!... Mira por lo que vi en la funcion "function mostraCarpetes()" definis los eventos para los botones, y ademas dentro de cada evento deseas mostrar el indice de boton; el tema es que la variable "j" no existe dentro de cada boton, si queres tener acceso al indice deberias pasarle esa variable al boton...
algo asi como

Código :

eval("icos_carpetes"+j).bot_fons_carpets.id=j;
eval("icos_carpetes"+j).bot_fons_carpets.onPress=function(){

         //Intento imprimir la variable id_carpetas y me da undefined.

         trace(this.id);

      }

Espero que te sirva
Saludos!!

Por mansonet

30 de clabLevel



Genero:Masculino  

Argentina

firefox
Citar            
MensajeEscrito el 07 Nov 2006 03:54 pm
Muchisimas gracias mansonet! no me daba cuenta que realmente las acciones estaban en el boton y este no tenia ninguna variable.

Me ha servido para darme cuenta de ello, pero ahora me surjen más problmeas.. En el movieclip donde cargo este boton tambien tengo funciones, y también una caja de texto. Una de las acciones que debia realizar este boton era canviar de color la caja de texto; pero al estar por encima nunca la ve.
Ahora tengo esto:

Código :

eval("icos_carpetes"+j).bot_fons_carpets.onPress=function(){
   caixa_nom_carpet.textColor=0xFFFFFF;
}


Esta caja de texto esta en la movie icos_carpetes, o mejor dicho eval("icos_carpetes"+j); pero el boton esta por encima! No puedo utilizar _root, ya que tengo un preloader general y este será el level0..
También he probado con niveles y no me ha funcionado:

Código :

eval("icos_carpetes"+j).bot_fons_carpets.onPress=function(){
   //Dinamicamente no funciona
   _root.buscar_document.eval("icos_carpetes"+this.id_carpetes).caixa_nom_carpet.textColor=0xFFFFFF;
   //Manualmente si...claro
   _root.buscar_document.icos_carpetes0.caixa_nom_carpet.textColor=0xFFFFFF;
}


Realmente esto de los niveles entre los mismos movieclips de una pelicula, y entre peliculas es un follon!!

Espero que haya planteado bien el problema.


Gracias!

Por loisin

65 de clabLevel



Genero:Masculino  

Colonia-Castells

firefox
Citar            
MensajeEscrito el 07 Nov 2006 04:00 pm
Hola. Para manejar entre niveles podes utilizar la propiedad "_parent" que la tiene todo objeto de flash.

Código :

eval("icos_carpetes"+j).bot_fons_carpets.onPress=function(){

   this._parent.caixa_nom_carpet.textColor=0xFFFFFF;

}

"_parent" te sirve para subir un nivel dicho de alguna manera... pero es el objeto en el cual esta contenido.
Probalo y me comentas como te salio todo.
Espero que te sirva
Saludos!

Por mansonet

30 de clabLevel



Genero:Masculino  

Argentina

firefox
Citar            
MensajeEscrito el 07 Nov 2006 04:33 pm
Perfecto! mi problema es que quiero aprender demasiado rapido, y lo de los niveles es un capitulo al que no preste mucha atencion... Prometo estudiar mas!!

Muchas gracias mansonet, un saludo!

Por loisin

65 de clabLevel



Genero:Masculino  

Colonia-Castells

firefox

 

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