Кнопка мыши SDL несовместима

У меня возникла любопытная небольшая проблема с опросом событий мыши с использованием SDL.

        if(event.type == SDL_MOUSEBUTTONDOWN) {
            printf("click %d\n", event.button.button);
        }
        else if(event.type == SDL_MOUSEMOTION) {
            printf("move %d\n", event.button.button);


        }

Если я нажимаю и удерживаю правую кнопку мыши при перемещении мыши, я получаю:

click 3 // = SDL_BUTTON_RIGHT
move 4  // != SDL_BUTTON_RIGHT !
move 4
...

то есть SDL_MOUSEBTTONDOWN устанавливает для кнопки button.button значение 3 для правой кнопки мыши, а SDL_MOUSEMOTION устанавливает для нее значение 4.

Кто-нибудь знает, почему это может происходить?


person user1483596    schedule 17.10.2012    source источник


Ответы (2)


Вы должны использовать event.motion для SDL_MOUSEMOTION, а не event.button. Кроме того, event.motion.state - это битовая маска, вы должны запрашивать ее с помощью event.motion.state & SDL_BUTTON(3).

person avakar    schedule 17.10.2012
comment
Это действительно работает, хотя из краткого эксперимента кажется, что event.button = event.motion.state всегда. Раздражает правый щелчок event.button.button := SDL_BUTTON_RIGHT (= 3) и движение правой кнопкой мыши event.button.button := SDL_BUTTON(SDL_BUTTON_RIGHT) (= 4...), так что это не так чисто, как мне бы хотелось. (Немного раздражает, что не всегда то или другое... - person user1483596; 17.10.2012
comment
Это потому, что при движении у вас может быть несколько кнопок мыши (это состояние ИЛИ-маски). С событием нажатия кнопки или вверх невозможно иметь несколько кнопок, поэтому он просто возвращает «индекс» кнопки, а не маску. Не знаю, как тогда, но сейчас у масок есть свои константы. SDL_BUTTON_RMASK = SDL_BUTTON(SDL_BUTTON_RIGHT) - person Mark Jeronimus; 02.08.2019

event.button.button используется для события клика, а не для движения, я не понимаю цель этого кода?

person Solidus    schedule 17.10.2012
comment
Я просто проверяю, какая (если есть) кнопка нажата во время движения. Я бы подумал, что event.button.button сохранит эту информацию (она отлично работает для левой кнопки мыши - event.button.button равен 1 в каждом предложении if). - person user1483596; 17.10.2012