Actionscript 3 ActionScript 3拖放

Actionscript 3 ActionScript 3拖放,actionscript-3,flash-cs5,Actionscript 3,Flash Cs5,我有这个AS3代码: circle_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag); square_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag); stage.addEventListener(MouseEvent.MOUSE_UP, drop); function drag(e:MouseEvent):void { e.target.startDrag(false, new Rec

我有这个AS3代码:

circle_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);
square_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);
stage.addEventListener(MouseEvent.MOUSE_UP, drop);

function drag(e:MouseEvent):void
{
     e.target.startDrag(false, new Rectangle(30,30,150,150));
}

function drop(e:MouseEvent):void
{
     stopDrag();
}
现在,如果我测试电影,如果我点击圆形或正方形,他们会跳进舞台,因为我不允许把他们移出那个矩形

  • 我希望脚本允许我将形状拖到任何地方(当鼠标向下事件处于活动状态时),但仍然不允许我将形状从中拉出(鼠标向上)

  • 如何使用对象而不是矩形舞台


  • 制作一个名为
    target\u mc
    的电影剪辑,在其内部绘制一个150x150的矩形,并将其放置在舞台上x=30和y=30(这将替换代码
    中的矩形新矩形(30,30150150)
    )。 现在,请尝试此代码,如果拖动的对象未放置在正确的位置,它将使其返回其原始位置。您可以使用任何形状的任何其他对象来限制可放置区域

    circle_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);
    square_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);
    stage.addEventListener(MouseEvent.MOUSE_UP, drop);
    
    var draggedObject:Object;
    function drag(e:MouseEvent):void
    {
        draggedObject = e.target;
        draggedObject.orginalX = draggedObject.x;
        draggedObject.orginalY = draggedObject.y;
        draggedObject.startDrag(false);
    }
    
    function drop(e:MouseEvent):void
    {
        stopDrag();
    
        // target_mc is the name of the object you want to allow dropping over it only,
        // it can be a movieclip with any shape inside it (rectangle or any other irregular shape).
        // if you like you can make it invisible by setting its alpha to 0  (target_mc.alpha = 0;)
    
        // Check if the mouse is over the target object at the dropping moment :
        if (target_mc.hitTestPoint(stage.mouseX,stage.mouseY,true))
        {
            trace("it was dropped INSIDE the target area");
            // ...
        }
        else
        {
            trace("it wa dropped OUTSIDE the target area");
            // bring the dragged movie back to its orginal place,
            // so it will not be able to be dropped outside your target area :
            draggedObject.x = draggedObject.orginalX;
            draggedObject.y = draggedObject.orginalY;
        }
    }
    

    嘿,我遇到了这个密码。从现在开始改变不是更好吗

       if (target_mc.hitTestPoint(stage.mouseX,stage.mouseY,true))
        {
            trace("it was dropped INSIDE the target area");
            // ...
        }
    

    第一个,如果你用鼠标点击,将触发代码,即使你没有拖动对象。
    最后一个选项将确保拖动的对象正在命中目标,而不是确保鼠标正在命中目标

    因此,您希望能够在舞台上的任何位置拖动圆形和方形,但只能停止在定义的矩形中拖动它们?
     if (target_mc.hitTestPoint(draggedObject.x,draggedObject.y,true))
        {
            trace("it was dropped INSIDE the target area");
            // ...
        }