2016-11-04 59 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可能會幫助您實現自己的機制。