Проект AS3 - слушатель перемещения мыши, реагирующий вне приложения - PullRequest
1 голос
/ 31 мая 2009

У меня необычное поведение, от которого я не могу до конца разобраться. Когда я запускаю это, если я перемещаюсь в области SWF, он обычно отслеживает движение мыши. Ожидается.

Но он отслеживает событие перемещения, когда я нажимаю в любом месте на экране. Если я щелкаю и перетаскиваю, он отслеживается, как если бы я двигался в области SWF браузера.

Вот код. Я упростила это до костей. Просто поместите это в пустой проект AS3 во Flex под названием «Engine» - без кавычек.

package {
import flash.display.Sprite;
import flash.events.MouseEvent;

[SWF(width='640', height='360', backgroundColor='#888888', frameRate='31')]
public class Engine extends Sprite
{       
    public function Engine()
    {
        // Add the mouse handlers
        stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
    }

    public function mouseMoveHandler(evt:MouseEvent):void
    {
        trace("move");
    }
}
}

В качестве обходного пути я добавил MOUSE_MOVE один MOUSE_OVER и удалил его в MOUSE_OUT. Но поведение все еще кажется довольно необычным, и мне было бы интересно понять, почему это происходит.

Может кто-нибудь сказать мне, как я могу ограничить события фактической стадией приложения?

Ответы [ 3 ]

1 голос
/ 31 мая 2009

Как уже упоминалось, вы не можете остановить эти события от запуска. Они срабатывают, пока вы не отпустите кнопку мыши.

Что вы можете сделать, это сравнить координаты MouseEvent с границами сцены и игнорировать их снаружи.

public function mouseMoveHandler(evt:MouseEvent):void
{
    if (evt.stageX >= 0 && evt.stageX <= stage.stageWidth &&
        evt.stageY >= 0 && evt.stageY <= stage.stageHeight)
    {
        trace("move");
    }
}
0 голосов
/ 16 июня 2009

Хорошо, это известная ошибка, которая происходит только с Mac.

Здесь есть исправление:

http://www.visible -form.com / блог / transformmanager-фикс-для-макинтош-светлячок /

0 голосов
/ 31 мая 2009

Если вы щелкнете внутри своего флэш-фильма и перетащите мышку за его пределы, событие MOUSE_MOVE будет продолжаться, пока вы не отпустите кнопку мыши. MOUSE_LEAVE сработает только тогда, когда вы отпустите мышь за пределами проигрывателя. Вот как работает Flash Player.

Может быть, я ошибаюсь, но я не думаю, что вы можете изменить это поведение.

...