AS3 MOUSE_LEAVE проблема - PullRequest
       3

AS3 MOUSE_LEAVE проблема

0 голосов
/ 14 сентября 2010

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

Я бы хотел потерять контроль над объектом, когда мышь покидает сцену.

Я пытался удалить прослушиватель события MOUSE_DOWN для события MOUSE_LEAVE, но ничего.

Я также пытался отправить событие MOUSE_UP для события MOUSE_LEAVE, но оно также не работает ... оно работает, только если я вручную отпущу кнопку мыши.

Есть ли способ переопределить событие MOUSE_DOWN, когда пользователь убирает мышь с экрана, но он все еще нажимает кнопку мыши ??? Любое предложение ???

Заранее спасибо

Ответы [ 4 ]

1 голос
/ 14 сентября 2010

Действительно ли сцена слушает событие MOUSE_LEAVE?В любом случае, проверьте эту статью, она может помочь: http://www.kirupa.com/developer/flashcs3/detecting_when_mouse_leaves_movie.htm

1 голос
/ 18 мая 2011

Вот пара хитрых ловушек, в которые нельзя попасть:

Одна странная вещь в том, что в Chrome + Firefox событие MOUSE_LEAVE не отправляется для WMODE из OPAQUE или TRANSPARENT. Он просто не стреляет - мышкой вниз или вверх.

С WINDOW работает нормально. Это заняло у меня много времени, чтобы узнать! гр ... http://bugs.adobe.com/jira/browse/FP-892


Во-вторых, убедитесь, что вы используете Event в качестве типа параметра для вашего обработчика Event.MOUSE_LEAVE, а не MouseEvent. Если вы попытаетесь обработать MOUSE_LEAVE с помощью e:MouseEvent, вы получите ошибку, которую вы можете никогда не увидеть (если только вы не используете отладочный флэш-плеер). Это очень простая ошибка, потому что вы, вероятно, указываете всем другим обработчикам на тот же метод.

Вот что я делаю: (просто позвоните моему основному endDrag с mouseLeave(e:Event)

stage.addEventListener(MouseEvent.MOUSE_MOVE, drag);
stage.addEventListener(MouseEvent.MOUSE_UP, endDrag);
stage.addEventListener(Event.DEACTIVATE, endDrag);
stage.addEventListener(Event.MOUSE_LEAVE, mouseLeave);

private function mouseLeave(e:Event):void
{
    endDrag(new MouseEvent("MOUSE_LEAVE"));
}

public function endDrag(evt:MouseEvent):void
{
    /// handle end drag
}
0 голосов
/ 01 мая 2013

Когда вы перетаскиваете объект за пределы флэш-фильма, он вызовет событие MOUSE_OUT.Вы можете прослушать это событие, использовать переменную, чтобы проверить, перетаскивается ли объект, и, если это так, отправить событие MOUSE_UP.

some_object.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
some_object.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
some_object.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);

private function mouseOutHandler(e:MouseEvent):void
{
    if (isDragging)
        e.target.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
}

private function mouseDownHandler(e:MouseEvent):void
{   
    e.target.startDrag();
    isDragging = true;
}

private function mouseUpHandler(e:MouseEvent):void
{   
    e.target.stopDrag();
    isDragging = false;
}
0 голосов
/ 14 сентября 2010

Я полагаю, что вы говорите о том, что пользователь покидает флэш-контент вместе с щелчком мыши, и когда он / она возвращается, он продолжает процесс, верно?

Предлагаю, вы отслеживаете координаты мыши x & y. Задайте условие, которое запускает обработчик события «вверх», когда x или y равны ширине или высоте этапа соответственно.

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