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;
}
我完全被困在这个问题上,如果有任何不清楚的地方,我很抱歉,我的英语不是最好的。提前感谢。
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,则当前和旧的键状态将是相同的值