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

本文关键字:IsKeyDown GetState Keyboard | 更新日期: 2023-09-27 18:31:48

我正在尝试学习XNA游戏编程,并按照John Sonmez在Pluralsight(Pong游戏克隆)上的教程进行操作。以下是检测是否按下左/右键的代码,以便我们可以移动桨:

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安装。所以没有竞争的键处理程序或类似的东西。

有什么想法吗?

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

你忘记了其他,这使它成为 0。
您现在所做的是每次关闭时将速度设置为 0.5,但永远不要将其更改回来。

你应该做这样的事情:

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矢量。