是否可以通過SDL 2處理兩個鼠標?您可以使用SDL2跟蹤多個鼠標嗎?
對於SDL_MOUSEBUTTONDOWN
-event,無論使用何種鼠標,event.button.which
均爲零。 (我的兩臺鼠標通過USB連接在我的OpenSuse機器上。)
如果是,您怎麼辦?
是否可以通過SDL 2處理兩個鼠標?您可以使用SDL2跟蹤多個鼠標嗎?
對於SDL_MOUSEBUTTONDOWN
-event,無論使用何種鼠標,event.button.which
均爲零。 (我的兩臺鼠標通過USB連接在我的OpenSuse機器上。)
如果是,您怎麼辦?
請注意,此只討論「老鼠」與桌面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可能會幫助您實現自己的機制。
你是不是指'event.which'? event.button似乎是一個uint8而不是一個對象 – jhbh
[SDL wiki](http://wiki.libsdl.org/CategoryMouse)說:_請注意,這僅僅討論了帶有桌面GUI概念的「鼠標」。你(通常)有一個系統光標,操作系統隱藏你的硬件細節。 **如果你插入10只老鼠,那麼所有十個都會移動一個遊標**。對於許多應用程序和遊戲來說,這是完美的,而且這個API自誕生以來已經爲數百個SDL程序提供了很好的服務._看起來你可能不走運。 – mindriot
謝謝mindriot。如果您願意,您可以將其作爲答案張貼。 – user1511417