ncurses でボンバーマン ゲームをプログラミングしていて、問題が発生しました。
プレーヤーにキーを押し続けて一定の動きをさせる機能を提供したいと考えています。
getch() の非ブロック モードでは正常に動作しますが、ゲーム ループでの待機を実装するまでのみです。
struct timeval start, end;
long mtime, seconds, useconds;
long frame = 5000; /* usec */
while ( m_state == STATE_PLAYING ) {
/* tick driving */
gettimeofday(&start, NULL);
Tick();
Draw();
gettimeofday(&end, NULL);
seconds = end.tv_sec - start.tv_sec;
useconds = end.tv_usec - start.tv_usec;
mtime = ((seconds) * (1000 * 1000) + useconds ) + 500;
if(tickdriven) usleep( frame - mtime );
}
ティックでは、キーをロードしてから処理します。しかし、tickdriven を true に設定すると、ホールド キーの機能が壊れます :( 突然、動き続けるためにもう一度キーを押さなければなりません。私の質問は、uspeep がホールド キーの機能を壊した理由と、それを修復するにはどうすればよいですか? :(