Comunidad de diseño web y desarrollo en internet online

botón dentro de un Movie Clip

Citar            
MensajeEscrito el 20 Sep 2007 12:33 pm
Hola amigos, nuevamente necesito de su ayuda para resolver este problema.
He buscado en los foros pero no me ha dado resultado la solución que han dado en otros casos.
Tengo una película principal, donde esta película tiene un MC llamado botonera. Dentro de esta botonera tengo una serie de botones.
El problema es que cuando quiero asignarle acciones a cualquier botón, no pasa nada. El código no se ejecuta.
Pongo un ejemplo a ver si hay algo mal en el código. Aclaro que uso Flash 8.
Código:

Código :

this.botones.b_hogares.onPress=function(){
   trace("Este es el botón de los hogares");
}

botones es una instancia de botonera (MC). b_hogares es un botón dentro del MC botones.
En lugar de Trace podría poner cualquier código, pero esto es lo más simple para probar. Si no funciona Trace, no se que funcionaría.

Muchas gracias por la pronta respuesta.[/code]

Por dbarraud

22 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Sep 2007 01:34 pm
De casualidad tienes definida alguna de las siguientes funciones para la instancia de "botones" (onPress, onRelease, onReleasesOutside, onRollOver, onRollOut)?
Si es así, esta es la razón por lo que se inhibe el código de tus botones, porque tu botonera esta funcionando como boton, y no puedes tener un botón dentro de otro boton.

Es el único caso que se me ocurre por lo que te puede suceder esto.

Por gabynufe

Claber

446 de clabLevel



 

México, D.F.

msie7
Citar            
MensajeEscrito el 20 Sep 2007 01:48 pm
Hola "dbarraud". :cool:

Supongo que el codigo que usas lo pones en la linea principal en el primer fotograma o asignas una capa que puede ser "acciones" donde en un fotograma de esta capa pones todo el codigo, si es asi, podrias probar escribiendole el codigo a boton. Seleccionas el boton y en "Acciones" le escribes el codigo, ejemplo:

Código :

on(release) {
         trace("Prueba de funcionamiento boton X")
}


Asi cada boton tendra su propia programacion, aunque si quieres modificar algo vas a tener que hacerlo boton por boton. ^^

Espero mi sugerencia te sirva de ayuda.

Saludos. Emerson. (y)

Por cruzemer

54 de clabLevel



 

msie7
Citar            
MensajeEscrito el 20 Sep 2007 01:57 pm
codigo para la linea principal (fotograma):

Código :

botones.b_hogares.onPress=function(){
   trace("Este es el botón de los hogares");
}


codigo si lo quieres dentro del mc o boton:

Código :

on(press){
   trace("Este es el botón de los hogares");
}

Por Wako

77 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Sep 2007 02:47 pm

Wako escribió:

codigo para la linea principal (fotograma):

Código :

botones.b_hogares.onPress=function(){
   trace("Este es el botón de los hogares");
}


codigo si lo quieres dentro del mc o boton:

Código :

on(press){
   trace("Este es el botón de los hogares");
}


Ambos son válidos, pero tengan en cuenta que la recomendación en AS2 es escribir el código en la Línea de tiempo y no en las instancias de los objetos (si han programado en algún otro lenguaje verán que es la práctica estándar). Además, en AS3 ya no puede escribirse en las instancias, por lo que es preferible evitar malas prácticas. ;)

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 20 Sep 2007 02:55 pm

gabynufe escribió:

De casualidad tienes definida alguna de las siguientes funciones para la instancia de "botones" (onPress, onRelease, onReleasesOutside, onRollOver, onRollOut)?
Si es así, esta es la razón por lo que se inhibe el código de tus botones, porque tu botonera esta funcionando como boton, y no puedes tener un botón dentro de otro boton.

Es el único caso que se me ocurre por lo que te puede suceder esto.



Gabynufe, ya me fijé en las instancias y en el MC pero no hay ninguna función asignada.

