Comunidad de diseño web y desarrollo en internet online

Ayuda a Novato as3, Drag and Drop varios MovieClips

Citar            
MensajeEscrito el 21 Ene 2010 12:03 pm
Hola, soy nuevo por aquí, estoy empezando con el as3, y la verdad es que lo veo mucho más complejo que el as2, que por cierto tampoco dominaba mucho,...

Al grano, tengo dos mc (trian y cuadra) que se mueven arrastrando y soltando pero el código que he escrito lo veo ¿excesivo?... ¿me complico mucho la vida?... ¿cómo se podría simplificar?... adjunto el codigo... no me quiero imaginar el código si trabajara con 20 mc...

Código ActionScript :

//funciones drag and drop
function onMouse_Down_t(e:Event):void{
trian.startDrag();
}
function onMouse_Up_t(e:Event):void{
trian.stopDrag();
}
function onMouse_Down_c(e:Event):void{
cuadra.startDrag();
}
function onMouse_Up_c(e:Event):void{
cuadra.stopDrag();
}
//acciones para trian y cuadra
trian.addEventListener(MouseEvent.MOUSE_DOWN, onMouse_Down_t);
trian.addEventListener(MouseEvent.MOUSE_UP, onMouse_Up_t);
cuadra.addEventListener(MouseEvent.MOUSE_DOWN, onMouse_Down_c);
cuadra.addEventListener(MouseEvent.MOUSE_UP, onMouse_Up_c);


Muchas Gracias y un saludo.

Por ichu

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Ene 2010 01:38 pm
Hola,
si el comportamiento de ambos clips va a ser el mismo puedes usar las mismas funciones de eventos:

Código ActionScript :

//funciones drag and drop 
function onMouse_Down(e:Event):void
{
   e.target.startDrag();
}
function onMouse_Up(e:Event):void
{
   e.target.stopDrag();
}
//acciones para trian y cuadra 
trian.addEventListener(MouseEvent.MOUSE_DOWN, onMouse_Down);
trian.addEventListener(MouseEvent.MOUSE_UP, onMouse_Up);
cuadra.addEventListener(MouseEvent.MOUSE_DOWN, onMouse_Down);
cuadra.addEventListener(MouseEvent.MOUSE_UP, onMouse_Up);

Ahora bien, si vas a tener 20 clips, es mejor que los vayas metiendo en un Array y con un bucle for vas asignando los listener.
Y si quieres hacer las cosas realmente bien, puedes crear una clase propia para tu clip.

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Ene 2010 01:53 pm
Creo que bastaría con esto, de todos modos me auno al comentario de mi estimado "ISIDORO". Saludos

Código :

function onMouse_Down(e:Event):void {
   e.target.startDrag();
}
function onMouse_Up(e:Event):void {
   e.target.stopDrag();
}


this.addEventListener(MouseEvent.MOUSE_DOWN, onMouse_Down);
this.addEventListener(MouseEvent.MOUSE_UP, onMouse_Up);

Por jcruz

54 de clabLevel



Genero:Masculino  

Trabajo por comida!

firefox
Citar            
MensajeEscrito el 21 Ene 2010 02:56 pm
Gracias genios...

Lo malo de la solución de jcruz, aunque es más corta, es que el método afecta a todos los mc sobre los que cliquee,... probaré con los array y for... lo de las clases lo dejaré para más adelante que si no me lío demasiado...

Muchas gracias de nuevo...

Por ichu

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Ene 2010 04:03 pm
Me vuelvo a responder a mi mismo,... al final he insertado este código para poder crecer en mc sin muchos problemas...
Aquí he añadido otro mc (penta)...

Código ActionScript :

var fichas:Array = [trian, cuadra, penta];
//funciones drag and drop
function onMouse_Down(e:Event):void{
e.target.startDrag();
}
function onMouse_Up(e:Event):void{
e.target.stopDrag();
}
//bucle for
for(var i:int = 0; i<3; i++){
fichas[i].addEventListener(MouseEvent.MOUSE_DOWN, onMouse_Down);
fichas[i].addEventListener(MouseEvent.MOUSE_UP, onMouse_Up);
}


Gracias otra vez.

Por ichu

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Ene 2010 07:28 pm

ichu escribió:

Gracias genios...

Lo malo de la solución de jcruz, aunque es más corta, es que el método afecta a todos los mc sobre los que cliquee,... probaré con los array y for... lo de las clases lo dejaré para más adelante que si no me lío demasiado...

Muchas gracias de nuevo...

No creas,
la solución de jcruz viene que ni pintada si vas a ir arrastrando instancias de tus figuras a la escena (si trabajas en modo diseño, claro). Lo único es que el código no tienes que ponerlo en la línea de tiempo principal, sino en cada uno de los clips de la biblioteca. Después de eso puedes arrastrar cuantas instancias quieras de triángulos y cuadrados desde la biblioteca al escenario y todas tendrán ese comportamiento.

PD: No me había dado cuenta del detalle, pero es mejor que declares el parámetro de tus funciones como e:MouseEvent (aunque con e:Event funcione, ya que MouseEvent hereda de Event). Además con esto puedes usar el truquillo del updateAfterEvent para que el movimiento al arrastrar los clips sea más fluído, añadiendo un evento mouseMove:

Código ActionScript :

function onMouse_Move(e:MouseEvent):void {
   e.updateAfterEvent();
}
this.addEventListener(MouseEvent.MOUSE_MOVE, onMouse_Move);

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Ene 2010 12:32 pm
Gracias isidoro, se nota un montón que el movimiento es más fluido con esa función,...

Voy a postear en otro hilo otra duda sobre conversiones de variables String a MovieClip que tampoco he podido resolver ni averiguar... espero no ser muy pesado :o

Un saludo
iChu

Por ichu

3 de clabLevel



 

firefox

 

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