Как ограничить следующий курсор в определенной области - PullRequest
2 голосов
/ 10 ноября 2009

У меня есть файл flash cs3, в котором я хочу, чтобы маска перемещалась по оси Y (вверх и вниз), когда пользователь прокручивает область навигации.

В моем коде у меня есть:

maskMC.startdrag ();

Как ограничить область перемещения маски, а затем вернуть ее в исходное положение, когда пользователь уходит из определенной области (в данном случае - навигации).

Ответы [ 2 ]

2 голосов
/ 10 ноября 2009

1) Ограничение перетаскивания маски по оси Y:

Просто используйте второй аргумент startDrag (bounds: Rectangle).

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

дайте ему прямоугольник, который он должен использовать в качестве своих границ. Подробности и примеры можно найти на Liveocs Adobe . Например, чтобы заблокировать перетаскивание только по оси Y, ширина прямоугольника должна быть равна 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» в моем примере выше).

0 голосов
/ 10 ноября 2009

, чтобы использовать границы перетаскивания, используйте следующее (помня import flash.geom.Rectangle;)

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

если вы хотите, чтобы он возвращался при выходе из объекта меню, то вы должны либо использовать прослушиватель событий MouseEvent.ROLL_OUT или MouseEvent.MOUSE_MOVE и тестировать stage.mouseX / stage.mouseY, либо запустить hitTest. зависит от того, как вы настроили его на сцене.

...