Por dbarraud

22 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Sep 2007 03:01 pm

The Fricky! escribió:

Wako escribió:

codigo para la linea principal (fotograma):

Código :

botones.b_hogares.onPress=function(){
   trace("Este es el botón de los hogares");
}


codigo si lo quieres dentro del mc o boton:

Código :

on(press){
   trace("Este es el botón de los hogares");
}


Ambos son válidos, pero tengan en cuenta que la recomendación en AS2 es escribir el código en la Línea de tiempo y no en las instancias de los objetos (si han programado en algún otro lenguaje verán que es la práctica estándar). Además, en AS3 ya no puede escribirse en las instancias, por lo que es preferible evitar malas prácticas. ;)


Así es, yo quiero tener una capa llamda acciones que haga toda la programación, me parece más "limpio" el código, es por eso que toda la programación yo la tengo hecha en una capa y quiero ejecutar las acciones a través de referencias por código.
Si yo pongo el código dentro de cada botón (que están dentro del MC) me funcionan, pero yo quiero tener todo el código junto y que vaya llamando a las acciones de cada botón desde AS.
Todo lo que pusieron escorrecto pero no me funciona y no tengo cosas "raras" como para que no ande, creería que hay algún problema con los niveles o no se... no se me ocurre cual puede ser el problema.

Por dbarraud

22 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Sep 2007 03:16 pm
Ok, habrá que ver la estructura para ver qué tal. Sólo voy a darte unas guías "por si acaso":

  • El código debe aparecer una vez que la instancia haya sido leída. Si escribes el código antes que el objeto esté en la línea de tiempo no te funcionará. Revisa eso.
  • Si los objetos son cargados dinámicamente se aplica lo mismo de lo anterior, el código debe aparecer después que el objeto ha sido cargado y está en memoria. El asunto que es que Flash no hace asignaciones "a posteriori" (lo que es lógico).
  • Evita el uso innecesario de "this". El uso de "this" es muy útil, pero hay que usarlo con cuidado porque es contextual; si no te fijas bien podrías asignarlo al objeto inadecuado.

Es lo que se me ocurre por ahora, si eso no lo resuelve, haz una explicación más detallada del código y la estructura a ver qué puede estar pasando.

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 20 Sep 2007 03:18 pm

Por gabynufe

Claber

446 de clabLevel



 

México, D.F.

msie7
Citar            
MensajeEscrito el 20 Sep 2007 03:54 pm

The Fricky! escribió:

Ok, habrá que ver la estructura para ver qué tal. Sólo voy a darte unas guías "por si acaso":

  • El código debe aparecer una vez que la instancia haya sido leída. Si escribes el código antes que el objeto esté en la línea de tiempo no te funcionará. Revisa eso.
  • Si los objetos son cargados dinámicamente se aplica lo mismo de lo anterior, el código debe aparecer después que el objeto ha sido cargado y está en memoria. El asunto que es que Flash no hace asignaciones "a posteriori" (lo que es lógico).
  • Evita el uso innecesario de "this". El uso de "this" es muy útil, pero hay que usarlo con cuidado porque es contextual; si no te fijas bien podrías asignarlo al objeto inadecuado.

Es lo que se me ocurre por ahora, si eso no lo resuelve, haz una explicación más detallada del código y la estructura a ver qué puede estar pasando.



Hola Fricky, gracias por responder. Te comento lo que tengo:

  • El código está después que se carga la botonera
  • El this lo puse para estar seguro. En realidad usé el botón que dice "insertar una ruta de destino", ese que parece una mira ubicado en el editor del AS.

    Para evitar inconvenientes, cerré todo, creé un documento nuevo y puse lo siguiente.
  • Creé 2 capas. En la primera capa la llamé codigo, la segunda capa la llamé botones.
  • en la capa botones inserté 2 círculos comunes y luego convertí cada uno en botones. Ovbiamente les coloqué nombre de instancia. Boton1 y boton2.
  • Seleccioné los botones y los convertí en MC, llamado botonera, con nombre de instacia botonera.
  • En el frame 1 de la capa botones inserté el MC creado. Luego en el frame 10 inserté un fotograma clave, moví de lugar el MC, seleccioné los frames desde el 1 al 10 y le puse interpolacion de movimiento.
  • En el frame 10 pero de la capa codigo coloque el siguiente código:

