【发布时间】:2019-04-02 16:51:14
【问题描述】:
我正在尝试为 unix 终端制作一个简单的游戏,用 c 编写。我有 一直在寻找一种方法来轮询键盘,但没有任何运气。
目前我正在使用 ncurses getch() 函数。它工作正常,但如果用户按住一个键,键盘重复将需要一段时间才能开始 - 如果按下任何其他键,它也会停止。这会在玩游戏时出现问题(尤其是在两个游戏都由单个输入线程控制的两个玩家模式下)。
例如,如果玩家 1 按住“a”而玩家 2 按住“b”,我需要轮询键盘并处理这样的输入流:
abababababababab
作为另一个例子,如果玩家 1 按住“a”键并按下“b”键,我需要像这样处理输入:
aaaaaaabaaaaaaaa
这样,同时按下的按键不会互相打断。所以我基本上需要按设定的时间间隔轮询键盘上的键,并创建我自己的按键中继器实现。
在c(有或没有ncurses)中是否有一种方法可以简单地按时间间隔轮询键盘并读取当前正在按下的所有键?从那里我可以设计键盘输入线程来手动管理重复操作。基本上类似于 kbhit,所以我可以检查给定密钥的状态。但这也可以让我轮询箭头键。
【问题讨论】:
-
您知道这在很大程度上取决于所使用的硬件吗?有些键盘无法处理这些类型的按钮按下,并且键盘控制器只会发送已发送到计算机的第一个键?
-
是的,但是必须有一种方法来轮询特定的键 - 然后对于我需要的每个键,我可以一个接一个地轮询。比如:
while true, poll('a'), poll('b'), poll('c'), doactions()