防止MC离开带有边界矩形AS3的舞台

时间:2017-10-09 12:07:22

标签: actionscript-3 drag-and-drop bounding-box animate-cc

我在其他帖子中尝试过很多建议,但无法完全解决这个问题。

我想在舞台上拖动一个物体,但我不想让那个物体真正离开舞台。

当使用下面的示例时,MC被舞台的顶部和底部绑定,但是左侧仍然吞下拖动的MC的一半,而右侧不允许MC靠近边缘 - 它只是有空白区域(通过看起来与MC在左侧外侧拖动的宽度相同)

var my_x:int=stage.stageWidth-box_mc.width;
var my_y:int=stage.stageHeight-box_mc.height;

var myWidth:int=0-my_x;
var myHeight:int=0-my_y;

var boundArea:Rectangle=new Rectangle(my_x, my_y, myWidth, myHeight);

box_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);
box_mc.addEventListener(MouseEvent.MOUSE_UP, drop);

function drag(event:MouseEvent):void {
    box_mc.startDrag(false,boundArea);
}

function drop(event:MouseEvent):void {
    box_mc.stopDrag();
}

我相信代码是正确的,并且必须有一些我遗漏的东西 - 有人可以为我试试这个并指出我正确的方向吗?

非常感谢,

克里斯。

1 个答案:

答案 0 :(得分:0)

您的注册点似乎应该归咎于您遇到的行为。

你应该使用类似的东西:

var boxArea:Rectangle = box_mc.getBounds(box_mc);
var boundArea:Rectangle = new Rectangle(-boxArea.x, -boxArea.y, stage.stageWidth-boxArea.width, stage.stageHeight-boxArea.height);

box_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);
box_mc.addEventListener(MouseEvent.MOUSE_UP, drop);

function drag(event:MouseEvent):void {
    box_mc.startDrag(false,boundArea);
}

function drop(event:MouseEvent):void {
   box_mc.stopDrag();
}

基本上,在上面的代码中,您获得了 box_mc 对象的矩形大小,并将其存放在 boxArea 变量中,并确保包含其大小和注册将效果指向 boundArea 计算。