2.6 Qualche parola in più sulle Texture – Parte 1

4
Il tuo voto: Nessuno Media: 4 (4 voti)

 

Abbiamo visto che per caricare lo sfondo, che è un’immagine JPG in questo caso, l’abbiamo caricata in una variabile di tipo Texture2D. Vale la pena di spiegare un po’ meglio cosa è una Texture. Non starò qui ad approfondire tutti i formati (che son proprio tanti), ma certamente dobbiamo capire come sia rappresentato e trattato il formato più comune che ci servirà nel corso di questo primo progetto didattico.
 
Una Texture un insieme di unità grafiche minime (dette texel). Un texel, per farla semplice, è la descrizione completa di un pixel sullo schermo. Nel caso di immagini normali questa descrizione fondamentalmente espone (e ci permette di manipolare) una classe Color per ogni texel. A che ci serve saperlo? Ad un sacco di cose, dalla semplice manipolazione dell’immagine fino al rilevamento della collisione tra texture (per essere molto concisi!).
 
Allora a questo punto è il caso di fare un po’ di esperimenti pratici con la manipolazione delle texture. Per prima cosa impariamo a manipolare l’immagine in maniera semplice: vediamo come possiamo capovolgere l’immagine di fondo usata prima manipolando il contenuto della nostra variabile.
 
Cominciamo con il creare un nuovo metodo chiameremo CapovolgiSfondo (lo aggiungo dopo il metodo Draw):
 
        private void CapovolgiSfondo()
        {
            int Altezza = sfondo.Height;
            int Larghezza = sfondo.Width;
            Color[] pixel0 = new Color[Altezza * Larghezza];
            Color[] pixel1 = new Color[Altezza * Larghezza];
            sfondo.GetData<Color>(pixel0);
            for (int i = 0; i < pixel0.Length; i++)
            {
                pixel1[((Altezza * Larghezza) - 1) - i] = pixel0[i];
            }
            sfondo = new Texture2D(graphics.GraphicsDevice, Larghezza, Altezza);
            sfondo.SetData<Color>(pixel1);
        }
 
Cosa faccia questo metodo è abbastanza evidente, quello che va notato è che debbo creare una nuova Texture che assegno alla nostra variabile, questo perché quella esistente è già stata visualizzata e quindi non è più possibile usare il metodo SetData. Ora diciamo che premendo X (sulla tastiera o sul gamepad) vogliamo che l’immagine si capovolga. Aggiungiamo nella nostra Update, prima o dopo il test che attiva il cambio di risoluzione, questo codice:
 
            if (((statoPrecedenteDelGamepad.Buttons.X == ButtonState.Released) &&
                (statoCorrenteDelGamepad.Buttons.X == ButtonState.Pressed)) ||
                (statoPrecedenteDellaTastiera.IsKeyUp(Keys.X) &&
                statoCorrenteDellaTastiera.IsKeyDown(Keys.X)))
            {
                CapovolgiSfondo();
            }
 
Ed ora tutto quel che dobbiamo fare è premere F5 per eseguire il nostro gioco e provare cosa capita premendo la X!

Continua...