2016-11-04 61 views
0

是否可以通过SDL 2处理两个鼠标您可以使用SDL2跟踪多个鼠标吗?

对于SDL_MOUSEBUTTONDOWN -event,无论使用何种鼠标,event.button.which均为零。 (我的两台鼠标通过USB连接在我的OpenSuse机器上。)

如果是,您怎么办?

+0

你是不是指'event.which'? event.button似乎是一个uint8而不是一个对象 – jhbh

+1

[SDL wiki](http://wiki.libsdl.org/CategoryMouse)说:_请注意,这仅仅讨论了带有桌面GUI概念的“鼠标”。你(通常)有一个系统光标,操作系统隐藏你的硬件细节。 **如果你插入10只老鼠,那么所有十个都会移动一个游标**。对于许多应用程序和游戏来说,这是完美的,而且这个API自诞生以来已经为数百个SDL程序提供了很好的服务._看起来你可能不走运。 – mindriot

+0

谢谢mindriot。如果您愿意,您可以将其作为答案张贴。 – user1511417

回答

2

The SDL wiki说:

请注意,此只讨论“老鼠”与桌面GUI的概念。你(通常)有一个系统光标,操作系统隐藏你的硬件细节。 如果你插入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可能会帮助您实现自己的机制。