我正在用 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破坏了保持键功能,我该如何修复它?:(