XNA对角线运动密钥发布

时间:2015-05-03 21:48:08

标签: c# xna game-physics

好的,所以说你正在玩自上而下的游戏。您按WD进入右上方向。现在你只想要正确,所以你发布了W密钥。人们会希望你改变方向并向右转,但相反,你会继续向右转。我该怎么做才能解决这个问题? 这是我的代码:

        if (kb.IsKeyDown(Keys.W) || kb.IsKeyDown(Keys.A) || kb.IsKeyDown(Keys.S) || kb.IsKeyDown(Keys.D))
        {
            if (kb.IsKeyDown(Keys.W))
                velocity.Y = -movespeed;
            else if (kb.IsKeyDown(Keys.A))
                velocity.X = -movespeed;
            else if (kb.IsKeyDown(Keys.S))
                velocity.Y = movespeed;
            else if (kb.IsKeyDown(Keys.D))
                velocity.X = movespeed;
            else if (kb.IsKeyDown(Keys.W) && kb.IsKeyDown(Keys.D))
            {
                velocity.X = movespeed;
                velocity.Y = -movespeed;
            }
            else if (kb.IsKeyDown(Keys.W) && kb.IsKeyDown(Keys.A))
            {
                velocity.X = -movespeed;
                velocity.Y = -movespeed;
            }
            else if (kb.IsKeyDown(Keys.S) && kb.IsKeyDown(Keys.D))
            {
                velocity.X = movespeed;
                velocity.Y = movespeed;
            }
            else if (kb.IsKeyDown(Keys.S) && kb.IsKeyDown(Keys.A))
            {
                velocity.X = -movespeed;
                velocity.Y = movespeed;
            }
        }
        else
            velocity *= .9f;

        position += velocity;

1 个答案:

答案 0 :(得分:0)

经过几个小时的努力,我自己找到了答案。

在检查工作之前简单地将速度设置为零: 编辑:乘以.89实际上是为了更顺畅的运动。

        if (kb.IsKeyDown(Keys.W) || kb.IsKeyDown(Keys.A) || kb.IsKeyDown(Keys.S) || kb.IsKeyDown(Keys.D))
        {
            velocity *= .89f
            if (kb.IsKeyDown(Keys.W))
                velocity.Y = -movespeed;
            if (kb.IsKeyDown(Keys.A))
                velocity.X = -movespeed;
            if (kb.IsKeyDown(Keys.S))
                velocity.Y = movespeed;
            if (kb.IsKeyDown(Keys.D))
                velocity.X = movespeed;
        }
        else
            velocity *= .9f;