Создание мувиклипа, который устанавливается в качестве кликабельной маски и отвечает на MouseEvents - PullRequest
0 голосов
/ 26 июля 2011

Я пытаюсь сделать панорамирование видеоклипа

У меня есть два мувиклипа на сцене. canvasPanel_mc и mask_mc. Первый - это маска для маски (mask_mc). Внутри mask_mc есть мувиклип dragCanvas_mc. Альфа dragCanvas_mc установлена ​​в ноль. Это код, который я использую:

mask_mc.dragCanvas_mc.addEventListener(MouseEvent.MOUSE_DOWN,onStartDrag);
mask_mc.dragCanvas_mc.addEventListener(MouseEvent.MOUSE_OUT,onStopDrag);
mask_mc.dragCanvas_mc.addEventListener(MouseEvent.MOUSE_UP,onStopDrag);

function onStartDrag(evt:MouseEvent)
{
 canvasPanel_mc.startDrag();
}
function onStopDrag(evt:MouseEvent)
{
 canvasPanel_mc.stopDrag();
}

Я понял, что поскольку mask_mc установлен как маска, MouseEvents не регистрируются Есть ли способ заставить его реагировать на MouseEvents. Или я должен работать другим способом.

Ответы [ 2 ]

1 голос
/ 26 июля 2011

структура ваших слоев должна выглядеть так:

  • holder_mc
    • dragCanvas_mc
    • mask_mc
    • canvasPanel_mc

, то:

canvasPanel_mc.mask = mask_mc;

когда вы устанавливаете mask_mc в качестве маски для canvasPanel_mc, то mask_mc становится просто объектом diplayobject, так что он будет обходить mouseEvents и т. Д.

тогда ваш код будет выглядеть так, он будет перетаскивать все holder_mc:

dragCanvas_mc.addEventListener(MouseEvent.MOUSE_DOWN,onStartDrag);

function onStartDrag(evt:MouseEvent)
{
    stage.addEventListener ( MouseEvent.MOUSE_UP,onStopDrag)
    startDrag();
}
function onStopDrag(evt:MouseEvent)
{
    stage.removeEventListener( MouseEvent.MOUSE_UP,onStopDrag)
    stopDrag();
}

@ pkyeck решение также допустимо, но только если у вас нет пользовательского итерации внутри canvasPanel_mc

1 голос
/ 26 июля 2011

контент, который вы хотите замаскировать, не обязательно должен находиться внутри маски-мувиклипа.обычно маска - это просто прямоугольный спрайт / форма, в которой ничего нет, кроме рисунка на графическом холсте.

var mask:Shape = new Shape();
mask.graphics.beginFill(0xff0000, 1);
mask.graphics.drawRect(0, 0, 20, 20);
addChild(mask);

, тогда вы создадите контейнер:

var container:Sprite = new Sprite();
addChild(container);
container.mask = mask;

, а затемдобавьте обработчик событий в контейнер:

container.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
private function onMouseDown(evt:MouseEvent):void
{
  container.startDrag();
}

вы также можете добавить дополнительные MC в спрайт контейнера ...

пример на wonderfl: http://wonderfl.net/c/nqpN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...