I am making a game which has a character moves in 4 directions: up, down, left, right corresponding to W,S,A,D on the keyboard. The problem is when using getch()
to get input from buffer, it always has a pause time after the first single keypress. For instance, when I hold 'A' button, it acts like: A(a short period of time)AAAAAAAAA
.
How do I get rid of that delay time?
Any help would be appreciated.
(Answers in either C
or C
are all acceptable, since I am using graphics.h for this program, which requires C
to run, but I mainly code in C
).
CodePudding user response:
For a non-blocking getch method I personally use this piece of code (in C):
#include <conio.h>
int getch_noblock(){
return _kbhit() ? _getch() : -1;
}
the _kbhit()
method returns 0 if no key are pressed, otherwise returns a number if the keyboard input buffer is not empty.
the _getch()
method read a char from the keyboard buffer.
It works only for Windows.
Documentation:
_khbit()
: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/kbhit?view=msvc-170_getch()
: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/getch-getwch?view=msvc-170
By the way, surfing on the web I found an interesting method, but I've never tried or seen it: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/getch-nolock-getwch-nolock?view=msvc-170
CodePudding user response:
getch() already bypasses buffer:
Prototype
int _getch(void);
Description
_getch obtains a character from stdin. Input is unbuffered, and this
routine will return as soon as a character is available without
waiting for a carriage return. The character is not echoed to stdout.
_getch bypasses the normal buffering done by getchar and getc.
And for your problem, as someone already said, you can use the kbhit()
method