2010-09-04 5 views
3

J'utilise GLUT et je développe un jeu FPS. J'ai besoin d'un moyen de piéger la souris pour que la caméra continue de bouger car maintenant la position de la souris dépasse la limite du moniteur, il n'y a aucun moyen de calculer le changement de X ou de Y. Comment puis-je "piéger" la souris SURABONDANCE?Piégeage de la souris?

Merci

+1

Drôle de titre ... hehehe ... –

+5

Utilisez un piège à souris. Duh. – BoltClock

+1

@BoltClock: Ne pas oublier le fromage. –

Répondre

3

Je vous recommande d'utiliser un moteur ready-made comme OGRE 3D à la place, mais si vous voulez vraiment réinventer la roue, voici comment ...

Dans tous les cas, je suis au courant , Les jeux PC FPS "piègent" le pointeur en enregistrant un rappel de mouvement de la souris, en notant le mouvement relatif, puis en déformant le pointeur au centre de la fenêtre.

est ici un code que j'ai écrit à ajouter l'entrée de la souris sur une table de ping-pong échantillon dans un OpenGL avec C++ cours d'un an ou deux:

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

Il ne suit que le mouvement vertical, mais en ajoutant horizontal est trivial .

+0

Quel est le point de "si (fabs (TABLE_X/2 - sx)> 25 || fabs (TABLE_Y/2 - sy)> 25)"? Pourquoi ne pas recentrer la souris à chaque image? – Calvin1602

+0

Techniquement, les images et les mouvements de souris ne sont pas la même chose. Quoi qu'il en soit, je ne me souviens pas exactement, mais je pense que c'est pour éviter que la surcharge de XWarpPointer (que glutWarpPointer utilise sous Linux) ne devienne un problème. Le timing basé sur l'intervalle fourni avec le code de l'échantillon a grandement amplifié les problèmes de performance présents et je n'ai pas eu le temps de le réécrire complètement. – ssokolow

Questions connexes