Objetivo del mouse en un FPS

38

Me gustaría hacer un First Person Shooter y mover la cámara con el mouse. El problema es que cuando el cursor alcanza los límites de la pantalla, la cámara ya no gira. ¿Cómo puedo mantener el mouse centrado y detectar sus movimientos de todos modos?

Oso negro
fuente
3
Esta es una gran pregunta.
El pato comunista

Respuestas:

39

El enfoque general para manejar esto en la programación clásica de Win32 es capturar el delta del mouse en cada cuadro y luego restablecer la posición del mouse al centro de la pantalla. También debes hacer que el cursor del mouse sea invisible, obviamente, ya que de lo contrario las cosas se ven feas.

Puedes hacer lo mismo en XNA, solo trabajas con una interfaz ligeramente diferente. Entonces podrías hacer algo como:

  1. Al iniciar, configure la posición del mouse en el centro de su pantalla con Mouse.SetPosition .
  2. También al inicio, haga que el mouse sea invisible .
  3. Cada cuadro de entrada, tome el estado actual del mouse .
  4. Como sabe que el mouse estaba en el centro, puede usar los valores actuales de X e Y del objeto MouseState que recuperó en el paso 3 para calcular el movimiento delta en ambas dimensiones. Puedes alimentar estos deltas al resto de la lógica de tu juego, como (en tu caso) el código de la cámara.
  5. Restablezca el mouse al centro de la pantalla antes de pasar al siguiente cuadro.

EDITAR: también, aquí hay un tutorial que desenterré a través de una búsqueda en Google de "entrada relativa del mouse XNA" (que es lo que estás preguntando). Creo que es un poco viejo, por lo que algunos de los métodos pueden haber cambiado sus nombres, pero los conceptos aún deberían aplicarse.

EDIT 2: significaba "manejar esto en Win32" y no "manejar esto es Win32", actualizado en consecuencia.

Josh
fuente
Muchas gracias. ¡Esto es exactamente lo que estaba buscando! ;)
BlackBear