Разве эффективнее отделить код, который не нужно запускать так часто, от основной игры l oop в другой l oop в Javascript? - PullRequest
0 голосов
/ 16 февраля 2020

Я создаю свою первую игру Javascript и хочу, чтобы игра постоянно проверяла что-то по ходу игры. Проверка несколько дорогая, и основная игра l oop выполняется каждые 25 миллисекунд, поэтому я бы предпочел, чтобы ее не было в игре l oop. Я думал о разделении этой проверки в функции, которая будет вызываться setInterval () каждую секунду. Я думаю, это сделает мой код более эффективным, верно?

Вот как выглядит основной l oop:

var gameLoop = new CustomEvent("gameLoop")
function main() {
    document.dispatchEvent(gameLoop)
}
setInterval(main, 25)

Итак, в принципе, я мог бы сделать это:

function check() {
      //Check code here
    }
}
setInterval(check, 1000)

Или:

document.addEventListener("gameLoop", function() {
    //check code here
})```

1 Ответ

1 голос
/ 16 февраля 2020

Да, это чистый способ отделить высокочастотные события от низкочастотных.

Чтобы смешивать в других интервалах, таких как 50 мс или 75 мс, вы также можете добавить глобальную переменную, такую ​​как tick_count_25 и используйте оператор мода в функции 25 мс.

вне функции

var tick_count_25 = 0;

внутри функции

tick_count_25++;
....
if ((tick_count_25 % 3) == 0)  // every 75 ms
{
      ... some function that only needs to run once every 3 ticks
}

Это позволяет избежать создания 20 прерываний и сохранить ваша игра l oop logi c в 1-2 местах вместо многих.

Она также позволяет вам устанавливать отложенные триггеры, например, если вы хотите, чтобы что-то произошло через 20 тиков, хотя вы также можете сделать это путем добавления большего количества глобальных счетчиков, которые сохраняются за пределами прерывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...