2016-11-04 3 views
0

Можно ли обрабатывать два мыши через SDL 2?Можете ли вы отследить более одной мыши с SDL2?

На SDL_MOUSEBUTTONDOWN -event, event.button.which - это нуль, независимо от того, какая мышь используется. (у меня есть две мыши, подключенные к моей машине OpenSuse через USB.)

Если да, то как вы можете это сделать?

+0

Вы имели в виду 'event.which '? event.button, похоже, является uint8, а не объектом. – jhbh

+1

[Вики-страница SDL] (http://wiki.libsdl.org/CategoryMouse) говорит: _ Обратите внимание, что это ТОЛЬКО обсуждает «мышей» с понятием графического интерфейса рабочего стола. У вас (как правило) есть один системный курсор, и ОС скрывает детали оборудования от вас. ** Если вы подключаете 10 мышей, все десять перемещают этот один курсор. ** Для многих приложений и игр это идеально, и этот API уже сорок лет обслуживал сотни SDL-программ. Похоже, вам может быть не повезло , – mindriot

+0

Спасибо, человек. Вы можете разместить это как ответ, если хотите. – user1511417

ответ

2

The SDL wiki говорит:

Пожалуйста, обратите внимание, что это только обсуждает «мышей» с понятием графического интерфейса рабочего стола. У вас (как правило) есть один системный курсор, и ОС скрывает детали оборудования от вас. Если вы подключите 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 может помочь вам на правильном пути реализовать свой собственный механизм.

 Смежные вопросы

  • Нет связанных вопросов^_^