我正在编写一个目前正在使用ncurses的游戏,我有一个由用户控制的船只和一个“自动化”的游戏,它会慢慢向下移动以杀死你。但是,我正在使用包含所有内容的while循环,每次使用getch()时循环都会暂停并等待输入,这意味着敌人只有在用户输入后才会移动。
c=getch(); //causes a pause until a button is pressed before the next action
if(c==97) //if a is pressed, move position of '*' left
{
dir=-1;
}
if(c==100) //if d is pressed, move position of '*' right
{
dir=1;
}
答案 0 :(得分:2)
由于你正在使用诅咒,只需拨打nodelay
或halfdelay
或timeout
即可使getch
无阻塞,或者在短暂等待后返回,如果没有钥匙被按下了。请参阅inopts(3ncurses)手册页。
答案 1 :(得分:0)
在输入文件描述符(0,又名poll
)上使用STDIN_FILENO
以确定在调用getch
之前是否有待处理的输入。通常你会使用非零超时进行轮询,然后调用会加倍作为游戏循环的时间,因此它以你控制的固定滴答速率运行,而不是像cpu /系统负载允许的那样每秒迭代次数。 / p>