Domanda

Vorrei per scorrere un array che copre ogni pixel sul mio schermo. cioè:

        for (int y = 598; y > 0; y--)
        {
            for (int x = 798; x > 0; x--)
            {
                if (grains[x][y])
                {
                    spriteBatch.Draw(Grain, new Vector2(x,y), Color.White);
                }
            }
        }

... la mia pasta è un'immagine di 1x1 pixel che viene disegnata sullo schermo quando il valore di matrice è vero. Funziona decente - ma c'è sicuramente ritardo più schermo copro. C'è un modo migliore per realizzare quello che sto cercando di realizzare?

È stato utile?

Soluzione

Invece di usare X x Y singoli sprite, creare una singola immagine, e impostare i pixel in modo appropriato. Poi basta rendere l'intera immagine come una texture su un singolo sprite.

La matrice irregolare è più probabile non il problema -. Piuttosto gli sprite quasi mezzo milione

Altri suggerimenti

Il problema è che si sta spendendo un sacco di tempo di CPU all'interno del metodo di disegno ogni fotogramma. Il metodo Draw dell'istanza di gioco sarà sempre chiamato il più spesso possibile, sia in tempo fisso oppure no. Dato che, hai sempre voglia di assicurarsi che si sta spendendo meno tempo lì come possibile, il che significa che si desidera posizionare maggior parte del lavoro sulla GPU.

Il nidificati for-loop, nonché tutte le chiamate a spriteBatch.Draw stanno per utilizzare la CPU molto più lento, soprattutto quando il tuo ciclo diventa sempre più grande, il che significa disegno ritardo.

Se si vuole fare calcoli per pixel, per Draw, ogni fotogramma, quindi il modo migliore per andare a questo proposito è quello di mettere il lavoro sulla GPU e utilizzare un pixel shader. Si potrebbe realizzare il proprio problema con la creazione di una struttura delle dimensioni desiderate e passando un array per lo shader che tiene la vostra "on o off" le informazioni, tra gli altri modi per raggiungere lo stesso obiettivo.

Come: Applicare un Pixel Shader per Sprites

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top