Ваш setInterval
может go в куче мест, но, вероятно, наиболее очевидно поместить его вокруг вызовов вашей функции:
setInterval( () => {
virus.calculate();
virus.render();
}, 250)
Теперь методы вычисления и рендеринга будут выполняться каждый 250 мс
Вы можете заменить while
внутри вашего вычисления на if
, так как оно будет оцениваться каждый раз, когда вызывается функция
calculate() {
if (this.infected < this.population) {
this.period += 6;
this.infected *= this.infectionRate;
this.dead = this.infected * this.mortalityPercentage;
}
}
Рабочий пример : https://jsfiddle.net/yodjf14v/3/
В качестве альтернативы вы можете поместить setInterval
в функцию calculate()
и вызвать ее render()
:
calculate() {
setInterval( () => {
if (this.infected < this.population) {
this.period += 6;
this.infected *= this.infectionRate;
this.dead = this.infected * this.mortalityPercentage;
this.render(); // Here's the render call
}
}, 250)
}
Для дополнительного Боже мой, сделайте 250 мс в вашем setInterval
свойством класса you вроде this.interval = 250;
. Значение в середине кода известно как маги c число и часто считается плохой практикой.
requestAnimationFrame
, вероятно, не подойдет для вашего варианта использования здесь, потому что вы не имеете прямого контроля над его выполнением (ie: каждые n миллисекунд). Обычно он больше используется для анимации, когда вы хотите перерисовывать как можно чаще.
Вы всегда можете регулировать вызовы своих функций в нем, сохраняя время последнего вызова и сравнивая его с текущим временем, но для этого варианта использования это было бы setInterval
с большим количеством шагов