Неточность при расчете трения на объекте - PullRequest
2 голосов
/ 25 февраля 2012

Я учусь использовать платформу XNA в C # и борюсь с основной ошибкой при вычислении базовой формы трения.

Код для расчета трения:

//Check X deadzone movement
if (Velocity.X < 0.1f && Velocity.X > -0.1f)
{
    Velocity.X = 0f;
}
else
{
    //Friction Calculation
    if (Velocity.X > 0) Velocity.X -= Friction;
    if (Velocity.X < 0) Velocity.X += Friction;
}

//Check Y deadzone movement
if (Velocity.Y < 0.1f && Velocity.Y > -0.1f)
{
    Velocity.Y = 0f;
}
else 
{
    //Friction Calculation
    if (Velocity.Y > 0) Velocity.Y -= Friction;
    if (Velocity.Y < 0) Velocity.Y += Friction;
}

Где

Friction = 0.2f;`

Моя проблема в том, что всякий раз, когда я перемещаю игрока вправо или вниз (в положительных направлениях), скорость «залипает», и на нее не влияет трение. Он остается на постоянном уровне около 0,4, слишком высоко, чтобы быть затронутым моей мертвой зоной. Это не происходит на отрицательных скоростях.

Это кажется простой ошибкой в ​​моей логике, но я не могу понять, какая-нибудь помощь?

1 Ответ

3 голосов
/ 25 февраля 2012

Ваша логика немедленно изменит изменение трения для значений от .1 до .2.Попробуйте добавить 'else', чтобы сразу не отменить изменение.

if (Velocity.X > 0) Velocity.X -= Friction;
else if (Velocity.X < 0) Velocity.X += Friction;
...