随着 Valve 在 Linux 上发布游戏,我一直在玩左4死2和传送门 2,当我不启用原始鼠标输入选项。我在 Linux 上玩过的另一款游戏,星界,在 Linux 上也存在类似的鼠标滞后现象。我一直在寻找有关原始输入的信息,但还是有点困惑。
据我所知(例如这里),获取原始硬件输入的常用方法是读取 */dev/input/event** 文件。问题是,在我的系统 (Fedora 20) 上,这些文件只有 root 组才能读取,而且我没有创建链接帖子中提到的 udev 规则。
所以我的问题是:
游戏如何读取鼠标的原始输入?还有其他方法吗/dev/input
?
有没有跨平台的方法可以做到这一点?
附加问题(无论如何我都会自己查找 =) ):
哪种操作系统机制提供“标准”输入?例如,SDL 或其他库依靠什么来从硬件收集输入?
附言:传送门2原始鼠标输入到目前为止,该选项在测试版中实际上不起作用,这就是我开始研究这个问题的原因。不过,它在 L4D2 中确实有效。
答案1
在 Linux 中“一切皆文件”,但这并不意味着它是硬盘上的实际“文件”,需要 IOP 才能读取。
在 Linux 中,有多种方法可以从鼠标获取输入,最常见的方法是 envdev 和 mousedev。您还可以使用 X 窗口参与系统来读取鼠标输入。对于键盘等其他设备,您可以使用通用 USB 设备的 keydev usbcore 等。
Rawinput 表示游戏/应用程序从设备读取原始输入数据,而不是在操作系统处理后获取数据。使用“处理后的输入”时,操作系统特定的鼠标设置(例如加速度、光标速度和其他会影响设备感知行为的设置)将影响游戏中指针的行为。
您也可以在 Windows 游戏/应用程序中注意到这一点,有些游戏可能使用操作系统默认输入界面,有些游戏可能使用 DirectX(其旨在在单个 API 下统一声音、图形和输入),有些游戏可能直接访问鼠标并自行处理所有计算。
一般来说,这完全取决于您想要做多少工作,以及您想要或需要对输入进行多少控制。处理原始输入时,所有与位置、加速度和其他因素有关的计算都需要在您的应用内完成,如果您不想处理它,您可以让您使用的操作系统/API 完成这些计算,并只告诉您位置的相对变化。