Una delle prime necessità che incontreremo è quella di forzare i nostri sprite ad apparire su schermo secondo un ordine differente da quello delle rispettive chiamate a Draw e DrawString. Per fare questo possiamo assegnare una profondità (il parametro layer depth)per ciascuna chiamata a Draw o DrawString che indica quanto distante dal piano dello schermo sarà disegnata quella entità.
Impostiamo l'ordine di disegno in modo tale che i pixel delle operazioni alle profondità maggiori siano coperti dai pixel delle operazioni a profondità minori:
sprite_batch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
disegniamo un asteroide prima (ma con profondità minore):
sprite_batch.Draw(asteroid, new Rectangle(50, 50, 100, 100), null, Color.White, 0.0f, Vector2.Zero, SpriteEffects.None, 0.0f);
e una scritta dopo (ma con profondità maggiore):
Se avessimo usato la stessa profondità, o non avessimo impostato l'ordinamento nella chiamata a SpriteBatch.Begin, allora il risultato avrebbe rispettato l'ordine delle chiamate a Draw e DrawString:
Rotazione e scala
Possiamo applicare una rotazione ad una chiamata di Draw impostando il parametro appropriato ad un valore diverso da 0.
Come parametro di rotazione possiamo usare qualcosa di dipendente dalla logica interna del gioco, dall'input, o dal tempo. Nel nostro caso usiamo come angolo di rotazione il numero di minuti dall'avvio del gioco; oltre alla rotazione dobbiamo anche indicare (rispetto alle dimensioni del source rectangle) il centro di rotazione, o origine:
sprite_batch.Draw(asteroid, new Rectangle(400, 240, 800, 480),
new Rectangle(0, 0, asteroid.Width * 10, asteroid.Height * 7),
Color.White,
(float)gameTime.TotalGameTime.TotalMinutes,
new Vector2(asteroid.Width * 10, asteroid.Height * 7) / 2,
SpriteEffects.None, 0.0f);
Un esempio un pochino più semplice, in cui non usiamo né il source rectangle né il destination rectangle, bensì la posizione e la scala, è:
dove senza né rotazione né scala avremmo ottenuto:
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: