诱捕鼠标?

时间:2010-09-04 19:41:29

标签: c++ c opengl glut

我正在使用GLUT并开发一款FPS游戏。我需要一种捕捉鼠标的方法,以便摄像机继续移动,因为当鼠标位置超过监视器限制时,无法计算X中的变化或Y中的变化。我怎样才能“捕获”鼠标GLUT?

由于

1 个答案:

答案 0 :(得分:2)

我建议使用像OGRE 3D这样的现成引擎,但如果你真的想要重新发明轮子,那么这就是......

在所有情况下我都知道,PC FPS游戏通过注册鼠标动作回调“捕获”指针,注意相对运动,然后将指针扭曲回窗口中心。

这是我写的一些代码,用于在一年或两年前用C ++课程在OpenGL中将鼠标输入添加到示例乒乓表:

void resetPointer() {
    glutWarpPointer(TABLE_X/2, TABLE_Y/2);
    lastMousePos = TABLE_Y/2;
}

void mouseFunc(int sx, int sy) {
    if (!started) { return; }
    int vertMotion = lastMousePos - sy;
    lastMousePos = sy;
    player1.move(vertMotion);

    // Keep the pointer from leaving the window.
    if (fabs(TABLE_X/2 - sx) > 25 || fabs(TABLE_Y/2 - sy) > 25) {
        resetPointer();
    }
}

// This goes in with your "start new game" code if you want a menu
resetPointer();
glutSetCursor(GLUT_CURSOR_NONE);
glutPassiveMotionFunc(mouseFunc);

它只跟踪垂直运动,但添加水平是微不足道的。