Scopo del mouse in un FPS


38

Vorrei realizzare uno sparatutto in prima persona e spostare la fotocamera con il mouse. Il problema è che quando il cursore raggiunge i limiti dello schermo, la fotocamera non gira più. Come posso mantenere il mouse centrato e rilevare comunque i suoi movimenti?


3
Questa è un'ottima domanda
Il comunista Duck il

Risposte:


39

L'approccio generale alla gestione di questo nella classica programmazione Win32 è quello di catturare il delta del mouse ogni frame e quindi ripristinare la posizione del mouse al centro dello schermo. Volete anche rendere invisibile il cursore del mouse, poiché altrimenti le cose sembrano brutte.

Puoi fare la stessa cosa in XNA, devi solo lavorare con un'interfaccia leggermente diversa. Quindi potresti fare qualcosa del tipo:

  1. All'avvio, imposta la posizione del mouse al centro dello schermo con Mouse.SetPosition .
  2. Inoltre all'avvio, rendere invisibile il mouse .
  3. Ogni frame di input, afferra lo stato corrente del mouse .
  4. Poiché sai che il mouse era al centro, puoi utilizzare i valori X e Y correnti dell'oggetto MouseState che hai recuperato nel passaggio 3 per calcolare il movimento delta in entrambe le dimensioni. Puoi fornire questi delta al resto della tua logica di gioco, come (nel tuo caso) il codice della videocamera.
  5. Ripristina il mouse al centro dello schermo prima di passare al fotogramma successivo.

EDIT: Inoltre, ecco un tutorial che ho scavato tramite una ricerca di Google per "input mouse relativo XNA" (che è quello che stai chiedendo). È un po 'vecchio, penso, quindi alcuni dei metodi potrebbero aver cambiato il loro nome, ma i concetti dovrebbero comunque essere applicati.

EDIT 2: significava "gestire questo in Win32" e non "gestire questo è Win32", aggiornato di conseguenza.


Grazie mille. Questo e 'esattamente quello che stavo cercando! ;)
BlackBear il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.