Question

Je voudrais itérer un tableau qui couvre tous les pixels sur mon écran. i.e.:

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

... ma texture est une image de 1x1 pixel qui est dessiné à l'écran lorsque la valeur du tableau est vrai. Il fonctionne bien - mais il y a certainement lag plus je couvre l'écran. Y at-il une meilleure façon d'accomplir ce que je suis en train de réaliser?

Était-ce utile?

La solution

Au lieu d'utiliser X x Y sprites individuels, de créer une seule image, et définir les pixels de manière appropriée. Ensuite, il suffit de rendre l'image entière comme une texture sur un sprite.

Le tableau en dents de scie est très probablement pas le problème -. Plutôt près d'un demi-million sprites

Autres conseils

Le problème est que vous dépensez beaucoup de temps CPU dans la méthode de dessin chaque image. La méthode de dessin de votre instance de jeu sera toujours appelée aussi souvent que possible, que ce soit dans le temps fixe ou non. Étant donné que, vous voulez toujours vous assurer que vous dépensez aussi peu de temps possible, ce qui signifie voulez placer la plupart des travaux sur le GPU.

Le imbriquée pour-boucles, ainsi que tous les appels à spriteBatch.Draw vont utiliser le CPU beaucoup plus lent, surtout quand votre boucle devient de plus en plus, ce qui signifie que le dessin retardé.

Si vous voulez faire par pixel calculs, par tirage au sort, chaque image, alors la meilleure façon de s'y prendre est de placer le travail sur le GPU et utiliser un pixel shader. Vous pouvez accomplir votre propre problème en créant une texture de la taille que vous voulez et passer un tableau au shader qui maintient votre « ou désactiver » l'information, entre autres façons d'atteindre le même objectif.

Comment: Appliquer un pixel Shader aux images-objets

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top