C#XNA键盘输入问题.代码总是返回false

本文关键字:返回 false 代码 键盘 输入 问题 C#XNA | 更新日期: 2023-09-27 18:20:35

我正在尝试为播放器实现一种更改控件的方法,然后将数据保存到文本文件中。

只有我的InputManager类使用Xna.Input.Keys枚举,其他所有获得键盘输入的内容都以字符串形式传递。InputManager包含一个字典,其中键是从外部传入的动态字符串,值是Input.Keys枚举中的相应键。

所有这些都是从一个文件(keyconfig.cfg,只是一个标准文本文件)加载的
我尝试过以各种方式修改代码,但似乎无法使其正常工作。问题似乎来自我的这种特殊方法,它是InputManager的一部分:

public bool IsButtonPressed(string keyString)
    {
        if (keyState.IsKeyDown(KeyFromString(keyString)) && keyState_old.IsKeyUp(KeyFromString(keyString)))
           return true;
        return false;
    }
  • KeyFromString将字符串强制转换为Keys类型
  • keyState&keyState_old是KeyboardState实例(_old是最后一帧的图像)
  • KeyboardState实例通过Update()每帧更新一次

我正在设置我的keyState&InputManager的Update()中的keyState_old变量如下:

public void Update(GameTime gameTime)
{
    keyState = Keyboard.GetState();
    mouseState = Mouse.GetState();
    //Updates some other stuff within the class here, unrelated to keyboard input
    keyState_old = keyState;
}

我完全被困在这个问题上,如果有任何不清楚的地方,我很抱歉,我的英语不是最好的。提前感谢。

C#XNA键盘输入问题.代码总是返回false

keyState = Keyboard.GetState();
keyState_old = keyState;

这就是你的问题。你得到了新的状态,并将其放入keyState,然后将keyState放入keyState_old。。。所以你有两个相同状态的副本。把这两行放在一起,而不是放在不相关的东西的两边,然后反过来做。保存旧状态,然后获取新状态。

在读取新状态之前分配keyState_old可能更安全,以避免覆盖

public void Update(GameTime gameTime)
{
    keyState_old = keyState;  // Do this first
    keyState = Keyboard.GetState();  // Then this
    mouseState = Mouse.GetState();
    //Updates some other stuff within the class here, unrelated to keyboard input
}

否则,如果从InputManager.Update方法外部调用IsButtonPressed,则当前和旧的键状态将是相同的值