Ok, despues de algunas tazas de café... dos cosas puntuales...
Primero, es que veo que usas una variable mi_obj a la que le asignas el clip que estas arrastrando
Código ActionScript :
function onDrag(evento:MouseEvent):void
{
mi_obj= evento.currentTarget;
evento.currentTarget.startDrag();
}
Pero no lo usas. Es decir, lo asignas pero nada mas. O lo usas o quitalo.
Segundo, tu codigo es muy largo, no me imagino que pasaria si fueran 100 clips para mover.
En fin, la solucion que veo es que no pongas tantos "if" en el stopDrag.
Date cuenta que ahi lo que estas diciendo es:
"Si el clip mc 1 intersecta con el clip mo 1 entonces... que haga esto...
"Si el clip mc 2 intersecta con el clip mo 2 entonces... que haga esto...
"Si el clip mc 3 intersecta con el clip mo 3 entonces... que haga esto...
.
.
.
.
.
Pero son estructuras if, sino se cumple salta al else.
Ahora imagina, jalas el clip 1 y lo colocas donde corresponde, el primer if te funcionara ok, pero luego, siguiendo el orden, se vuelve a entrar al segundo if. Aqui, no se cumple la condicion (que el clip 2 intersecte donde corresponde) asi que necesariamente, TIENE QUE ENTRAR en el "else", por lo que siempre lo ejecutara. A eso agregale que siempre has puesto en el else que haga la resta ("score--") y entonces tienes la explicacion de tu -5.
Haciendolo como te dije creo que seria asi (y mas corto)
Código ActionScript :
var mi_obj:Object={};
var score:int = 0;
for (var i:int=1; i<=7; i++)
{
this["R"+i+"_mc"].addEventListener(MouseEvent.MOUSE_DOWN,onDrag);
this["R"+i+"_mc"].addEventListener(MouseEvent.MOUSE_UP,ofDrag);
this["R"+i+"_mc"].buttonMode=true;
}
function onDrag(evento:MouseEvent):void
{
mi_obj = evento.currentTarget;
mi_obj.startDrag();
}
function ofDrag(evento:Event):void
{
var clip:String=mi_obj.name;
var numClip:String=clip.substring(1,2); //para hallar el numero de clip
if (mi_obj.hitTestObject(this["R"+numClip+"_mo"]))
{
score++;
mi_obj.x = this["R"+numClip+"_mo"].x;
mi_obj.y = this["R"+numClip+"_mo"].y;
}
else
{
score--;
}
puntos.text=score.toString();
mi_obj= evento.currentTarget;
mi_obj.stopDrag();
}
Y bueno, creo que asi seria.
Segui usando tu variable "mi_obj" aunque yo usaria e.currentTarget, pero supongo que es cuestion de gustos. En la seccion "else" le quite los valores que pusiste porque no entiendo a donde quieres moverlo. En todo caso, yo crearia un array con las posiciones que necesitas y las llamaria usando el numero que obtengo del objeto.
Espero esto te ayude.
Por cierto, lee cuidadosamente cuando alguien te solicita algo mas de informacion, se necesita entender bien cual es el problema para poder ayudarte.
Saludos!