Ловить мышь? - PullRequest
       8

Ловить мышь?

3 голосов
/ 04 сентября 2010

Я использую GLUT и разрабатываю игру FPS.Мне нужен способ захвата мыши, чтобы камера продолжала двигаться, потому что сейчас, когда положение мыши превышает предел монитора, невозможно рассчитать изменение X или Y. Как я могу «заманить» мышьGLUT?

Спасибо

1 Ответ

2 голосов
/ 05 сентября 2010

Я бы рекомендовал вместо этого использовать готовый двигатель, такой как OGRE 3D , но если вы действительно хотите заново изобрести колесо, вот как ...

Во всех известных мне случаях игры PC FPS «ловят» указатель, регистрируя обратный вызов движения мыши, отмечая относительное движение, а затем деформируя указатель обратно в центр окна.

Вот некоторый код, который я написал для добавления ввода мышью в образец таблицы для пинг-понга в OpenGL с курсом C ++ год или два назад:

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);

Он отслеживает только вертикальное движение, но добавление горизонтального тривиально.

...