В чем разница между нажатием клавиши:
-
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