2014-04-04 19 views
6

Als ich sah sich nach Informationen über spritekit Texturen und ich auf diesem Zitat gestolpert:Rendern Sie Knoten in Einzelzeichnung mit Spritekit?

Wenn alle Kinder eines Knotens die gleichen Mischmodus und Texturatlas verwenden, können Sprite Kit in der Regel diese zeichnen Sprites in einem einzigen Zeichnungsdurchlauf. Wenn andererseits die untergeordneten Elemente so organisiert sind, dass sich der Zeichenmodus für jedes neue Sprite ändert, kann Sprite Kit als ein Zeichnungsdurchlauf pro Sprite ausgeführt werden, was ziemlich ineffizient ist.

Aber check this out:

Fliesen mit derselben Struktur (ich versichern Sie, es ist eine Textur, nicht nur eine Farbe) Untextured tiles

Fliesen mit ihrer eigenen Textur Textured tiles

Die Zeichenzählung hat einen Unterschied von 40, obwohl alle verwendeten Texturen aus demselben Atlas stammen.

Interpretiere ich das Wort "Atlas" falsch?

Dies ist, wo ich meine Bilder speichern:

texture atlas

Ist mein Beispiel eine ‚Texturatlas‘, oder ist die Definition von ‚Atlas‘ hier eine einzige .png, die benötigt, um alle Bilder enthält, und einzelne Fliesen werden davon geschnitten?

Oder liegt das Problem wahrscheinlich daran, wie ich lade/etwas anderes?

Danke!

Antwort

5

Das Problem hier ist wahrscheinlich wegen des Knotendiagramms selbst. Angenommen, Sie haben 100 Sprites als Kinder der Szene, die keine eigenen Unterkinder haben und alle Texturen aus dem gleichen Atlas und den Standardblendmodi verwenden, dann wird Sprite Kit diese 100 Sprites in einem einzigen Zeichenaufruf im Stapel zeichnen.

Wenn diese Kachelsprites jedoch eigene Kinder haben, die Knoten zum Debuggen formen oder beschriften, wird dies den Batch-Zeichenvorgang "unterbrechen".

Überprüfen Sie Ihre Knotengrafik. Stellen Sie sicher, dass alle Kachelsprites Kinder desselben Elternteils sind und keine eigenen Kinder haben. Verwenden Sie dieselben Mischmodi und Texturen aus demselben Atlas. Dann wird Batch-Zeichnung definitiv funktionieren.

Wenn das nicht funktioniert, vergewissern Sie sich, dass der Ordner kiles.atlas korrekt in einen Texturatlas im Bundle konvertiert wurde. Wenn Sie das kompilierte App-Paket öffnen, sollten Sie einen Ordner namens "tiles.atlasc" mit einem Plist und einer oder mehreren Png-Dateien finden, die alle einzelnen Bilder des Ordners enthalten. Außerdem sollte keines dieser Einzelbilder im Bundle erscheinen - wenn sie dem Bundle als einzelne Dateien mit den gleichen Namen wie im Atlas hinzugefügt werden, lädt Sprite Kit standardmäßig die einzelnen Bilddateien, anstatt sie aus dem Texturatlas zu beziehen .

+0

Hm, das funktioniert immer noch nicht. Die Sprite-Knoten sind Kinder von Knoten, nicht von der Szene, ist das das Problem? Keiner von ihnen hat Kinder. EDIT: Ich bin ein IDIOT. Einer meiner Kacheltypen bezog sich auf ein Bild im Bilderordner ... Und dieses eine Plättchen vermasselte es. Es war zufällig meine feste Bodenfliese ... – IAmTheAg

+0

Um ... hilf mir mit einer weiteren Sache. Das Laden von Texturen auf diese Weise scheint unglaublich ineffizient zu sein.Das Initialisieren von Sprites dauert für mich jetzt viel länger, da die Kachelkarte ständig durchlaufen und generiert werden muss. Was ist der schnellste Weg, um ein solches Sprite zu initialisieren? – IAmTheAg

+1

Nun, wenn Sie die ..imageNamed: -Methode viel (sowohl für Sprite und Textur/Texturatlas) ausführen, die möglicherweise viel Aufwand verursachen. Für meine Karte halte ich sowohl den Atlas in einem starken Ref, als auch die Texturen in einem Array (indiziert durch GID) für schnellen Zugriff. Sehen Sie sich den Tilemap-Renderer im Kobold-Kit an. – LearnCocos2D