Pregunta

Me gustaría recorrer una matriz que cubre cada píxel en mi pantalla. es decir:

        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);
                }
            }
        }

... mi textura es una imagen de 1x1 píxeles que se dibuja en la pantalla cuando el valor de la matriz es cierto. Se ejecuta decente - pero definitivamente hay retraso de la cubierta de la pantalla más me. ¿Hay una mejor manera de lograr lo que estoy tratando de lograr?

¿Fue útil?

Solución

En lugar de utilizar X x Y sprites individuales, crear una sola imagen, y establece los píxeles apropiadamente. A continuación, sólo hacer que toda la imagen como una textura en un único sprite.

es la matriz escalonada más probable no el problema -. En lugar de los casi medio millón de sprites

Otros consejos

El problema es que se está gastando un montón de tiempo de CPU en el método de dibujo cada cuadro. El método draw de la instancia del juego siempre se llamará tan a menudo como sea posible, ya sea en tiempo fijo o no. Teniendo en cuenta que, siempre quiere asegurarse de que está gastando tan poco tiempo allí como sea posible, lo que significa que desea colocar la mayor parte del trabajo en la GPU.

El anidado de-bucles, así como todas las llamadas a spriteBatch.Draw se va a utilizar la CPU mucho más lento, especialmente cuando el bucle se hace más grande y más grande, lo que significa retraso en el dibujo.

Si usted quiere hacer cálculos por píxel, por sorteo, cada cuadro, entonces la mejor manera de hacerlo es colocar el trabajo en la GPU y utilizar un sombreado de píxeles. Se podría lograr su propio problema mediante la creación de una textura del tamaño que desee y pasar una matriz a la que tiene su shader "dentro o fuera" de la información, entre otras maneras de lograr el mismo objetivo.

Cómo: Aplicar un Pixel Shader de Sprites

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top