Форум

"Ловля" события полного экрана

30 октября 2016 00:34 #13184
Потихоньку "пилю" веб-приложение.
Реализовал авторотацию модели через
m_cam.auto_rotate(0.1);


Реализовал переключение в фулскрин по клику на объект сцены
m_app.request_fullscreen(container_id);


При клике канвас переходит в полноэкранный режим, но разумеется сбивается авторотация .
Пробую автоматически запустить авторотацию после команды перехода на фулскрин последовательно выполняя команды
m_app.request_fullscreen(container_id);
m_cam.auto_rotate(0.1);

Не включается авторотация.
Пытаюсь поймать фулскрин (точнее переключение состояния) через
document.addEventListener("webkitfullscreenerror", setrotation, false);

И уже в функции "setrotation" выполнить "m_cam.auto_rotate(0.1);" - не получается.

не работает также EventListener "fullscreenchange".

Как правильно инициировать авторотацию при смене окно\фулскрин
01 ноября 2016 15:03 #13240
При клике канвас переходит в полноэкранный режим, но разумеется сбивается авторотация .
Вроде, не должно такого быть. Проверьте на любой демке с вебплеером - там у вас работает? Отличие только, что в вебплеере клик идет по html-кнопкам, а у вас объект. Авторотация может сбрасываться, если подвигать мышью с зажатой левой кнопкой, ну т.е. как бы при взаимодействии пользователя с камерой.
Команда Blend4Web
01 ноября 2016 16:42 #13246
А, да, на вебплеере авторотация не сбивается.
В приложении фулскрин реализую кликом по объекту (квадратная плоскость приаттаченная к камере, как я увидел в демке или туториале здесь на сайте).

В принципе да, видимо помимо события "клик" на объекте сцены регистрируется еще и "драг", и сбивает авторотацию.
Я, видимо, так и подумал, и решил принудительно включать ротацию при смене режима.
Авторотация не включается, если её ставить сразу после реквестфулскрина ,как я написал ранее.
Включение по таймингу (допустим в 0.01 секунду ) тоже не вариант - пользователь должен иметь возможность осматривать статичный объект.
А яваскриптовский эвент что-то не ловится.
Видимо нужно вводить булевскую переменную фулскрина, и запускать авторотацию при её смене.
Ну, допустим я могу предположить, что конструкция
m_app.request_fullscreen(container_id);
m_cam.auto_rotate(0.1);

не срабатывает потому что на миллисекунду детектится драг.
Или надо покопаться в функциях и поставить переключение при mouseUP на объекте, т.к. после апа не детектится драг. Разумеется, если это позволяет движок.
07 ноября 2016 11:58 #13485
У меня так работает и не сбивается:
function load_cb(data_id, success) {

    if (!success) {
        console.log("b4w load failure");
        return;
    }

    m_app.enable_camera_controls();

    // place your code here

    document.addEventListener("mousedown", down_cb);
    m_cam_anim.auto_rotate(0.1);
}

function down_cb(e) {
    var obj = m_scenes.pick_object(e.clientX, e.clientY);
    if (obj)
        m_app.request_fullscreen(document.body);
}

- как изначально крутится, так и после фулскрина

Может вы auto_rotate несколько раз вызываете; в документации написано:
"When it is called for the first time, auto-rotation is enabled while the next call will disable auto-rotation."

Если что, у метода request_fullscreen есть параметр enabled_cb - колбек сразу по включению - можно его попробовать.
Команда Blend4Web
07 ноября 2016 12:07 #13486
Сейчас не помню, где получилась "нестыковка", но поэкспериментировав с режимами фулскрина я заметил что ИНОГДА ротация выключается, а иногда нет (при одинаковом то коде). Возможно из-за скорости ОТПУСКАНИЯ мыши после клика. Использовал mousedown.

В общем, используя mouseup и проверку при вкл\выкл фулскрина
if (m_cam.is_auto_rotate() == false) {
	m_cam.auto_rotate(0.1);
}

победил.
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.