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

时间:2016-11-04 11:31:21

标签: c++ mouseevent sdl-2

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

SDL_MOUSEBUTTONDOWN - 事件中,无论使用何种鼠标,event.button.which都为零。 (我通过USB在我的OpenSuse机器上连接了两个鼠标。)

如果是的话,你怎么能这样做?

1 个答案:

答案 0 :(得分:2)

The SDL wiki说:

  

请注意,此仅讨论"老鼠"与桌面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可能会让您走上正确的轨道来实现自己的机制。