Что не так с моим временем дельты? Различные скорости поворота в методе обновления - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть этот метод обновления с использованием дельта-времени (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 Гц, я получаю эти результаты при движении по кругу:

enter image description here

Вот код для тестирования: https://jsfiddle.net/yo1u5dh3/

Забыл ли я где-нибудь время дельты? Я не могу понять, почему поворот между двумя мониторами такой разный.

...