是否可以通过SDL 2处理两个鼠标?
在SDL_MOUSEBUTTONDOWN
- 事件中,无论使用何种鼠标,event.button.which
都为零。
(我通过USB在我的OpenSuse机器上连接了两个鼠标。)
如果是的话,你怎么能这样做?
答案 0 :(得分:2)
请注意,此仅讨论"老鼠"与桌面GUI的概念。您(通常)有一个系统光标,操作系统会隐藏您的硬件详细信息。 如果您插入10个鼠标,那么所有10个鼠标都移动了一个光标。对于许多应用程序和游戏而言,这是完美的,而且这个API自诞生以来已经为数百个SDL程序提供了良好的服务。
看起来你可能运气不好,至少使用简单的SDL。由于您使用的是Linux(并且可能使用Xorg),因此您可以了解xinput如何处理多个输入; source code for testing XI2 events可能特别有用。
例如,在我的机器上xinput
显示了一大堆设备:
$ xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB-PS/2 Optical Mouse id=11 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=16 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Video Bus id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Integrated Camera id=10 [slave keyboard (3)]
↳ HID 046a:0011 id=12 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=13 [slave keyboard (3)]
↳ ThinkPad Extra Buttons id=15 [slave keyboard (3)]
然后我可以使用test-xi2
命令为这样的设备(例如我的USB鼠标)获取事件:
$ xinput test-xi2 11
...
EVENT type 17 (RawMotion)
device: 11 (11)
detail: 0
valuators:
flags:
0: -5.25 (-3.00)
1: 12.75 (8.00)
...
这仅输出由鼠标引起的指针移动,但不输出由鼠标引起的指针移动。通过触控板。如果xinput是您的选项,source code可能会让您走上正确的轨道来实现自己的机制。