我正在学习如何在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左右的恒定值,太高而不受我的死区的影响。在负速度上不会发生这种情况。
这在我的逻辑中似乎是一个简单的错误,但我似乎无法弄清楚,有什么帮助吗?
答案 0 :(得分:3)
您的逻辑将立即反转.1和.2之间的摩擦力变化。尝试添加“其他”,这样就不会立即撤消更改。
if (Velocity.X > 0) Velocity.X -= Friction;
else if (Velocity.X < 0) Velocity.X += Friction;