Flash AS3 - Arrastrar y Soltar varios objetos a un objetivo?

Título es más o menos auto-explicativo, he estado trabajando a través de muchos diferentes tutoriales y no estoy exactamente demasiado bueno con AS3 para ser perfectamente honesto. (La imagen de arriba muestra lo que estoy buscando)

De todos modos, lo que yo noto en la mayoría de los tutoriales en línea que ve, el arrastrar y soltar los tutoriales se basan en un objeto a un objetivo o varios objetos a múltiples objetivos, así que me preguntaba si alguien es tan amable de ayudarme a mí y a explicar cómo puedo obtener varios objetos para conectarse a un solo objetivo.

Y, si es posible, lo que es conmutable, como por ejemplo, si el objeto 1 ya está en el lugar en el destino cuando me arrastre el objeto 2 sobre, entonces el objeto 1 vuelve a su posición original y el objeto de los dos toma su lugar.

De una manera más fácil de explicar esto es para decir que estoy tratando de crear un juego donde hay tres estatuas y el usuario puede elegir uno de los tres o lugar en el conjunto de la zona objetivo.

Me disculpas si lo que digo no tiene mucho sentido, borrará cualquier cosa si que causa confusión. Aquí está el código AS3 estoy usando en el momento.

var startX:int;
var startY:int;

circle1_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
circle1_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);
circle2_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
circle2_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);
circle3_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
circle3_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

function pickUp(event:MouseEvent):void {
    startX = event.target.x;
    startY = event.target.y;
    event.target.startDrag(true);
    event.target.parent.addChild(event.target);

}

function dropIt(event:MouseEvent):void {
    event.target.stopDrag();

    var theTargetName:String = "target" + event.target.name;
    var theTarget:DisplayObject = getChildByName(theTargetName);
    if (event.target.dropTarget != null && event.target.dropTarget.parent == theTarget){    
        event.target.buttonMode = false;
        event.target.x = theTarget.x;
        event.target.y = theTarget.y;
    }

else{

    event.target.x = startX;
    event.target.y = startY;

circle1_mc.buttonMode = true;
circle2_mc.buttonMode = true;
circle3_mc.buttonMode = true;
  • Usted puede poner todas las estatuas en una matriz y tienen un for each...in declaración de verificación para todos ellos. Además, es mejor si usted acaba de fusionar las dos funciones que tienen aquí.
InformationsquelleAutor user2160602 | 2013-03-12

1 Comentario

  1. 5

    En lugar de comprobar la dropTarget, puede utilizar hitTestObject a ver si la quitan objeto es «tocar» theTarget. De lo contrario, cualquier otro elemento que ya se ha caído en theTarget puede ser reportado como el dropTarget.
    También, desde MovieClip es dinámico, se puede almacenar la startX y startY valores en cada instancia.

    El siguiente código modificado se uso una sola target_mc como un destino de colocación. Cuando un elemento se coloca sobre el, y cualquier otro artículo será trasladado de nuevo a su lugar original:

    //create an array as @David suggested to keep track of your draggable items
    var circles:Array = [circle1_mc, circle2_mc, circle3_mc];
    for each(var circleMC:MovieClip in circles)
    {
        circleMC.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
        circleMC.addEventListener(MouseEvent.MOUSE_UP, dropIt);
        circleMC.startX = circleMC.x;
        circleMC.startY = circleMC.y;
    }
    
    function pickUp(event:MouseEvent):void
    {
        //no longer need to keep track of startX & startY here because that's already been done up above
        event.target.startDrag(true);
        event.target.parent.addChild(event.target);
    
    }
    
    function dropIt(event:MouseEvent):void
    {
        event.target.stopDrag();
        //check to see if the event target is touching target_mc using hitTestObject
        if(event.target.hitTestObject(target_mc)){
            event.target.buttonMode = false;
            event.target.x = target_mc.x;
            event.target.y = target_mc.y;
            //move all circles OTHER than the current target back to their original positions
            for each(var circleMC:MovieClip in circles)
            {
                if(event.target != circleMC)
                {
                    circleMC.x = circleMC.startX;
                    circleMC.y = circleMC.startY;
                }
            }
        }
        else
        {
            //only need to move the event target back if it was dropped outside of target_mc
            event.target.x = event.target.startX;
            event.target.y = event.target.startY;
            event.target.buttonMode = true;
        }
    }
    • Que es mucho más eficiente manera de ir abouts con esto! Gracias mucho! Tú y David! Eso ayudó mucho más de lo que pensaba jaja, lo siento por la respuesta tardía, aunque, he estado fuera durante algún tiempo.

Dejar respuesta

Please enter your comment!
Please enter your name here