Souris vise dans un FPS


38

Je voudrais faire un tir à la première personne et déplacer la caméra avec la souris. Le problème est que lorsque le curseur atteint les limites de l'écran, la caméra ne tourne plus. Comment puis-je garder la souris centrée et détecter ses mouvements quand même?


3
c'est une excellente question.
Le canard communiste

Réponses:


39

L’approche générale pour gérer cela dans la programmation Win32 classique consiste à capturer le delta de la souris à chaque image, puis à réinitialiser la position de la souris au centre de l’écran. Vous voulez aussi rendre le curseur de la souris invisible, bien sûr, sinon les choses paraissent laides.

Vous pouvez faire la même chose dans XNA, vous travaillez simplement avec une interface légèrement différente. Donc, vous pourriez faire quelque chose comme:

  1. Au démarrage, placez la souris au centre de votre écran avec Mouse.SetPosition .
  2. Également au démarrage, rendez la souris invisible .
  3. Chaque image d'entrée, prenez l'état actuel de la souris .
  4. Puisque vous savez que la souris était au centre, vous pouvez utiliser les valeurs X et Y actuelles de l' objet MouseState que vous avez récupéré à l'étape 3 pour calculer le mouvement delta dans les deux dimensions. Vous pouvez intégrer ces deltas au reste de la logique de votre jeu, tel que (dans votre cas) le code de la caméra.
  5. Réinitialisez la souris au centre de l'écran avant de passer à l'image suivante.

EDIT: De plus, voici un tutoriel que j'ai découvert dans une recherche Google pour "Entrée de souris relative XNA" (ce dont vous parlez). Je pense que c'est un peu vieux, alors le nom de certaines méthodes a peut-être été changé, mais les concepts devraient toujours s'appliquer.

EDIT 2: Signifiait "gérer ceci dans Win32" et non pas "manipuler c'est Win32", mis à jour en conséquence.


Merci beaucoup. Ceci est exactement ce que je cherchais! ;)
BlackBear
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.