Prendi ad esempio un gioco di sidescrolling di base. Mentre il giocatore si sposta di lato, la telecamera esegue la panoramica per seguirli. Ciò significa che gli oggetti nel mondo non corrispondono necessariamente al punto in cui si trovano sullo schermo, poiché lo schermo e il mondo si spostano l'uno rispetto all'altro.
Ecco un esempio: diciamo che lo schermo è 100px * 100px quadrati (per qualche motivo). Si posiziona un oggetto in posizione (50, 0), quindi è ora al centro e nella parte inferiore dello schermo. Ora dì che sposti il giocatore a destra e l'intero schermo si sposta per seguire il giocatore. Ciò significa che l'oggetto che hai posizionato in precedenza dovrebbe essere stato spostato a sinistra sullo schermo. Quindi è ancora a (50, 0) nel mondo, dal momento che in realtà non si sposta rispetto al resto dello scenario, ma dovrebbe ora essere disegnato a, diciamo, (10, 0) sullo schermo, dal quale parte del mondo che lo schermo sta guardando è cambiato. Questa è la differenza tra "worldspace" (dove un oggetto è nel mondo) e "screenpace" (dove l'oggetto è disegnato sul display attuale).
Quando si tenta di disegnare con un SpriteBatch
, per impostazione predefinita si assume che le coordinate dello spazio del mondo siano le stesse delle coordinate dello schermo: quando si dice "disegnare in (50, 0)", verrà disegnato l'oggetto su (50, 0) sullo schermo. Anche se la telecamera si muove, attirerà sempre (50, 0) sullo schermo, così come la telecamera panoramica, l'oggetto seguirà e rimarrà nella stessa posizione sullo schermo.
Visto che in genere non si vuole che si danno il SpriteBatch
una matrice proiezione, che è una matrice di trasformazione che indica come convertire screenspace coordinate a WORLDSPACE coordinate, e viceversa. In questo modo, quando dici al batch "draw at (50, 0)", può guardare la matrice ottenuta dalla telecamera e vedere che, dal momento che la telecamera si è mossa, (50, 0) nel mondo significa in realtà (10, 0) sullo schermo e attirerà il tuo sprite nel posto giusto.
Grande spiegazione. –