AS3 - Как перетащить объект в линию, которая не является вертикальной или горизонтальной - PullRequest
3 голосов
/ 10 мая 2011

Я хотел бы перетащить объект в одну строку. Я уже знаю, как это сделать по горизонтали или вертикали

Вот как я это делаю

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

Но я хочу перетащить мой объект в линию, которая не является горизонтальной или вертикальной. Например, я хотел бы перетащить объект из верхнего левого угла в нижний правый угол по одной прямой линии.

Я пытался повернуть прямоугольник границ, но кажется, что вы не можете повернуть прямоугольник.

Как перетащить объект по не вертикальной (или не горизонтальной) линии?

Большое спасибо!

Vincent

1 Ответ

2 голосов
/ 10 мая 2011

Вы не можете использовать систему startdrag, чтобы сделать это. Вы должны использовать событие enterframe и ограничение x / y самостоятельно:

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

    }
}
...