Frage

Ich möchte Iterierte durch eine Anordnung, die jedes Pixel auf meinem Bildschirm abdeckt. das heißt:

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

... meine Textur ist ein 1x1-Pixel-Bild, das auf den Bildschirm gezeichnet wird, wenn der Array-Wert wahr ist. Es läuft anständig - aber es ist auf jeden Fall liegt die mehr Bildschirm I Abdeckung. Gibt es eine bessere Art und Weise zu erreichen, was ich erreichen möchte?

War es hilfreich?

Lösung

Anstelle der Verwendung von X x Y einzelnen Sprites, erzeugen ein einzelnes Bild, und stellen die Pixel entsprechend. Dann macht nur das gesamte Bild als Textur auf einem einzelnen Sprit.

Die gezackte Array ist höchstwahrscheinlich nicht das Problem -. Vielmehr die fast eine halbe Million Sprites

Andere Tipps

Das Problem ist, dass Sie jeder Frame eine Menge CPU-Zeit innerhalb des Ziehverfahren die Ausgaben sind. Die Draw-Methode des Spiels Instanz wird immer so oft wie möglich genannt werden, ob die Zeit in fester oder nicht. Da, Sie wollen immer sicherstellen, dass Sie verbringen so wenig Zeit wie möglich dort, was bedeutet, dass Sie die meiste Arbeit auf der GPU platziert werden soll.

Das verschachtelte for-Schleifen sowie alle Anrufe zu spriteBatch.Draw gehen, um den viel langsamer CPU verwenden, vor allem, wenn Ihre Schleife wird immer größer, was bedeutet, verzögert zu ziehen.

Wenn Sie pro-Pixel-Berechnungen tun wollen, pro Draw, jeder Frame, dann der beste Weg, um darüber zu gehen ist, die Arbeit auf der GPU zu platzieren und einen Pixel-Shader verwenden. Sie könnten Ihr eigenes Problem durch die Schaffung einer Textur die gewünschte Größe und Übergabe eines Arrays an den Shader erreichen, dass Ihre „ein- oder ausschalten“ Informationen, unter anderem Wege zu erreichen, das gleiche Ziel gilt.

How To: Tragen Sie eine Pixel Shader zu Sprites

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top