Comunidad de diseño web y desarrollo en internet online

onRelease en un movieclip ducplicado en un onRelease de otro movieclip

Citar            
MensajeEscrito el 25 May 2013 10:25 pm
Hola, la verdad que llevo todo el dia dandole vueltas a este tema y no logro solucionarlo con AS2
Mi problema de manera generica es poder realizar una acción a un Movieclip (por ejempo onRelease) que ha sido duplicado al hacer un onRelease del MovieClip original.

El problema se cual es y tengo una solución pero puede que no me valga para más adelante.
El problema es que obtengo el movieclip duplicado dentro de la funcion anónima que realiza las acciones del onRelease del MovieClip original, y si le hago un onRelease al duplicado fuera de esta función, lógicamente no funciona.

Funciona solo si le hago el onRelease al duplicado dentro del onRelease del original, pero esto me va a dejar poca flexibilidad para todo lo que quiero hacer.

No se si me he explicado bien, es un poco lioso, pero si hay alguien que me haya entendido y cree saber como realizar acciones a un MovieClip que ha sido duplicado localmente dentro de una función, pues le agradeceria mucho su ayuda.

Gracias y saludos.

Por lolololailola

4 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 May 2013 02:05 pm
Usualmente este tipo de cosas tiene se soluciona con un manager que se basa en dos supuestos

- Hay una serie de elementos del mismo tipo en el escenario (si fuera un juego por ejemplo, diríamos los enemigos)
- Hay una pieza central que administra todos esos elementos del mismo tipo (siguiendo el ejemplo anterior, un EnemyManager)

Luego cada vez que se crea un elemento nuevo, se registra con el manager (por ejemplo el manager tiene un array de sus elementos) y es el encargado de generar cualquier interacción para todos ellos.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 27 May 2013 10:13 pm
Gracias por la ayuda, la verdad es que ya lo estoy haciendo pero controlando todo lo que puedo dentro del evento onPress del movieclip original. Y para cuando esto no era posible, lo he podido controlar con botones y listeners asociados a ellos.

Con los arrays fué lo primero con lo que probé, pero no obtuve resultado alguno, intentando introducir los movieclips creados en un array definido globalmente. Realmente no sé si lo hice bien, lo probé de muchas formas pero no me salio.

La verdad es que llevo un mes con el flash en un curso con prácticas en empresa, pero sobre todo he aprendido diseño y muy poquito de programación y así estoy mirando aqui y alla buscando más información sobre AS.

De todas formas muchas gracias por la respuesta y la ayuda desinteresada.

Por lolololailola

4 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 May 2013 10:54 pm
Pon el código con el que probaste y miramos por que no funcionó

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 29 May 2013 11:56 pm
Vale, este seria un ejemplo muy simple de lo que quiero, tengo un movieclip en la biblioteca cuyo nombre de instancia es mc y todo esta dentro de un movieclip llamado escena.

Código ActionScript :

mc.onPress = function ()
{
   this._parent.createEmptyMovieClip("mc2",2);
   trace(mc2);
   
}

mc.onRelease = function ()
{
   mc2.beginFill(0xFF0000,100);
   mc2.lineStyle(1,0x000000);
   mc2.moveTo(100,100);
   mc2.lineTo(200,100);
   mc2.lineTo(200,200);
   mc2.lineTo(100,200);
   mc2.lineTo(100,100);
}

mc2.onPress = function ()
{
   trace(this+" por fin te clickee");
}

Pero no funciona el onPress del mc2. Con arrays he probado con todo tipo de combinaciones y ninguna me funciona, esta es una de ellas:

arrayMc = new Array();
mc.onPress = function ()
{
   this._parent.createEmptyMovieClip("mc2",2);
   arrayMc[0]="mc2";
}

mc.onRelease = function ()
{
   mc2.beginFill(0xFF0000,100);
   mc2.lineStyle(1,0x000000);
   mc2.moveTo(100,100);
   mc2.lineTo(200,100);
   mc2.lineTo(200,200);
   mc2.lineTo(100,200);
   mc2.lineTo(100,100);
}

eval(arrayMc[0]).onPress = function ()
{
   trace(this+" por fin te clickee");
}

Por lolololailola

4 de clabLevel



 

chrome
Citar            
MensajeEscrito el 30 May 2013 01:15 pm
Prueba asi

Código ActionScript :

mc.onPress = function ()
{
  mc2 =  this._parent.createEmptyMovieClip("mc2",2);
   mc2.onPress = function(){
      trace(this+" por fin te clickee");
   }  
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 30 May 2013 10:22 pm
si, eso es con lo que lo he solucionado, pero me parecia mejor poder tener el onPress del mc2 fuera del onPress del mc1, pero ya he estado consultando y es imposible, en Flash cualquier objeto que haya sido creado dinámicamente en un evento deja de existir cuando el evento finaliza, aunque lo estes viendo en la pélicula. La única solución para evitarlo es esta que has puesto, o poner un setTimeOut al segundo movieclip para que pueda crearse despues de haberse ejecutado el primer onPress.

Gracias de todos modos y un saludo.

Lolo.

Por lolololailola

4 de clabLevel



 

chrome
Citar            
MensajeEscrito el 31 May 2013 11:15 am
No, en realidad empieza a existir cuando lo creas, si le asignas algo antes de eso, no funciona. Una vez que es creado existe hasta que lo quites explicitamente, en este caso con removeMovieClip

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 31 May 2013 03:26 pm
Si, no me explique bien. Queria decir que aunque el objeto exista, al finalizar el evento que lo creo es como si no existiera, creo que es un fallo gordo de Flash, no se si con AS3 han arreglao este comportamiento.

Por lolololailola

4 de clabLevel



 

chrome
Citar            
MensajeEscrito el 31 May 2013 03:38 pm
No te entiendo. Si creas un clip con createEmptyMovieClip sigue existiendo hasta que haces removeMovieClip, independientemente del evento que lo haya creado. Lo que puede ocurrir es que lo crees dentro de un contenedor y quites el contenedor, pero eso es un tema de jerarquias.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 31 May 2013 06:12 pm
Mira, en el código que enviaste que funciona, efectivamente funciona porque el evento onPress de mc2 lo has puesto dentro del evento onPress de mc.

Si lo pones fuera de ese evento no funciona por lo que te digo, una vez que flash ha ejecutado todo el código del evento de mc, ya no tiene encuenta los movieclips que hayas creado en dicho evento, es como si no existiera, aunque realmente exista.

Como te comente anteriormente puedes engañar un poco al flash si pones un setTimeOut para que el nuevo objeto aunque lo mandes crear dentro del evento del movieclip original, realmente se va a crear cuando flash ha terminado de ejecutar todas las instrucciones y se sale del evento, entonces si funciona por que se ha creado una vez flash ya esta ejecutando instrucciones fuera del evento onPress del mc original.

Aunque es un poco lioso, espero haberme explicado con un minimo de claridad.

Por lolololailola

4 de clabLevel



 

chrome
Citar            
MensajeEscrito el 31 May 2013 06:16 pm
Ok, te refieres al handler onPress como evento. No es un bug, simplemente tiene que ver con la forma en que el codigo se ejecuta en el timeline y el scope de los elementos. Si te pasas a AS3 (surgido a fines de 2006) ya no tendras esos problemas, se escribe en clase y si quieres acceder a elementos que no han sido declarados te encuentras con error decompilacion

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 31 May 2013 08:25 pm
Ok, a ver si puedo y aprendo AS3, porque intuyo debe estar muy mejorado, porque AS2 en muchos aspectos deja mucho que desear.

Por lolololailola

4 de clabLevel



 

chrome

 

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