Keyhandler无法检测密钥

时间:2014-10-31 09:34:00

标签: c# xna

您好我的密钥处理程序出了问题。我非常想要一个函数来检测是否按下了一个键。

public bool keyHandler(Keys key)
    {
        if(key != null) {

            if (Keyboard.GetState().GetPressedKeys() == key)
            {
                return true;
            } else {
                return false; 
            }
        } else {  return false; } 
    }

问题在于

if (Keyboard.GetState().GetPressedKeys() == key)

我不知道如何检查某个键是否被按下以及如何在该功能中传递该键。

我得到的错误:"运营商' =='不能应用于Microsoft Xna.Framework.Input.Keys []和Microsoft.Xna.Framework.Input.Keys"类型的oparands。 使用C#和XNA

我不知道为什么这不起作用..有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

GetState()用于新对象;)

 KeyboardState ks = Keyboard.GetState();
 MouseState ms = Mouse.GetState();

 if (ms.LeftButton == ButtonState.Pressed)
 {
     DoWhatEver();
 }

 if (ks.IsKeyDown(Keys.Space))
 {
     AnimateShooting();
 }

答案 1 :(得分:2)

KeyboardState.GetPressedKeys()返回一组键(Keys[])。它基本上可以获得所有按键,如果您有某种键管理器或文本框或其他东西,这很方便。

你需要的是这样的东西(就像塞巴斯蒂安L所说的那样):

KeyboardState ks = Keyboard.GetState(); // get the keyboard's state
if (ks.IsKeyDown(Keys.A))
{
  DoSomeReallyInterestingStuff();
}
如果密钥关闭,

ks.IsKeyDown(Keys key)将返回true。 所以这是一个更好的方法:

class InputManager
{
   KeyBoardState state;

   // call every update
   public void Update()
   {
      state = Keyboard.GetState();
   }

   public bool IsKeyDown(Keys key)
   {
      return state.IsKeyDown(key);
      // or return key == null ? false : state.IsKeyDown(Keys.key);
      // but you would never call this method with a null key, that'd be stupid.
   }
}