Comunidad de diseño web y desarrollo en internet online

funciones en clips dinámicos

Citar            
MensajeEscrito el 21 Oct 2008 08:44 am
Buenas.
Estoy tratando de crear una aplicación que cargue un menú dinamicamente de los contenidos de un XML
La estructura ya la tengo, lo que es el menú en si mismo.
Ahora lo que me ocurre es que no puedo asignarle una función OnRelease a cada elemento del menú. No se lo que estoy poniendo mal. El problema viene al hacer la llamada al elemento dinámico que he creado. Está mal llamado pero no se como hacerlo. A ver si me podeis ayudar.
Muchas gracias de antemano.

Código :

System.useCodepage = true;
videosXML = new XML();
videosXML.ignoreWhite = true;
videosXML.load("videos/videos.xml");
videosXML.onLoad = organizarXML;
var secciones = new Array();
function organizarXML()
{
   var posicionx1 = 325;
   var posicionx2 = 335;
   var posiciony = 50;
   var desplazamiento = 30;
   var w = 0;
   for (yy=0; yy<videosXML.firstChild.childNodes.length; yy++)
   {
      _root = attachMovie("botonpadre","boton"+w, w, {_x:posicionx1, _y:posiciony});   
      posiciony = posiciony + desplazamiento;
      w++;
      ["boton"+w].onRelease = function():Void
      { 
        trace("menu padre");
         }      
      for (aa=0; aa<videosXML.firstChild.childNodes[yy].childNodes.length; aa++)
      {
         this = attachMovie("botonpadre","boton"+w, w, {_x:posicionx2, _y:posiciony});   
         posiciony = posiciony + desplazamiento;
         w++;
         ["boton"+w].onRelease = function():Void
         {
            trace("menu hijo");
         }
      }
   }
}


Un salduo

Gorehide

Por Gorehide

15 de clabLevel



 

Bilbao

firefox
Citar            
MensajeEscrito el 21 Oct 2008 10:18 am
Mira no se que intentas hacer con el código, parece que quieres introducir botones hijos dentro de botones padres, si es esto, solo te recomiendo que si le das eventos de boton a un MovieClip, los MovieClips que estén dentro no aceptarán eventos de este tipo, aquí te dejo tu mismo código solo hasta la parte de crear los padres para que veas un método a utilizar:

Código ActionScript :

var myRoot:MovieClip = this;

function organizarXML():Void {
   
   var posicionx1:Number = 325;
   var posiciony:Number = 50;
   var desplazamiento:Number = 30;
   
   var i:Number;
   var boton:MovieClip;
   var nodos:Array = this.firstChild.childNodes;

   for (i = 0; i < nodos.length; i++) {
      
      boton = myRoot.attachMovie("botonpadre", "boton" + i, myRoot.getNextHighestDepth(), {_x:posicionx1, _y:posiciony});
      posiciony += desplazamiento;

      boton.onRelease = function():Void  {
         trace("menu padre");
      };
   }
}

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 21 Oct 2008 11:08 am
Gracias elchininet.

Lo que estoy tratando de hacer es un menú que se genere automaticamente con el contenido de un xml.
De este modo cuando tenga que cambiar el menú, solo tendría que cambiar la estructura del xml.
Me funciona bien excepto la llamada que hace cada boton. Cuando hago click en el boton me debería sacar el títitulo de cada menú (que lo coge del xml), pero se queda con la información del último que ha leido. Adjunto el flash y el xml por si lo necesitais para aclararos.

presentacion

Gracias de nuevo

Por Gorehide

15 de clabLevel



 

Bilbao

firefox
Citar            
MensajeEscrito el 21 Oct 2008 11:37 am
Sólo postea el código como quedó, todo parece indicar que haces referencia a la variable del ciclo dentro del evento del botón.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 21 Oct 2008 02:00 pm
Gracias de nuevo por la paciencia.

Código :

var posicionx1 = 25;
var posiciony = 50;
var desplazamiento = 30;
var myRoot = this;
for (ss=0; ss<5; ss++)
{
   attachMovie("botonpadre","boton"+ss, ss, {_x:posicionx1, _y:posiciony});   
   posiciony = posiciony + desplazamiento;
   myRoot["boton"+ss].onRelease = function():Void
   { 
     trace("menu papa"+ss);
   }
}


El tema es el siguiente. Voy a resumirlo a la zona del problema nada mas. Teniendo ese código, como puedo hacer que el click en cada uno de los movie clips me devuelta "menu papa1", "menu papa2", "menu papa3"...
Algo se me escapa.

Gracias de nuevo por la ayuda

Por Gorehide

15 de clabLevel



 

Bilbao

firefox
Citar            
MensajeEscrito el 21 Oct 2008 04:12 pm
Hola a todos, soy nueva en este foro. Queria preguntar algo a ver si alguien me puede ayudar....
Me hicieron una consulta el otro dia, sobre cargar fotos dinamicamente. Una fotografa quiere ir cargando sus fotos diariamente en su sitio web...Alguien sabe como hacerlo?...yo se hacer galerias dinamicas, pero siempre las modifico yo cuando cambio el numero de fotos...Pero que lo haga ella directamente no se como hacerlo..si alguien me puede ayudar, le estare agradecida.
Saludos
MarielaCarla

