я работаю на небольшой игровой движок и не может решить, как иметь дело с вводом с клавиатуры. До сих пор я был обработки ввода с клавиатуры, ловя WM_KEYDOWN
и WM_KEYUP
сообщения от оконной процедуры, однако это, мне кажется, как не отличное решение для обработки ввода с клавиатуры.игры ввод с клавиатуры и события
Я действительно люблю Infinity Ward 3.0 двигателя, где вы можете легко изменить каждый ключ действие с помощью простого конфигурационного файла или с помощью внутриигровой консоли. Я хотел бы сделать это схоже.
Вот отрывок из конфигурационного файла из IW 3.0 Двигатель:
bind TAB "+scores"
bind ESCAPE "togglemenu"
bind SPACE "+gostand"
bind ALT "gocrouch"
bind CTRL "goprone"
bind SHIFT "+breath_sprint"
bind 1 "weapnext"
bind 2 "weapnext"
bind 4 "+smoke"
bind 5 "+actionslot 3"
bind 6 "+actionslot 4"
bind 7 "+actionslot 2"
bind ` "toggleconsole"
bind A "+moveleft"
bind B "mp_QuickMessage"
bind D "+moveright"
bind E "+leanright"
Вы можете даже назначить другие действия для клавиш, как сказать что-то в чате:
bind F3 "say Hello, World!"
У меня уже есть конфигурационный файл из которого я читаю при запуске игры, и после этого я инициализирую все клавиши действий. Он работает, но действительно неудобно назначать все ключи всем действиям. Для ключей, как A, B, C, D, E
..Это легко, потому что каждый код символов ASCII соответствует WM_KEYDOWN/UP
сообщения, но и для ключей, как SPACE, CTRL, SHIFT
он не делает.
Так что мои вопросы:
- Каков наилучший способ поймать ключи? (Raw ввода/окно сообщений/Get (назначить) KeyState)
- Как я могу сделать это легко для назначения ключей из файла конфигурации для действий?
- Это хорошая идея, чтобы сделать некоторые менеджера событий?
- Если да, то как должна выглядеть структура менеджера событий?
- Должен ли я назначить номера для всех ключей и соответствующих действий, или строки, как "PlayerJump", "PlayerForward", "FireAction" ...?
Q: * «Как я могу [...] назначить X на Y?» * A: использовать ассоциативный контейнер для поиска. – IInspectable
До сих пор я даже не знал, для чего подходит карта! Спасибо! :) – ProXicT