你能用SDL2跟踪多个鼠标吗?

Can you track more than one mouse with SDL2?

本文关键字:鼠标 跟踪 SDL2      更新时间:2023-10-16

是否可以通过SDL 2处理两个鼠标 ?

对于SDL_MOUSEBUTTONDOWN -事件,无论使用什么鼠标,event.button.which都为零。(我有两个鼠标通过USB连接在我的OpenSuse机器上。)

如果是,你怎么能做到?

SDL wiki说:

请注意,这里只讨论"鼠标"与桌面GUI的概念。你(通常)有一个系统光标,操作系统对你隐藏硬件细节。如果插入10个鼠标,所有的鼠标都会移动那个光标。对于许多应用程序和游戏来说,这是完美的,这个API自诞生以来已经很好地服务于数百个SDL程序。

看起来您可能不太幸运,至少使用普通的SDL。由于您使用的是Linux(并且可能使用Xorg),您可以了解一下xinput如何处理多个输入;用于测试XI2事件的源代码可能特别有用。

例如,在我的机器上,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)
...

这只输出由鼠标引起的指针移动,而不输出由触控板引起的移动。如果您可以选择输入输入,那么源代码可以帮助您正确地实现自己的机制。