Keyboard.GetState()。未按下键时,IsKeyDown不会停止

时间:2013-09-19 02:31:29

标签: c# xna

我正在尝试学习XNA游戏编程,并在Pluralsight(Pong游戏克隆)上继续使用 John Sonmez 的教程。这是检测左/右键是否被按下的代码,以便我们可以移动球拍:

public override void Update(GameTime gameTime)
{
    if (Keyboard.GetState().IsKeyDown(Keys.Left))
        Velocity = new Vector2(0, -0.5f);

    if (Keyboard.GetState().IsKeyDown(Keys.Right))
        Velocity = new Vector2(0, 0.5f);

    base.Update(gameTime);
}

此代码有效,但...... Keyboard状态似乎永远不会清楚。也就是说,如果我按下左或右键,即使只是快速敲击一次,那么拨片就会一直移动,就像我按住键一样。我没有拿着钥匙。我也只是加载这台PC“干净”所以几乎只有Windows(它是Windows 8,如果这有所不同)和Visual Studio和Monogame安装。因此,没有竞争的键控器或类似的东西。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

你忘记了其他,这使得它成为了一个 你现在正在做的是每次下降时将速度设置为0.5,但永远不要改变它。

答案 1 :(得分:1)

你应该这样做:

public override void Update(GameTime gameTime)
{
    Velocity = Vector2.Zero;

    if (Keyboard.GetState().IsKeyDown(Keys.Left))
        Velocity = new Vector2(0, -0.5f);

    if (Keyboard.GetState().IsKeyDown(Keys.Right))
        Velocity = new Vector2(0, 0.5f);

    base.Update(gameTime);
}

这样,当没有按任何键时,你会重置Velocity向量。