Actionscript 3 AS3-如何在非垂直或水平线中拖动对象

Actionscript 3 AS3-如何在非垂直或水平线中拖动对象,actionscript-3,drag,Actionscript 3,Drag,我想把一个物体拖成一行。 我已经知道如何在水平线或垂直线上进行此操作 我是这样做的 private var handle:Sprite; private function init():void { handle = new Sprite(); handle.mouseChildren = false; handle.buttonMode = true; handle.graphics.beginFill(0xFF0000); handle.graphi

我想把一个物体拖成一行。 我已经知道如何在水平线或垂直线上进行此操作

我是这样做的

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

您不能使用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;
            }
        }

    }
}
包
{
导入flash.display.Sprite;
导入flash.events.Event;
导入flash.events.MouseEvent;
公共类测试扩展了Sprite
{
私有变量句柄:Sprite;
公共功能测试()
{
句柄=新精灵();
addChild(handle);
handle.mouseChildren=false;
handle.buttonMode=true;
handle.graphics.beginll(0xFF0000);
handle.graphics.drawCircle(0,0,5);
handle.addEventListener(MouseEvent.MOUSE_向下,开始移动);
addEventListener(MouseEvent.MOUSE_UP,stopMove);
}
私有函数启动移动(evt:MouseeEvent):无效
{
stage.addEventListener(Event.ENTER_FRAME,updateClipPos);
}
私有函数stopMove(evt:MouseEvent):无效
{
stage.removeEventListener(Event.ENTER_FRAME,updateClipPos);
}
私有函数updateClipPos(e:事件):void
{
如果(鼠标数<100)
{
handle.x=mouseX;
handle.y=handle.x;
}
}
}
}

您是否尝试过使用高度大于1的矩形?e、 g.
var界限:矩形=新矩形(0,0,100,100)@Adam,谢谢你的回复。但是,如果将高度设置为大于1,则不再沿一条直线拖动。我想让我的对象只跟随一行。这只是猜测,这就是为什么我发布的是作为一个评论。另一个猜测:您是否尝试旋转父容器?