Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Вопрос Как работает коррекция движения?

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
25 Дек 2025
Сообщения
6
Реакции
0
Всем привет, недавно начал делать свой софт, но столкнулся с проблема гвоздит на серверах когда бьет киллаура, слышал то что нужна коррекция движения.
Я не понимаю что это как она работает и т.д. Сможете объяснить или дать код??
 
коррекция движения это когда ты поворачиваешь голову на врага чтобы ударить, но при этом продолжаешь бежать туда куда бежал
без неё: повернул голову → wasd теперь двигает тебя в сторону куда смотришь → тебя кидает в бок и ты тормозишь
с ней: голова повернулась, а движение пересчитывается как будто ты всё ещё смотришь вперёд

Java:
Expand Collapse Copy
private Vec3d fixVelocity(Vec3d currVelocity, Vec3d movementInput, float speed) {
    if (currentAngle != null) {
        float yaw = currentAngle.getYaw(); // берём yaw ротации на врага
        double d = movementInput.lengthSquared();

        if (d < 1.0E-7) {
            return Vec3d.ZERO;
        } else {
            Vec3d vec3d = (d > 1.0 ? movementInput.normalize() : movementInput).multiply(speed);

            float f = MathHelper.sin(yaw * 0.017453292f);
            float g = MathHelper.cos(yaw * 0.017453292f);

            // пересчитываем вектор движения относительно yaw ротации
            return new Vec3d(vec3d.getX() * g - vec3d.getZ() * f, vec3d.getY(), vec3d.getZ() * g + vec3d.getX() * f);
        }
    }
    return currVelocity;
}
 
коррекция движения это когда ты поворачиваешь голову на врага чтобы ударить, но при этом продолжаешь бежать туда куда бежал
без неё: повернул голову → wasd теперь двигает тебя в сторону куда смотришь → тебя кидает в бок и ты тормозишь
с ней: голова повернулась, а движение пересчитывается как будто ты всё ещё смотришь вперёд

Java:
Expand Collapse Copy
private Vec3d fixVelocity(Vec3d currVelocity, Vec3d movementInput, float speed) {
    if (currentAngle != null) {
        float yaw = currentAngle.getYaw(); // берём yaw ротации на врага
        double d = movementInput.lengthSquared();

        if (d < 1.0E-7) {
            return Vec3d.ZERO;
        } else {
            Vec3d vec3d = (d > 1.0 ? movementInput.normalize() : movementInput).multiply(speed);

            float f = MathHelper.sin(yaw * 0.017453292f);
            float g = MathHelper.cos(yaw * 0.017453292f);

            // пересчитываем вектор движения относительно yaw ротации
            return new Vec3d(vec3d.getX() * g - vec3d.getZ() * f, vec3d.getY(), vec3d.getZ() * g + vec3d.getX() * f);
        }
    }
    return currVelocity;
}
Спасибо большое
 
Назад
Сверху Снизу