Por MarielaCarla

0 de clabLevel



 

msie7
Citar            
MensajeEscrito el 21 Oct 2008 07:15 pm
Es el mismo procedimiento de crear galerías dinámicas con Flash y XML. La diferencia está en que debes usar un lenguaje de back-end (php, jsp, asp) para modificar el xml cada vez que agreguen nuevas fotografías.
Busca algo como "Crear XML con PHP"

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 21 Oct 2008 09:25 pm
@Gorehide, sucedía lo mismo que te comenté:

todo parece indicar que haces referencia a la variable del ciclo dentro del evento del botón.


La variable "ss" va de 0 hasta el número 4 en milesimas de segundos y la acción en el botón la realizas cuando ya el ciclo finalizó por lo que el valor de esta variable siempre va a ser el último que adquirió, una técnica muy utilizada es guardar el valor de la variable dentro del botón así cuando este se presione se puede acceder a ella sin problemas:

Código ActionScript :

for (ss=0; ss<5; ss++)
{
   attachMovie("botonpadre","boton"+ss, ss, {_x:posicionx1, _y:posiciony});   
   posiciony += desplazamiento;
   myRoot["boton"+ss].numero = ss;
   myRoot["boton"+ss].onRelease = function():Void
   { 
     trace("menu papa"+this.numero);
   }
}

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 22 Oct 2008 03:23 pm
Muchas gracias. Es problema esta resuelto.
La verdad es que no había caido en el tema de que se podia perder la variable por cullpa de la velocidad de proceso.
Ahora me ha salido otra duda enlazando lo ya resulto con otro submenu. El codigo es el siguiente.

Código :

var myRoot = this;
var posicionx1 = 325;
var posicionx2 = 355;
var posiciony = 50;
var desplazamiento = 30;
var longitud = 0;
System.useCodepage = true;
videosXML = new XML();
videosXML.ignoreWhite = true;
videosXML.load("videos/videos.xml");
videosXML.onLoad = organizarXML;
function organizarXML()
{
   for (yy=0; yy<videosXML.firstChild.childNodes.length; yy++)
   {
      attachMovie("botonpadre","boton"+yy, yy, {_x:_root.posicionx1, _y:_root.posiciony});   
      _root.posiciony += _root.desplazamiento;
      myRoot["boton"+yy].texto = videosXML.firstChild.childNodes[yy].attributes.nombre;
      myRoot["boton"+yy].onRelease = function():Void
      { 
        trace (this.texto);
         }
      _root.longitud = videosXML.firstChild.childNodes[yy].childNodes.length;
      for (aa=0; aa<_root.longitud; aa++)
      {
         attachMovie("botonpadre","boton"+yy+"-"+aa, aa, {_x:_root.posicionx2, _y:_root.posiciony});   
         _root.posiciony += _root.desplazamiento;
         myRoot["boton"+yy+"-"+aa].texto = videosXML.firstChild.childNodes[yy].childNodes[aa].attributes.vid;
         myRoot["boton"+yy+"-"+aa].onRelease = function():Void
         {
            trace (this.texto);
         }
      }
   }
}

Me debe de pasar algo similar a lo anterior porque solo me aparecen los últimos botones.

Se trata de hacer un menu con jerarquia:

BOTON1
...SUBBOTON1_1
...SUBBOTON1_2
BOTON2
...SUBBOTON2_1
...SUBBOTON2_2
...SUBBOTON2_3
...

Muchas gracias

Por Gorehide

15 de clabLevel



 

Bilbao

firefox
Citar            
MensajeEscrito el 22 Oct 2008 10:20 pm
Primero que todo estás creando los botones y los subBotones en el escenario y con el mismo nombre, esto no es posible.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 23 Oct 2008 06:55 am
Buenas elchininet:

Creo que ese no es el problema:
a los botones padre los llamo: ("boton"+yy) boton0, boton1, boton2...
y a los hijos: ("boton"+yy+"-"+aa) boton0-0, boton0-1, boton1-0, boton1-1...

Este simple menú me estra trayendo de cabeza.

Muchas gracias de nuevo

Gorehide

Por Gorehide

15 de clabLevel



 

Bilbao

firefox
Citar            
MensajeEscrito el 23 Oct 2008 09:56 am
Si pero los primeros los estás creando en la "raiz" en el nivel "yy" (0, 1, 2, etc) y los segundos en la "raiz" en el nivel "aa" (0, 1, 2, etc) como te había dicho (y me equivoqué con decir "nombre" en vez de "profundidad") esto no es posible. En el primer código que postee te di algunas soluciones que no has aplicado.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 23 Oct 2008 03:17 pm
Muchas gracias por tu ayuda.
Ya lo he logrado terminar. :P

Mil gracias de nuevo

Un saludo

Gorehide

Por Gorehide

15 de clabLevel



 

Bilbao

firefox

 

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