Paso a explicar basicamente lo que estoy haciendo y cual es el problema.
Es una APP de Facebook donde los usuarios van a invitar a amigos a formar parte de su equipo de futbol y luego de invitarlos los deben posicionar en la cancha.
El posicionamiento se hace mediante drag and drop, que es lo que hace (o intenta) hacer el código de abajo. Arrastro bien, detecto que suelte en una posición válida pero veo que se acumulan las "arrastradas".
Ejemplo, arrastro el MC "mc_invitado_2" y hago un trace del mismo al detener el dragueo y efectivamente me muestra en la salida a dicho MC. El problema viene con los arrastres que hago después, por ejemplo paso a arrastrar "mc_invitado_3" y me muestra en la salida a este y al anterior ("mc_invitado_2"), es como si se sumaran los startDrag.
Espero haberme explicado. Se me ocurrió intentar limpiar el evento de "onMouseUp" que asigno al comenzar el dragueo mediante removeEventListener, pero para usarlo así tengo que modificar bastante el código y no tengo certeza que funcione.
Cualquier ayuda es bienvenida, consejos para optimizar esta porción de código etc.
Saludos y desde ya muchas gracias!
Código:
var origen_x_2 = mc_invitado_2._x; var origen_y_2 = mc_invitado_2._y; var origen_x_3 = mc_invitado_3._x; var origen_y_3 = mc_invitado_3._y; var origen_x_4 = mc_invitado_4._x; var origen_y_4 = mc_invitado_4._y; var origen_x_5 = mc_invitado_5._x; var origen_y_5 = mc_invitado_5._y; var origen_x_6 = mc_invitado_6._x; var origen_y_6 = mc_invitado_6._y; var origen_x_7 = mc_invitado_7._x; var origen_y_7 = mc_invitado_7._y; var origen_x_8 = mc_invitado_8._x; var origen_y_8 = mc_invitado_8._y; mc_invitado_2.onPress = function() { comenzarDD(this, 2, origen_x_2, origen_y_2); } mc_invitado_3.onPress = function() { comenzarDD(this, 3, origen_x_3, origen_y_3); } mc_invitado_4.onPress = function() { comenzarDD(this, 4, origen_x_4, origen_y_4); } mc_invitado_5.onPress = function() { comenzarDD(this, 5, origen_x_5, origen_y_5); } mc_invitado_6.onPress = function() { comenzarDD(this, 6, origen_x_6, origen_y_6); } mc_invitado_7.onPress = function() { comenzarDD(this, 7, origen_x_7, origen_y_7); } mc_invitado_8.onPress = function() { comenzarDD(this, 8, origen_x_8, origen_y_8); } function comenzarDD(mc:MovieClip, nro:Number, origen_x:Number, origen_y:Number){ // si tiene algun amigo cargado if(mc.txt_fbuid.text != ""){ // arranco el dragueo mc.startDrag(); // lo que pasa al dejar de arrastrar mc.onMouseUp = function(){ detenerDrag(mc, nro, origen_x, origen_y, int(mc.txt_posicion.text)); } } } function detenerDrag(mc:MovieClip, nro:Number, origen_x:Number, origen_y:Number, posicion_anterior:Number){ // detengo el dragueo mc.stopDrag(); // valido si esta en alguna posicion valida var posicion_valida:Number = posicionValida(mc.mc_marco, mc.txt_fbuid.text); if(posicion_anterior != posicion_valida || posicion_valida == 0){ if(posicion_valida != 0){ // todo ok mc.txt_posicion.text = posicion_valida; switch(posicion_valida){ case 1: mc._x = mc_mira_1._x - 29; mc._y = mc_mira_1._y - 39; break; case 2: mc._x = mc_mira_2._x - 29; mc._y = mc_mira_2._y - 39; break; case 3: mc._x = mc_mira_3._x - 29; mc._y = mc_mira_3._y - 39; break; case 4: mc._x = mc_mira_4._x - 29; mc._y = mc_mira_4._y - 39; break; case 5: mc._x = mc_mira_5._x - 29; mc._y = mc_mira_5._y - 39; break; case 6: mc._x = mc_mira_6._x - 29; mc._y = mc_mira_6._y - 39; break; } limpiarMiras(mc.txt_fbuid.text, posicion_valida); }else{ // mal, vuelvo al origen mc.txt_posicion = ""; resetearMiras(mc.txt_fbuid.text); mc._x = origen_x; mc._y = origen_y; } } } function resetearMiras(fbuid:String){ } function limpiarMiras(fbuid:String, posicion:Number){ } function posicionValida(mc:MovieClip, fbuid:String):Number{ var posicion:Number = 0; if(mc.hitTest(mc_mira_1)){ //txt_nombre.text = "mira 1: " + mc_mira_1.txt_fbuid.text; posicion = 1; // asigno a la posicion (mira) el fbuid mc_mira_1.txt_fbuid.text = fbuid; }else if(mc.hitTest(mc_mira_2)){ //txt_nombre.text = "mira 2: " + mc_mira_2.txt_fbuid.text; posicion = 2; // asigno a la posicion (mira) el fbuid mc_mira_2.txt_fbuid.text = fbuid; }else if(mc.hitTest(mc_mira_3)){ //txt_nombre.text = "mira 3: " + mc_mira_3.txt_fbuid.text; posicion = 3; // asigno a la posicion (mira) el fbuid mc_mira_3.txt_fbuid.text = fbuid; }else if(mc.hitTest(mc_mira_4)){ //txt_nombre.text = "mira 4: " + mc_mira_4.txt_fbuid.text; posicion = 4; // asigno a la posicion (mira) el fbuid mc_mira_4.txt_fbuid.text = fbuid; }else if(mc.hitTest(mc_mira_5)){ //txt_nombre.text = "mira 5: " + mc_mira_5.txt_fbuid.text; posicion = 5; // asigno a la posicion (mira) el fbuid mc_mira_5.txt_fbuid.text = fbuid; }else if(mc.hitTest(mc_mira_6)){ //txt_nombre.text = "mira 6: " + mc_mira_6.txt_fbuid.text; posicion = 6; // asigno a la posicion (mira) el fbuid mc_mira_6.txt_fbuid.text = fbuid; } return posicion; }