【问题标题】:Keyboard.GetState().IsKeyDown is not stopping when key is not pressed未按下键时,Keyboard.GetState().IsKeyDown 不会停止
【发布时间】:2013-09-19 22:58:18
【问题描述】:

我正在尝试学习 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 安装。所以没有竞争的钥匙处理程序或类似的东西。

有什么想法吗?

【问题讨论】:

    标签: c# xna


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你应该这样做:

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

      【讨论】:

      • 谢谢,这实际上是我修复它的方法。我知道我被困在视频中,看不到发生了什么。 (顺便说一句,我从 Pluralsight 网站下载了代码,它与我当时的代码相匹配,并且遇到了同样的问题。)
      • 您的问题是您正在设置速度。如果您更改代码以在每次按下键时将 Vector2 添加到位置(而不是速度),您的代码将是正确的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多