Código :

stop();
this.botonera.boton1.onPress=function(){
   
   trace("Hola mundo");
}

this.botonera.boton2.onPress=function(){
   
   trace("Hola loco");
} 

Al ejecutarlo, no funciona...

  • también probé la variante de crear primero un MC vacío y luego insertar ahí dentro los botones, pero tampoco andubo...

es algo raro, si alguien lo prueba y puede hacerlo funcionar, me avisa. Muchas gracias...

Por dbarraud

22 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Sep 2007 04:06 pm
Ciertamente, es muy raro, yo seguí tus pasos y me funciona de maravilla. De hecho lo que hice fue copiar tu código.

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 20 Sep 2007 04:23 pm
Ya encontre el problema, que no deberia de pasar en teoria.

Lo que pasa es que el movieclip con el boton lo usas en una interpolación de movimiento, y cuando termina la interpolación colocas el código para los botones que estan dentro del movieclip, y ya no funciona, en teoria deberia de funcionar pero no funciona.

La forma en que lo solucione fue:
1) en el primer fotograma use el movieclip como grafico, al igual que en el ultimo fotograma de la interpolación.

2) en el ultimo fotograma de la interpolación, quite la interpolacion (remove Tween), no es necesario, pero no se usa, y no afecta a la interpolación del primer fotograma.

3) en el fotograma siguiente a la interpolación tambien quite la interpolación que tenia el fotograma (no era necesario, pero como no se usa también lo quite, y no afecta a la primera interpolación)

4) en este ultimo fotograma deje al movieclip con función de movieclip (como estaba), y le puse el nombre de instancia al movieclip "botonera2", porque no lo tenia.

y ya funciono.

Por gabynufe

Claber

446 de clabLevel



 

México, D.F.

msie7
Citar            
MensajeEscrito el 20 Sep 2007 04:28 pm
La verdad es que no tiene sentido; a lo único que le veo sentido es a:

[...] y le puse el nombre de instancia al movieclip "botonera2", porque no lo tenia.

La instancia de la botonera debe tener el mismo nombre de instancia en ambos fotgramas.

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 20 Sep 2007 05:00 pm
Hola, gracias a todos los que han colaborado, voy a probar las soluciones que me han dado y de paso voy a reinstalar el Flash a ver si puede ser esto también. Por las dudas voy a probar...
Luego les aviso del resultado.
Por cierto, Fricky, que versión del Flash tenés vos? capaz que por ahí es la versión. Yo uso la 8 con Flash Player 8.
Muchas gracias por la ayuda.

Por dbarraud

22 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Sep 2007 05:12 pm
Amigos: Gracias a ustedes he podido dar con la solución.
El problema se encontraba en la interpolacion de movimientos. En el caso que presenté al comienzo de este post el MC tenía puesto el nombre de instancia en el frame que finaliza la interpolación, pero no se porque no tenía puesto ese nombre en el frame de comienzo de la interpolación. La verdad es que es muy raro lo que sucedió, pero seguramente es error humano (o en su defecto, bug del programa, jajajaj), pero al agregar el nombre de la instancia en el frame de comienzo de la interpolación , gualá el código funcionó de maravillas.
Muchas gracias al aporte de Fricky y gabynufe por orientarme y perder parte de su tiempo para solucionar esto.
El post quedará para que otros con el mismo problema lo puedan solucionar.
MUCHAS GRACIAS!!!!!!!!!!!!!!!!!!

Por dbarraud

22 de clabLevel



 

firefox

 

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