В чем разница между нажатием клавиши:
-
GetKeyState() -
GetAsyncKeyState() -
getch()?
Когда я должен использовать один над другим?
В чем разница между нажатием клавиши:
GetKeyState()GetAsyncKeyState()getch()?Когда я должен использовать один над другим?
GetKeyState() и GetAsyncKeyState() являются специфичными для Windows API, а getch() работает с другими компиляторами, не связанными с Windows.
GetKeyState() получает статус ключа, возвращенный из очереди сообщений потока. Состояние не отражает состояние уровня прерывания, связанного с оборудованием.
GetAsyncKeyState() указывает, был ли нажат ключ с момента последнего вызова GetAsyncKeyState(), и будет ли текущий ключ вверх или вниз. Если установлен самый старший бит, клавиша опущена, и если установлен младший значащий бит, клавиша была нажата после предыдущего вызова GetAsyncKeyState().
То, что я видел на практике, состоит в том, что если вы удерживаете нажатой клавишу и назначаете поведение при нажатии клавиши, если вы используете GetKeyState(), поведение будет вызываться больше раз, чем если бы вы использовали GetAsyncKeyState().
В играх я предпочитаю использовать GetAsyncKeyState().
(Вы также можете проверить дополнительную информацию в блоге MSDN).
Подумайте, что означает асинхронность.
GetAsyncKeyState() получает состояние ключа в асинхронном режиме, то есть без ожидания чего-либо, т.е. сЕЙЧАС.
GetKeyState() получает состояние ключа синхронно, это состояние ключа ключа, который вы собираетесь прочитать с помощью getch(). Он ставится в очередь в буфере клавиатуры вместе с самими клавишами.
В качестве примера представьте, что было напечатано следующее, но еще не прочитано:
GetAsyncKeyState() вернет ctrl pressed
GetKeyState() will return H нажал until you call getch() '
GetKeyState() будет возвращать I pressed, пока вы не позвоните getch()
Затем GetKeyState() будет возвращать shift pressed, 1 pressed до тех пор, пока вы не вызовете getch(), что вернет ! (результат нажатия shift + 1)
GetKeyState() вернется ctrl pressed