Один клик мыши зарегистрирован дважды C ++ / GLUT - PullRequest
2 голосов
/ 03 мая 2020

Мне нужно сделать какое-то преобразование левой кнопкой мыши. Это часть моего кода:

void mouse(int button, int state, int x, int y) {
if(button == GLUT_LEFT_BUTTON && v*p + xk <= 34 && v*p + yk <= 34 && v*p - xk <= 34 && v*p - yk <= 34) {
    std::cout << "Resized" << std::endl;
    p += 0.02;

    }
    glutPostRedisplay();
}

Но когда я нажимаю один раз на экране, он печатает «Resized» дважды. В чем может быть проблема здесь?

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

glutMouseFunc() вызывается один раз, когда мышь нажата, и один раз, когда мышь отпущена.
Когда мышь нажата, тогда фактический аргумент состояние это GLUT_DOWN. Когда мышь отпущена, тогда аргумент GLUT_UP.

Дополнительно проверьте, если state == GLUT_DOWN:

void mouse(int button, int state, int x, int y) {

    if (state == GLUT_DOWN &&                      // <----
        button == GLUT_LEFT_BUTTON &&
        v*p + xk <= 34 && v*p + yk <= 34 && v*p - xk <= 34 && v*p - yk <= 34) {

        std::cout << "Resized" << std::endl;
        p += 0.02;
    }
    glutPostRedisplay();
}
0 голосов
/ 03 мая 2020

Это означает, что эта функция mouse () вызывается где-то дважды. Скорее всего, вы зарегистрируете обработчик для этой функции дважды.

...