Dies ist ein Bildschirm, der zeigt, was gerade passiert, damit Sie einen Referenzrahmen erhalten.
Das Problem, auf das ich stoße, ist, dass mein Spiel aufgrund der Menge an Texturtausch, die ich während meines Draw Calls mache, langsamer wird. Da sich Wände, Zeichen, Böden und alle Objekte auf ihrem jeweiligen Sprite-Blatt befinden, das diese Typen enthält, wird die geladene Textur beim Kacheln mindestens 3 bis 5 Mal ausgetauscht, während sie die Sprites zyklisch zeichnet und zeichnet, um sie richtig zu schichten.
Jetzt habe ich versucht, alle gängigen Objekte zusammen in ihre jeweiligen Listen zu werfen und sie dann mithilfe von layerDepth so zu zeichnen, was die Dinge viel besser macht, aber das neue Problem, auf das ich stoße, hat mit der Art und Weise zu tun, wie meine Türen / Fenster funktionieren sind an Wänden gezeichnet. Ich habe nämlich Schablonen verwendet, um einen Block an den Wänden zu entfernen, der in Form der Tür / des Fensters gezeichnet ist, sodass die Wand beim Zeichnen ein Loch in Tür- / Fenstergröße aufweist.
Auf diese Weise wurde meine Zeichnung für Wände eingerichtet, als ich Fliesen für Fliesen ging, anstatt gemeinsame Objekte zu gruppieren.
- Zuerst würde überprüft, ob sich an dieser Wand eine Tür / ein Fenster befand. Wenn nicht, würde es alle Schritte überspringen und einfach normal zeichnen. Andernfalls
- Beenden Sie das aktuelle SpriteBatch
- Löschen Sie die Puffer mit einer transparenten Farbe, um das bereits Gezeichnete zu erhalten
- Starten Sie ein neues Spritebatch mit Schabloneneinstellungen
- Zeichnen Sie den Türbereich
- Beenden Sie das SpriteBatch
- Starten Sie ein neues Spritebatch, das die zuvor festgelegte Schablone berücksichtigt
- Zeichnen Sie die Wand, die jetzt mit einem Loch gezeichnet wird
- Beende das Spritebatch
- Starten Sie einen neuen Spritebatch mit den normalen Einstellungen, um mit dem Zeichnen von Kacheln fortzufahren
Beim Zeichnen von Kacheln für Kacheln spielte das Löschen der Tiefen- / Schablonenpuffer keine Rolle, da ich keine Layertiefe verwendete, um zu organisieren, was über was gezeichnet wird.
Jetzt, da ich nicht mehr Kacheln, sondern Kacheln aus Listen gängiger Objekte zeichne, hat dies meinen Zeichnungsaufruf erheblich beschleunigt, aber ich kann anscheinend keine Möglichkeit finden, das Schablonensystem so zu halten, dass der Bereich einer Tür oder eines Fensters ausgeblendet wird wird in eine Wand gezogen. Die Wurzel des Problems liegt darin, dass beim Beenden eines SpriteBatch zum Ändern des DepthStencilState das aktuelle RenderTarget abgeflacht wird und keine Tiefensortierung mehr für weiter unten in der Linie gezeichnete Elemente erfolgt. Dies bedeutet, dass Wände immer über alles gezeichnet werden, unabhängig von Tiefe oder Position in der Spielwelt und sogar übereinander, da die Schablone einmal für jede Wand mit einer Tür oder einem Fenster ausgeführt werden muss.
Kennt jemand einen Weg, um dies zu umgehen? Um es auf den Punkt zu bringen, brauche ich eine Möglichkeit, Dinge nach Schichttiefe sortiert zu zeichnen und gleichzeitig Teile bestimmter Sprites zu schablonieren / zu maskieren.