Как определить строчные ключи, используя перечисление ключей в C #? - PullRequest
4 голосов
/ 17 ноября 2011
for (Keys k = Keys.A; k <= Keys.Z; k++)
{
    if (KeyPress(k))
        Text += k;
}

Этот код определяет кнопки, которые я нажал на клавиатуре, и выводит, какая клавиша нажата на консоли. Тем не менее, я нажал «а» на клавиатуре, но он выходит как «А». Как мне это исправить?

Ответы [ 2 ]

9 голосов
/ 17 ноября 2011

Это часто встречающаяся проблема. Проблема в том, что XNA не ориентирована на получение текстового ввода с клавиатуры. Он предназначен для получения текущего состояния каждой клавиши на клавиатуре.

Хотя вы могли бы написать собственный код для проверки таких вещей, как удержание клавиши shift и т. Д., А как насчет клавиатур, которые вы не используете (например, другой язык, другой макет). То, что делает большинство людей, - это получить окна, чтобы сделать это для вас.

Если вы хотите, чтобы текст отображался должным образом, вам нужно воссоздать несколько вещей и получить окна, чтобы сделать это за вас.

См. Сообщение Promit здесь: http://www.gamedev.net/topic/457783-xna-getting-text-from-keyboard/

Использование:

Добавьте его код к вашему решению. Вызови EventInput.Initialize in your game's метод Initialize` и подпишись на его событие:

EventInput.CharEntered += HandleCharEntered;

public void HandleCharEntered(object sender, CharacterEventArgs e)
{
    var charEntered = e.Character;
    // Do something with charEntered
}

Примечание. Если вы разрешаете вводить любые символы (например, иностранные с умлаутами и т. Д.), Убедитесь, что ваш SpriteFont их поддерживает! (Если нет, возможно, просто проверьте, поддерживает ли ваш шрифт его перед добавлением в текстовую строку, или заставьте spritefont использовать специальный недопустимый символ).

0 голосов
/ 18 ноября 2011

После просмотра предоставленного вами кода, это должна быть простая модификация:

[...]
for (Keys k = Keys.A; k <= Keys.Z; k++)
{
  if (KeyPress(k))
  {
      if (keyboardState.IsKeyDown(Keys.LeftShift) || keyboardState.IsKeyDown(Keys.RightShift)) //if shift is held down
          Text += k.ToString().ToUpper(); //convert the Key enum member to uppercase string
      else
          Text += k.ToString().ToLower(); //convert the Key enum member to lowercase string
  }
}
[...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...