Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/11/2012, 09:17
Avatar de cemansilla
cemansilla
 
Fecha de Ingreso: septiembre-2007
Ubicación: Buenos Aires, Argentina, Argentina
Mensajes: 214
Antigüedad: 16 años, 7 meses
Puntos: 6
Drag and drop me funciona raro

Buenas, vengo ocn una duda ya que estoy comenzando a desarrollar en AS y hay muchisimas cosas que se me pasan por alto todavía.

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;
}