Замедление работы приложения AIR при наведении мыши на ContextMenu / NativeMenu - PullRequest
0 голосов
/ 09 октября 2011

Я создаю приложение для AIR, написанное на AS3, а иногда (чаще всего), когда я перемещаю мышь по меню, вызываемому правой кнопкой мыши (я пробовал и ContextMenu, и NativeMenu - в настоящее время я использую NativeMenu из-за необходимых подменю) объект Video значительно замедляется (он показывает изображение локальной веб-камеры), и счетчик FPS также падает (очевидно). Это происходит как при отладке, так и при запуске приложения после установки. Это настоящий провал, я был бы очень признателен за помощь. Я еще не нашел ничего похожего на это в Интернете, это действительно странно.

1 Ответ

0 голосов
/ 02 мая 2012

Это связано с тем, что ContextMenu необходимо рисовать с помощью Windows GDI (уровень программного обеспечения), а ваш Flash-видео объект визуализируется через графический процессор (конечно, это может быть исправлено Adobe, но на данный момент это не так).

Единственное решение - приостановить видео (или удалить его со сцены) до появления ContextMenu, перехватывая ContextMenuEvent.MENU_SELECT для всех существующих объектов ContextMenu (если таковых нет, добавьте по одному для каждого объекта, который наследует InteractiveObjectдобавлен непосредственно к stage).

Если вы хотите возобновить воспроизведение видео, вам придется принять некоторые ограничения.Поскольку при закрытии ContextMenu не происходит никаких событий, вам нужно полагаться на

  • ContextMenuEvent.MENU_SELECT_ITEM (инициируется ContextMenuItem, который вы создаете и добавляете в массив ContextMenu.customItems)
  • FullScreenEvent (выход в FullScreen гарантирует закрытие ContextMenu)
  • Event.DEACTIVATE (Flash закроет все контекстные меню, если потеряет фокус ввода)
  • MouseEvent.CLICK - это нехорошая идея в некоторых ситуациях (вы разберетесь с этим для своего приложения) (вы можете комбинировать это с полупрозрачным темным спрайтом поверх всего, чтобы указать на необходимость щелчка мышью для действия «отмена», а также для ловли и остановки распространениящелчка);

В некоторых ситуациях вы не сможете обнаружить закрытие ContextMenu, например

  • , когда пользователь выбирает встроенныйпункт меню (не в случае с Adobe Air)
  • нажимает такие клавиши, как F10 или Escape
  • другие ситуации
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...