По умолчанию MOUSE_LEAVE не является надежным событием.Иногда его увольняют, а иногда нет.Вы можете найти жалобы по этому поводу по всей сети.
Однако есть одна вещь, которую вы можете сделать, а именно проверить вручную, находится ли мышь над сценой:
var out : Boolean = false;
stage.addEventListener (Event.ENTER_FRAME, checkMouse);
function checkMouse (ev:Event) : void {
if (
stage.mouseX < 0 ||
stage.mouseX > stage.stageWidth ||
stage.mouseY < 0 ||
stage.mouseY > stage.stageHeight)
{
if (!out)
{
out = true;
stage.dispatchEvent (new Event(Event.MOUSE_LEAVE));
}
}
else if (out)
{
out = false;
stage.dispatchEvent (new Event("mouseEnter"));
}
}
Это отправит событие MOUSE_LEAVE, когда курсор находится за пределами области действия, и пользовательское событие "mouseEnter", когда он снова войдет.Затем вы можете добавить прослушиватели событий на сцену, чтобы надежно реагировать на эти события, но вы должны помнить, что одновременно может запускаться более одного MOUSE_LEAVE (если выполняются как пользовательский, так и встроенный).Вы можете проверить переменную out
, чтобы предотвратить двойное выполнение обработчиков событий.
PS Я не уверен, что это работает для всех параметров stage.align и stage.scaleMode.Он должен работать для комбинации StageScaleMode.NO_SCALE и StageAlign.TOP_LEFT, для любых других настроек, которые вы должны будете проверить и, возможно, найти обходной путь.