2014-10-31 3 views
0

Здравствуйте, у меня возникла проблема с моим манипулятором. Я очень хочу, чтобы функция обнаруживала, нажата ли клавиша.Keyhandler не может обнаружить ключ

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) 

Я не знаю, как, как проверить, если определенная клавиша нажата и как передать этот ключ в функции.

Я получаю ошибку: "оператор '==' не может быть применен к oparands от типа Xna.Framework.Input.Keys Microsoft [] и Microsoft.Xna.Framework.Input.Keys" Использование C# и XNA

Я не понимаю, почему это не работает. Может кто-нибудь мне помочь?

+2

Операнды типа * what *? Пожалуйста, не обрезайте сообщение об ошибке ... –

+3

Я не помню XNA API, но выглядит как коллекция GetPressedKeys. Может быть, ... GetPressedKeys(). Содержит (ключ)? –

+0

Jon Skeet жаль, что я обновил сообщение. – user2879055

ответ

2

KeyboardState.GetPressedKeys() возвращает массив ключей (Keys[]). Он в основном получает все нажатые клавиши, это удобно, если у вас есть какой-то keymanager или для текстового поля или что-то в этом роде.

Что вам нужно что-то вроде этого (как Sebastian L сказал):

KeyboardState ks = Keyboard.GetState(); // get the keyboard's state 
if (ks.IsKeyDown(Keys.A)) 
{ 
    DoSomeReallyInterestingStuff(); 
} 

ks.IsKeyDown(Keys key) возвращает истину, если клавиша нажата. Итак, лучший способ:

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. 
    } 
} 
2

Использование GetState() для нового объекта;)

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

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

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