У меня есть этот метод обновления с использованием дельта-времени (dt):
function update(dt) {
if (car.isThrottling) {
car.power += (powerFactor * car.isThrottling) * dt;
} else {
car.power -= powerFactor * dt;
}
if (this.isReversing) {
car.reverse += reverseFactor * dt;
} else {
car.reverse -= reverseFactor * dt;
}
car.power = Math.max(0, Math.min(maxPower, car.power));
car.reverse = Math.max(0, Math.min(maxReverse, car.reverse));
const direction = car.power > car.reverse ? 1 : -1;
if (car.isTurningLeft) {
car.angularVelocity -= (direction * turnSpeed * car.isTurningLeft) * dt;
}
if (car.isTurningRight) {
car.angularVelocity += (direction * turnSpeed * car.isTurningRight) * dt;
}
car.xVelocity += (Math.sin(car.angle) * (car.power - car.reverse)) * dt;
car.yVelocity += (Math.cos(car.angle) * (car.power - car.reverse)) * dt;
car.x += car.xVelocity;
car.y -= car.yVelocity;
car.xVelocity *= drag;
car.yVelocity *= drag;
car.angle += car.angularVelocity;
car.angularVelocity *= angularDrag;
}
Я думал, что я использую дельта-время (dt) везде, где это необходимо, но когда я запускаю это на обоих из моих мониторов, один 60 Гц, а другой 144 Гц, я получаю эти результаты при движении по кругу:
Вот код для тестирования: https://jsfiddle.net/yo1u5dh3/
Забыл ли я где-нибудь время дельты? Я не могу понять, почему поворот между двумя мониторами такой разный.