AS3 - Cómo arrastrar un objeto en una línea que no es vertical u horizontal

Me gustaría arrastrar un objeto en una línea. Ya sé cómo hacer esto en línea horizontal o vertical.

Así es como hago esto

private var handle:Sprite;

private function init():void
{
    handle = new Sprite();
    handle.mouseChildren = false;
    handle.buttonMode = true;
    handle.graphics.beginFill(0xFF0000);
    handle.graphics.drawCircle(0, 0, 5);

    handle.addEventListener(MouseEvent.MOUSE_DOWN, startMove);
    handle.addEventListener(MouseEvent.MOUSE_UP, stopMove); 
}

private function startMove(evt:MouseEvent):void
{               

    var bounds:Rectangle = new Rectangle(0, 0, 100, 1);
    handle.startDrag(false, bounds);

}

private function stopMove(evt:MouseEvent):void
{
    handle.stopDrag();
}

Pero quiero arrastrar mi objeto en una línea que no sea horizontal ni vertical. Por ejemplo, me gustaría arrastrar el objeto desde la esquina superior izquierda a la esquina inferior derecha, en una línea recta.

Intenté rotar el rectángulo de límites, pero parece que no se puede rotar un rectángulo.

¿Cómo arrastro un objeto en una línea no vertical (o no horizontal)?

Muchas gracias!

Vicente

preguntado el 10 de mayo de 11 a las 13:05

¿Ha intentado utilizar un rectángulo con una altura superior a 1? p.ejvar bounds:Rectangle = new Rectangle(0, 0, 100, 100); -

@ Adam, gracias por tu respuesta. Pero cuando establece la altura superior a 1, ya no arrastra una línea recta. Me gustaría que mi objeto solo siga una línea. -

Eso fue solo una suposición, es por eso que publiqué como comentario. Otra conjetura: ¿ha intentado rotar el contenedor principal? -

1 Respuestas

No puede usar el sistema startdrag para hacerlo. Debe usar un evento enterframe y una restricción x / y usted mismo:

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;

    public class Test extends Sprite
    {
        private var handle:Sprite;

        public function Test()
        {
            handle = new Sprite();
            addChild(handle);
            handle.mouseChildren = false;
            handle.buttonMode = true;
            handle.graphics.beginFill(0xFF0000);
            handle.graphics.drawCircle(0, 0, 5);

            handle.addEventListener(MouseEvent.MOUSE_DOWN, startMove);
            addEventListener(MouseEvent.MOUSE_UP, stopMove); 
        }

        private function startMove(evt:MouseEvent):void
        {
            stage.addEventListener(Event.ENTER_FRAME, updateClipPos);
        }

        private function stopMove(evt:MouseEvent):void
        {
            stage.removeEventListener(Event.ENTER_FRAME, updateClipPos);
        }

        private function updateClipPos(e:Event) : void
        {
            if(mouseX < 100)
            {
                handle.x = mouseX;
                handle.y = handle.x;
            }
        }

    }
}

contestado el 10 de mayo de 11 a las 18:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.