Beim Vorabladen von SKTextureAtlas
:
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. (?!)
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.
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.
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.
Tags und Links multithreading ios sprite-kit sktextureatlas