如何使用 ncurses 修复箭头键的延迟?
How do I fix the delay on arrow keys with ncurses?
我正在尝试使用箭头键移动光标,但使用这些键时有一个键的延迟。我读到它首先发送转义序列,所以这可能就是为什么,有什么办法可以解决它吗?
int main() {
int ch,x=0,y=0;
initscr();
noecho();
cbreak();
keypad(stdscr, TRUE);
refresh();
while(true) { /*main loop*/
ch=getch();
switch (ch) {
case KEY_UP:
y--;
move(y,x);
break;
case KEY_DOWN:
move(y,x);
y++;
break;
case KEY_RIGHT:
move(y,x);
x++;
break;
case KEY_LEFT:
move(y,x);
x--;
break;
case 27:
goto clean;
default:
addch(ch);
break;
}
}
clean:
endwin();
return 0;
}
谢谢!
如评论中所述,示例程序的问题在于,在某些情况下,它会在 移动光标后调整坐标 ,与 [=10= 的情况不一致], 调整坐标 before 移动光标.
为了保持一致,将 move(y,x)
调用 放在 y++
、x++
和 x--
语句之后。
我正在尝试使用箭头键移动光标,但使用这些键时有一个键的延迟。我读到它首先发送转义序列,所以这可能就是为什么,有什么办法可以解决它吗?
int main() {
int ch,x=0,y=0;
initscr();
noecho();
cbreak();
keypad(stdscr, TRUE);
refresh();
while(true) { /*main loop*/
ch=getch();
switch (ch) {
case KEY_UP:
y--;
move(y,x);
break;
case KEY_DOWN:
move(y,x);
y++;
break;
case KEY_RIGHT:
move(y,x);
x++;
break;
case KEY_LEFT:
move(y,x);
x--;
break;
case 27:
goto clean;
default:
addch(ch);
break;
}
}
clean:
endwin();
return 0;
}
谢谢!
如评论中所述,示例程序的问题在于,在某些情况下,它会在 移动光标后调整坐标 ,与 [=10= 的情况不一致], 调整坐标 before 移动光标.
为了保持一致,将 move(y,x)
调用 放在 y++
、x++
和 x--
语句之后。