Эта строка сбивает с толку. Поскольку AND &&
имеет более высокий приоритет, чем OR ||
if (velocity.X > 0.00001f || velocity.X < -0.00001f && !(Keyboard.GetState().IsKeyDown(Keys.Right) || Keyboard.GetState().IsKeyDown(Keys.D) || Keyboard.GetState().IsKeyDown(Keys.Left) || Keyboard.GetState().IsKeyDown(Keys.A)))
Заявление станет.
if (velocity.X > 0.00001f
||
(velocity.X < -0.00001f && !(Keyboard.GetState().IsKeyDown(Keys.Right) )
|| Keyboard.GetState().IsKeyDown(Keys.D)
|| Keyboard.GetState().IsKeyDown(Keys.Left)
|| Keyboard.GetState().IsKeyDown(Keys.A)))
Я предполагаю, что вы действительно хотите:
if ( ( velocity.X > 0.00001f || (velocity.X < -0.00001f )
&&
(
! (Keyboard.GetState().IsKeyDown(Keys.Right)
|| Keyboard.GetState().IsKeyDown(Keys.D)
|| Keyboard.GetState().IsKeyDown(Keys.Left)
|| Keyboard.GetState().IsKeyDown(Keys.A)))
)
Однако вы не оставили ни одного комментария, я не знаю, как это интерпретировать. Эта строка выглядит как «если скорость x почти равна нулю и нажата Left
, D
, или A
или Right
НЕ нажата», тогда установите X как большее значение.
Но эта строка противоречит тому, что вы описали.
Я недавно заметил, что когда я двигаюсь влево и вправо, он движется с разными скоростями, и не знаю, как долго это было правдой.
Вы хотите, чтобы Left и Right делали одно и то же, но не в коде.
Я предлагаю "использовать круглые скобки для удобства чтения" и "использовать bool, если в строке более 3 условий для проверки" .