一次鼠标点击注册两次 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();
}
我必须用鼠标左键进行一些变换。这是我的代码的一部分:
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();
}