Показать сообщение отдельно
Старый 07.03.2015, 13:03
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 1  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
По умолчанию Freeze AIR-приложения на девайсе при сворачивании

Нужен совет.

Есть проект на нативном флеше, в котором логика работы базируется на:
1. событиях, связанных с анимацией (ENTER_FRAME, COMPLETE)
2. событиях, связанных с проигрыванием звуковых файлов (COMPLETE)
3. отложенных вызовах функций (setTimeout или завершение выполнения других функций)
4. вызовах функций по таймеру

Так сложилось исторически, плюс по геймплею действительно необходимо, чтобы в случаях 1-2 это было именно так (например, анимация в некоторых случаях для слабых машин удлиняется по времени, чтобы обеспечить "гладкость", пусть и в замедленном варианте).

После портирования в мобильный вариант на Starling'е естественным образом столкнулся с ситуацией, что при сворачивании приложения на девайсе анимация останавливается:

Код AS3:
NativeApplication.nativeApplication.addEventListener( Event.DEACTIVATE, function ( e : * ) : void
{
     if ( Starling.current ) Starling.current.stop( true );
} );
но все остальное живет своей жизнью.

Сейчас в размышлении. Либо дорабатывать каждый из сервисов звука и времени отдельно (в т.ч., делать свой setTimeout с возможностью заморозки), либо организовать единый FreezeService и регистрировать в нем звуки, таймеры, отложенные вызовы, а затем все фризить и восстанавливать централизованно.

Интересует, кто и как решает задачу заморозки.

ЗЫ. Посмотрел аналогичные приложения для Android'а, мнгие пошли по пути упрощения (например, отказались от фоновой музыки), но это не мой путь точно.