Правильно полученная клавиша для чата в XNA - PullRequest
2 голосов
/ 05 марта 2012

Итак, я собираюсь перейти прямо к этому, я пытаюсь создать систему чата в игре XNA, которую я делаю. Я легко могу понять, какие клавиши нажимаются НО У меня нет возможности узнать, что на самом деле печатается. Мне кажется, они говорят: OemShifthello billOemPeriod OemShifthow are youOemQuestion, что должно выглядеть как Hello bill. How are you? (или что-то в этом роде).

Какой лучший способ справиться со всем этим?

Ответы [ 3 ]

4 голосов
/ 05 марта 2012

Для ПК нет ничего встроенного в платформу XNA, что делает это простым (это другая история для WP7 и Xbox).

Этот пост довольно обобщенно описывает все ваши варианты.

http://dream -forever.net / Блог / 2011/08/29 / посаживания истинно клавиатуры для ввода в-ваш-XNA-игры /

В основном

  1. Создание большого словаря с символами для сопоставлений клавиш
  2. Присоединяйтесь к событиям KeyDown, KeyUp, KeyPress XNA Game Forms
  3. Использовать интерфейс IMessageFilter
  4. Используйте SetWindowsHookEx, чтобы получить ключевые события

У каждого из этих методов есть свои плюсы и минусы, и автор поста предоставил образец, который вы можете загрузить.

Проводя некоторые исследования, я также натолкнулся на библиотеку от ребят из Nuclex. Как правило, они создают довольно надежные решения, поэтому определенно стоит это проверить.

http://www.nuclex.org/blog/announcements/105-new-component-nuclex-input

Важно помнить, что вы находитесь на ПК, и эта ЛЮБАЯ библиотека будет работать там (с некоторыми изменениями / настройками). Так что не ограничивайтесь просмотром только образцов, связанных с XNA. Сэмплы для DirectInput, SlimDX, SharpDX и т. Д. Также могут быть опциями, для добавления в ваш проект может потребоваться немного дополнительной работы.

2 голосов
/ 05 марта 2012

Итак, простое решение, которое я использовал, заключалось в том, чтобы подключить клавиатуру Win32 и позволить Windows переводить то, что набирается. Он на моем другом компьютере, но в основном использует это решение на Gamedev.net . (пост №10)

Удивительно, что если вы используете [DllImport("user32.dll", CharSet=CharSet.Unicode)] (часть CharSet для всех импортов .dll), вы можете получить локализованный ввод с клавиатуры!

Так что разместите это где-нибудь, зарегистрируйте события в Initialize, и все! Надеюсь, что это работает для вас.

Редактировать

Весь этот бизнес с Win32 может показаться пугающим, но не позволяйте этому помешать вам использовать его - это всего лишь вопрос копирования и вставки, и вы можете запустить его буквально за 2 минуты.

1 голос
/ 05 марта 2012

Полагаю, вы запрашиваете ввод с клавиатуры через keyState.GetPressedKeys()?

Вы должны будете использовать оператор switch где-нибудь в своем коде, чтобы отобразить элементы перечисления Keys в реальные символы. Метод ToString() отлично работает с буквами, но не с символами, так как они указаны по имени.

switch (keyPressed)
{
    case Keys.OemPeriod :
        character = '.';
        break;
    case Keys.OemQuestion :
        character = '?';
        break;

    // More cases
}

Будьте осторожны, так как клавиатуры разные. Как вы правильно сказали: Ключ! = Символ. Некоторые ключи на другом оборудовании могут быть связаны с совершенно другим символом.

...