Мой метод setInterval () сходит с ума - PullRequest
0 голосов
/ 27 января 2020

Хорошо, я делаю игру в режиме ожидания, и чтобы вам не приходилось ждать каждую секунду, чтобы получить озолит (валюта в игре), я создал переменную с именем ops (озолит в секунду) и сделал setInterval () выполняется таким образом, что, если у человека есть 2 операции, он будет запускаться каждые 0,5 секунды. Это работает в большинстве случаев, но иногда он сходит с ума и решает, что он идет так же быстро, как если бы у игрока было 1000 операций, поэтому он работает каждые 1 миллисекунду. Вот код, который является источником проблемы, чтобы помочь вам найти ответ на этот вопрос.

ops = Math.floor(((reactors*10)+mines)*((alientransbought*colplanets)+1))

if(ops>=1){
     setInterval(production,Math.floor(1000/ops)) //Production is just where it gives the ozolith and is not 
     the root of the problem
}

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Я нашел то, что могло бы помочь. Обычно вторая часть переменной ops: ((alientransbought*colplanets)+1)) обычно остается на 0, если только вы не купите ее, что позже в игре. Я обнаружил, что это обычно появляется, только если вы покупаете это первым, так что я думаю, что я в порядке. Спасибо за помощь, хотя!

0 голосов
/ 27 января 2020

Веб-браузеры, как и все приложения, по очереди занимают часть процессорного времени, и время, которое они должны ждать, будет варьироваться в зависимости от нагрузки. Это то, что вызывает задержку в асинхронных таймерах - таймер 200 мс может фактически занять 202 мс или 204, и это будет постепенно отправлять секундомер из времени.

Взгляните на эту статью как указано в этот ответ . Он объясняет, как создать «таймер высокого разрешения».

...