如何将以下光标限制在特定区域

时间:2009-11-10 04:34:33

标签: flash actionscript-3 mouse area cursor-position

我有一个flash cs3文件,当用户在导航区域上滚动时,我想让一个遮罩在y轴(向上和向下)上移动。

在我的代码中,我有:

maskMC.startdrag();

如何限制遮罩移动的区域,然后当用户离开特定区域(在本例中为导航)时将其恢复到原始位置。

2 个答案:

答案 0 :(得分:2)

1)将遮罩拖动限制为Y轴:

只需使用startDrag的第二个参数(bounds:Rectangle)。

// startDrag method details
startDrag(lockCenter:Boolean = false, bounds:Rectangle = null):void

给它一个Rectangle,它应该用作它的边界。可以在Adobe's livedocs找到详细信息和示例。例如,要将拖动锁定到仅Y轴,您应该使Rectangle的宽度等于0.

var dragBounds:Rectangle = new Rectangle(startX, startY, 0, dragHeight);
myMask.startDrag(false, dragBounds);

2)在下降时将遮罩返回原始Y:

最简单的方法是在舞台上收听mouseup事件。当它触发并且您正在拖动蒙版时,然后将蒙版y设置为其原始位置。就个人而言,我会使用Tweener发回掩码,但你可以按照自己喜欢的方式(可能在enterFrame上)。

public function Main() 
{
    stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
}

private function mouseUpHandler(e:MouseEvent):void 
{
    if (draggingMask)
    {
        Tweener.addTween(myMask, { y:originalY, time:0.5, transition:"easeOutQuad" });
        draggingMask = false;
    }
}

开始拖动蒙版时,需要将 draggingMask 设置为true,释放蒙版时需要设置为false。您还需要一个变量来存储原始位置(我在上面的示例中使用了“originalY”)。

答案 1 :(得分:0)

使用拖动的边界,使用以下(记住import flash.geom.Rectangle;

startDrag(lockCenter, new Rectangle(leftCornerx, leftCornery, width, height))

如果您希望它移出菜单对象,那么您希望使用MouseEvent.ROLL_OUTMouseEvent.MOUSE_MOVE事件监听器并测试stage.mouseX / stage.mouseY ,或运行hitTest。取决于你如何在舞台上设置它。