SpriteKit: Performance-Hit beim Vorladen von SKTextureAtlas

8

Beim Vorabladen von SKTextureAtlas :

habe ich einen Leistungseinbruch erlebt %Vor%

Bei einem Performance-Treffer bedeute ich, dass FPS für kurze Zeit auf ~ 50 fallen.

Ich habe es mit Time Profiler in Instruments getestet und überprüft, dass diese Arbeit tatsächlich in einem Worker-Thread ausgeführt wird, wie in Dokumentation .

Das folgende Bild zeigt eine Time Profiler Erfassung der Spitze, verursacht durch einen Vorladeatlas. Wie Sie sehen können, wird der größte Teil des Spikes von zwei Worker-Threads verursacht, die anscheinend alle Bilddaten laden, soweit ich das verstehen kann. Dies sollte jedoch keinen Leistungseinbruch im Hauptthread IMHO verursachen.

Hinweis 1 : Die .spriteatlas , die ich vorlade, ist nicht so groß: 4 Assets mit ca. 1000x1000 size.

Hinweis 2 : Ich teste mit iPhone 6, iOS 10, Xcode 8.

Anmerkung 3 : Es wird keine andere wesentliche Arbeit gleichzeitig geleistet. Die CPU schwankt ständig bei ~ 30%. Das gleiche gilt für GPU.

Hinweis 4 : Der Atlas-Preload wird benötigt, bevor eine der Texturen aus diesem Atlas benötigt wird, daher sollte es mehr als genug Zeit zum Vorladen haben.

Jede Hilfe / Richtung sehr geschätzt!

AKTUALISIEREN

Kompletter Codeblock, in dem die Vorladung stattfindet:

%Vor%

UPDATE 2

Ich habe ein leeres Projekt mit nichts als einem Atlas-Vorlade-Block erstellt. Der Leistungsabfall tritt immer noch auf. Ich habe es mit mehreren Atlanten versucht, sogar mit Atlas mit nur einem Asset .

Ich habe auch versucht, was @Sez vorgeschlagen hat (siehe unten), in diesem leeren neuen Projekt, aber in diesem Fall wurde der Completion Block nicht einmal aufgerufen, was wie ein anderer Fehler in SKTextureAtlas klasse aussieht. (?!)

%Vor%

UPDATE 3

Ich habe versucht, die .spriteatlas zu löschen und die .atlas mit den gleichen Texturen zu erstellen und es gibt (fast) keine Performance. % Co_de% unterstützt jedoch kein Slicing, weshalb ich .atlas an erster Stelle verwenden möchte.

    
damirstuhec 27.11.2016, 22:22
quelle

1 Antwort

5

Es gibt Probleme Probleme mit SKTextureAtlas (Apple Dev Forums Post).

Versuchen Sie, Ihren Texturatlas mit dem SKTextureAtlas:withDictionary: zu erstellen, indem Sie ein Wörterbuch von [String:UIImage] , a Methode beschrieben in einem anderen StackOverflow-Beitrag und sehen, ob das hilft.

UPDATE: Wenn Sie möchten, dass die Seltexture vorab in einem Hintergrundthread vorkommt, würde ich schreiben das speziell, anstatt sich auf die Komfortfunktion preload zu verlassen.

%Vor%

Betreffend App-Slicen , solange Sie Assets in Asset-Katalogen platzieren, sollten sie geschnitten werden. Nachdem Sie einen Build in iTunesConnect hochgeladen haben, können Sie einen Bericht der Größen des App Store sehen, der dies widerspiegelt.

Ich habe ein Video von einem Live-Stream, in dem ich diesen Importprozess zeige. Tut mir leid, es ist ein bisschen quälend lang (2h +), aber der Link hier geht genau zu dem Moment, wo der Import in das Sprite-Blatt passiert.

Ссылка

So wie ich es hier zeige, bekommst du einen Sprite-Atlas mit geschnittenen Bildern. Meine Skripts (die ich zuvor im Clip gezeigt habe) sind auf meinem GitHub , wenn Sie sie möchten.

    
Sez 30.11.2016 06:20
quelle