Перейти к содержимому
RU
Играть

Форум

Фикс управления


Niced

Рекомендованные сообщения

Управление ломается из-за того, что когда вкладка не отображается, браузер перестает вызывать функции обновления и отрисовки, переданные игрой в requestAnimationFrame. Браузер считает, что отрисовывать невидимую вкладку не имеет никакого смысла и это только зря тратит энергию. И правильно делает! Но в нашем случае данное поведение приводит к тому, что одна часть игры продолжает работу (в фоновом потоке), а другая "засыпает" и не выполняет некоторые важные процедуры, из-за чего ломается управление и фоновая музыка. Ну, в общем, встречайте продолжение сериала "Костыли на лыжах" - скрипт для принудительного обновления состояния игры:

 

Скрытый текст

window_requestAnimationFrame = requestAnimationFrame, window_cancelAnimationFrame = cancelAnimationFrame;

 

frameRequestHandle = 0, renderingRequests = new Map(), lastRenderingRequestHandle = 0;

 

previousRenderingStarted = 0;

 

requestAnimationFrame = function (callback) {

 

    if (typeof callback != "function") throw new TypeError("callback is not a function");

 

    renderingRequests.set(++lastRenderingRequestHandle, callback);

 

    if (frameRequestHandle == 0) frameRequestHandle = window_requestAnimationFrame(processRequests);

 

    return lastRenderingRequestHandle;

};

 

cancelAnimationFrame = function (requestHandle) {

 

    if (renderingRequests.has(requestHandle)) renderingRequests.set(requestHandle, null);

};

 

function processRequests() {

 

    frameRequestHandle = 0;

 

    const lastRequestHandle = lastRenderingRequestHandle;

    const timestamp = performance.now();

 

    for (let requestHandle = lastRequestHandle - (renderingRequests.size - 1);

        requestHandle <= lastRequestHandle; requestHandle++) {

 

        const callback = renderingRequests.get(requestHandle);

 

        renderingRequests.delete(requestHandle);

 

        if (callback) callback(timestamp);

    }

 

    previousRenderingStarted = timestamp;

}

 

setInterval(() => {

 

    if (frameRequestHandle != 0 && performance.now() - previousRenderingStarted > 500) {

 

        window_cancelAnimationFrame(frameRequestHandle);

 

        processRequests();

    }

}, 1000);

 

Для тех, кто не знает, что с ним делать: изучайте инструкцию "Для Chrome" на https://ru.tankiforum.com/topic/278577/

 

Изменено пользователем Niced
  • Нравится 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 минуту назад, Niced сказал:

Управление ломается

Погоди, ХЛАМ опять ломается? 

 

Ты конечно молодец, пашешь за всю тех. подд. и альтернативу вместе взятую, но блин, ну вот не будет тебя, кто будет все это исправлять? 

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

34 минуты назад, olegb2101 сказал:

Погоди, ХЛАМ опять ломается? 

Ну да, уж три недели как, а фикса все нет: https://ru.tankiforum.com/topic/280349/ При том, что для некоторых игроков (меня в том числе) по доставляемым неудобствам эта проблема наравне с критами, потому что приходится перезагружать игру сразу после входа в битву.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Автор правильно все пишет. У нас уже есть фикс на это, завтра выведем на тестовый. Проблема не в том, чтобы знать как это работает, а в том, как починить не сломав ничего по пути.
Если использовать срипт автора то конечно же у вас управление теряться не будет, но будут другие проблемы. У нас к примеру с 4-го раза только получилось пофиксить это не сломав что-то другое(и то тесты покажут ломает или нет).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

21 минуту назад, plombirka сказал:

Если использовать срипт автора то конечно же у вас управление теряться не будет, но будут другие проблемы. У нас к примеру с 4-го раза только получилось пофиксить это не сломав что-то другое(и то тесты покажут ломает или нет).

Проблем не будет, потому что вы фиксите следствие - несоответствие состояний внутри игры, а скрипт просто вызывает функции, которые не вызывает браузер и не затрагивает ничего другого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поспешил я скрыть тему...

 

Надеюсь, с пятого раза у них получится пофиксить. Разработчики, мы верим в вас!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

12 часа назад, Niced сказал:

Надеюсь, с пятого раза у них получится пофиксить.

Просто это не попало в релиз по тем или иным причинам, увы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у меня проблема в управлении

когда зажаты клавиши езды поворота башни и пробел, то танком невозможно управлять, он не поварачивает а едит только вперед и крутится башня, клавиатура новая, что делать?

P.S играю в 8-9 пальцев, раньше такого не было

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Гость
Эта тема закрыта для публикации сообщений.
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×
×
  • Создать...