Блокировка номера XNA влияет на ввод

У меня есть прерывание, которое на клавиатуре дает мне координирующую клавишу. Когда блокировка номера включена, ключи отображаются как Numpad1, Numpad2 и т. Д. Когда блокировка номера выключена, клавиши numpad превращаются в End, Left, Right, Up, PageLock... Я не могу, чтобы это происходило, потому что мне нужно сохранить эти клавиши (влево, вправо..) в качестве фактических клавиш со стрелками. Скорее всего, на вход вообще не влияет блокировка номера. Тем не менее, я не могу смягчить это, поскольку я получаю информацию от XNA напрямую. Может ли кто-то еще подтвердить, что это происходит в XNA 3.1 на VS 2008?

3 ответа

XNA внутренне использует функцию win32 GetKeyboardState определить состояние клавиатуры. Эта функция не может различать цифровую клавиатуру, клавиши со стрелками и группу вставок.

Видимо, вы можете различать ключи с помощью WM_KEYDOWN сообщение (и его друзья).

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

(Лично я бы порекомендовал просто изменить схему управления. Или просто наблюдать за состоянием num-lock пользователя. Вообще говоря, это плохая идея - взять на себя функции чего-то вроде ключа num-lock!)

Я еще не проверил это, но Райан Рубли из Morpheus Development опубликовал здесь решение, которое стоит проверить:

http://xboxforums.create.msdn.com/forums/p/90944/545124.aspx

Вот полностью рабочее решение для использования цифровых клавиш независимо от статуса numlock и без включения numlock.

Создано Райаном Рубли 9-5-2011

Вы можете определить 2 ключа для каждого действия в вашей игре.

Например, вместо Keys.Left для перемещения влево, выделите для него еще один ключ (Numpad4).

В своем коде проверки ввода вы просто проверите, нажата ли любая из этих 2 клавиш:

Например:

if (IsKeyPressed(Keys.Numpad4) || IsKeyPressed(Keys.Left)
{
    // Do some action.
}

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

Другие вопросы по тегам