Можете ли вы отслеживать более одной мыши с помощью SDL2?
Можно ли работать с двумя мышами через SDL 2?
На SDL_MOUSEBUTTONDOWN
-событие, event.button.which
равно нулю, независимо от того, какая мышь используется.
(У меня есть две мыши, подключенные к моей машине OpenSuse через USB.)
Если да, то как ты можешь это сделать?
1 ответ
SDL вики говорит:
Пожалуйста, обратите внимание, что в этом разделе обсуждаются "мыши" только с понятием графического интерфейса рабочего стола. У вас (обычно) один системный курсор, а ОС скрывает от вас детали оборудования. Если вы подключите 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)
...
Это выводит только движения указателя, вызванные моей мышью, но не те, которые вызваны, например, трекпадом. Если xinput является опцией для вас, исходный код может помочь вам реализовать свой собственный механизм.