Форум

* Как при длительном лоадере не позволять движку встать на паузу при уходе фокуса с окна итд ?

08 августа 2016 17:56 #11051
Как при длительном лоадере не позволять движку встать на паузу при уходе фокуса с окна итд ?

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

а по идее логики должно загрузиться и только потом выполнив 1й кадр встать на паузу

подскажите можно ли обойти ну и если это все именно так то может лоадеру добавить параметр управления паузой? ( с паузой или без паузы)

спасибо.
Денис
10 августа 2016 17:04 #11130
может все-же есть решение с лоадером?
Денис
10 августа 2016 19:32 #11142
Чуть чуть разобрался и мне кажется тут дело вот в чём:
Для загрузки ресурсов нужно что бы крутился цикл loop(), он, грубо говоря, вешается на метод браузера setTimeout(), который перестаёт срабатывать на неактивной вкладке. След-но и загрузка сцены не идёт… Надо подумать как дёргать метод в неактивной вкладке по таймеру…
Не стой, где попало… Попадет еще раз.
http://naviris.ru/
10 августа 2016 19:38 #11144
Ответ на сообщение пользователя Кирилл
Чуть чуть разобрался и мне кажется тут дело вот в чём:
Для загрузки ресурсов нужно что бы крутился цикл loop(), он, грубо говоря, вешается на метод браузера setTimeout(), который перестаёт срабатывать на неактивной вкладке. След-но и загрузка сцены не идёт… Надо подумать как дёргать метод в неактивной вкладке по таймеру…

возможно и так .. только думаю тут дело в прелоадере который работает как обычный рендер сцены и если есть использовать паузу то вот и результат
Денис
10 августа 2016 19:53 #11145
Прелоадер это отдельный компонент. Он выводит загрузку не в canvas а отдельный dom элемент, но опирается на цикл loop().

Браузер специально приостанавливает эти временные колбеки по таймеру для оптимизации, походу тут ничего не сделаешь. Только переписывать модуль загрузки ресурсов в движке b4w…

А вот раньше такого "костыля" в браузере небыло…
Не стой, где попало… Попадет еще раз.
http://naviris.ru/
10 августа 2016 20:01 #11146
Ответ на сообщение пользователя Кирилл
Прелоадер это отдельный компонент. Он выводит загрузку не в canvas а отдельный dom элемент, но опирается на цикл loop().

Браузер специально приостанавливает эти временные колбеки по таймеру для оптимизации, походу тут ничего не сделаешь. Только переписывать модуль загрузки ресурсов в движке b4w…

А вот раньше такого "костыля" в браузере небыло…

все развивается )
пробелма осталась.. и ее очень видно на моих проектах
Денис
11 августа 2016 09:39 #11149
Добрый день.

Извиняюсь за запоздалый ответ, проглядел

Передайте параметр pause_invisible : false в функцию app.init

После этого, когда вы переключаете вкладку сцена будет активничать. Если вы хотите, чтобы сцена не активничала после того как вы загрузили её и переключили вкладку, то сделайте дополнительно следующее действие:

в load_cb к примеру вызовите вот эту функцию:

function handle_page_visibility() {

    var was_paused = m_main.is_paused();

    var visibility_change = function() {
        if (document.hidden) {
            was_paused = m_main.is_paused();
            m_main.pause();
        } else if (!was_paused)
            m_main.resume();
    }
    document.addEventListener("visibilitychange", visibility_change, false);
}
Разработчик Blend4Web
11 августа 2016 12:20 #11165
Ответ на сообщение пользователя Семенцов Роман
Добрый день.

Извиняюсь за запоздалый ответ, проглядел

Передайте параметр pause_invisible : false в функцию app.init

После этого, когда вы переключаете вкладку сцена будет активничать. Если вы хотите, чтобы сцена не активничала после того как вы загрузили её и переключили вкладку, то сделайте дополнительно следующее действие:

в load_cb к примеру вызовите вот эту функцию:

function handle_page_visibility() {

    var was_paused = m_main.is_paused();

    var visibility_change = function() {
        if (document.hidden) {
            was_paused = m_main.is_paused();
            m_main.pause();
        } else if (!was_paused)
            m_main.resume();
    }
    document.addEventListener("visibilitychange", visibility_change, false);
}


не совсем понятно.. про то что можно вначале до первого рендера сцены
сделать без паузы ясно, а вот как определить прохождение первого рендера?
как я понял прелоадер исполняется в том же цикле как и рендер т.е. каждый кадр прелоадера по факту рендер уже,
верно?
Денис
11 августа 2016 14:32 #11170
т.е. каждый кадр прелоадера по факту рендер уже,
верно?

Можно сказать и так, только на этапе загрузки подготавливаются данные для рендеринга. Т.е. фактически сам рендеринг начинается по завершению загрузки
Разработчик Blend4Web
11 августа 2016 14:54 #11171
Ответ на сообщение пользователя Семенцов Роман
Можно сказать и так, только на этапе загрузки подготавливаются данные для рендеринга. Т.е. фактически сам рендеринг начинается по завершению загрузки

ранее была тема что у меня в этом проекте рендеринг принудительно ограничен 1 к\с соотв. у меня была проблема с
прелоадером который грузился бесконечно долго из за этого.. и сделан небольшой обход , на этапе прелоадера 60к\с потом перекл на 1к\с .. кроме того я вроде как использую паузу далее .. а как все-же седалть так что б пауза во время начала работать и к.с не сбились?
Денис
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.