计算物体摩擦力时不准确

时间:2012-02-24 23:54:24

标签: c# logic game-physics xna-4.0

我正在学习如何在C#中使用XNA框架,在计算基本摩擦形式时,我正在努力解决基本错误。

计算摩擦力的代码是:

//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 个答案:

答案 0 :(得分:3)

您的逻辑将立即反转.1和.2之间的摩擦力变化。尝试添加“其他”,这样就不会立即撤消更改。

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