一次鼠标点击注册两次 C++ / GLUT

One mouse click is registered twice C++ / GLUT

我必须用鼠标左键进行一些变换。这是我的代码的一部分:

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" 两次。这里可能是什么问题?

这意味着您的 mouse() 函数在某处被调用了两次。您很可能将处理程序注册到该函数两次。

glutMouseFunc() 被调用一次,按下鼠标时调用一次,释放鼠标时调用一次。
当按下鼠标时,实际的 state 参数是 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();
}