Wichtigste Leistungsprobleme mit iOS9 mit Sprite Kit

Ich habe mit iOS9 RIESIGE Leistungsprobleme und kann einfach nicht herausfinden, was ich tun soll. Ich habe viele Beiträge gelesen -Hie, undHie zum Beispiel, aber die von ihnen vorgeschlagenen Lösungen helfen nicht oder machen wenig Unterschied.

Mein Spiel wurde von 60fps auf einem alten iPad 2 (iOS 8.4) auf <15fps auf einem neuen iPad mini (iOS 9) umgestellt.

Ich versuche, den Hauptschuldigen herauszufinden. Ich bin mir ziemlich sicher, dass einer von ihnen SKCropNodes ist. Normalerweise rendere ich mehrere SKCropNodes in meiner Szene (6 - 18). Dies war in iOS8 noch nie ein Problem, aber es scheint, dass iOS9 zwar besser beschneidet, dabei aber auch die Leistung verschlechtert.

Wenn ich die Schnittknoten als normale SKSpriteNodes rendere, gewinne ich auf alten Geräten möglicherweise 5 fps und auf einem neueren iPhone 6 bis zu 30. Ich habe keine Alternative zur Verwendung von Schnittknoten, aber es kann nicht das ganze Problem sein.

Ich dachte, es wurde möglicherweise der falsche Texturatlas verwendet - d. H. Einer mit einer viel größeren Auflösung. Es machte jedoch keinen Unterschied, mein Gerät dazu zu zwingen, einen sehr kleinen Atlas zu verwenden.

Ich benutze Texture Packer, um meine Atlanten mit Skalierungsvarianten für die verschiedenen Geräte zu generieren. Ich habe festgestellt, dass XCAssets jetzt eine Option zum Hinzufügen eines Sprite-Atlas bietet (ich kann anscheinend keine Dokumentation dazu finden). Dies ist für mein Spiel nicht geeignet, da ich Hunderte von Sprites verwende. Ich habe versucht, meine Atlanten zu XCAssets hinzuzufügen, aber aus irgendeinem Grund werden die Skalierungsvarianten nicht verwendet. Trotzdem läuft es mit niedrig aufgelösten Texturen immer noch furchtbar.

Ich habe versucht, @ einzustell

skView.ignoresSiblingOrder = YES;

und gegeben alle meine Knoten zPosition Werte, aber immer noch keine Wirkung. Ich habe außerdem jedem Bildnamen die Erweiterung .png hinzugefügt (ursprünglich ein Problem, das bedeutete, dass sie nicht gerendert werden würden.)

Ich habe einige SKEffectNodes in meinen Szenen, aber das Entfernen und Hinzufügen dieser scheint keinen Effekt zu haben.

Ich verstehe nicht, wie dieselbe Hardware und derselbe Code zu so drastisch unterschiedlichen Ergebnissen führen können. Offensichtlich hat Apple etwas an Rendering geändert, das sich nachteilig ausgewirkt hat. Sie scheinen auch nicht die Absicht zu haben, diese Probleme zu beheben. Ich bin mir bewusst, dass es seit Monaten Fehler in diesem Problem gibt - lange bevor iOS9 veröffentlicht wurde.

Ich arbeite jetzt seit 2 Jahren an diesem Spiel und habe es gerade erst vor iOS9 veröffentlicht. Es leidet jetzt unter schrecklicher Leistung und regelmäßigen Abstürzen.

Hat jemand herausgefunden, was genau Apple getan hat, um die Leistung zu töten? Wenn ich das wüsste, könnte ich zumindest versuchen, es zu umgehen ... Danke.

AKTUALISIERE

s folgen einige Zahlen für dieselbe Szene mit der absoluten Höchstzahl von Knoten, die das Spiel gleichzeitig generieren würd

iOS 8, iPad 2, ~ 200 Knoten, ~ 100 Draws, 58,7 - 60 fps

iOS 9, iPhone6, ~ 280 Nodes, ~ 216 Draws, ungefähr 20 fps

Ich nehme an, dass der Unterschied in der Anzahl der Knoten auf die unterschiedlichen Bildschirmgrößen zurückzuführen ist. Wenn ich die Szene auf dem iPhone 6 ändere, um äquivalente Werte zu erzielen, liegt die FPS immer noch bei 24.

UPDATE 2

Mit Xcodes Vorlage Sprite Kit-Projekt und der Änderung des Raumschiffs zu einem SKCropNode, der das Raumschiff enthält, kann ich unter iOS 8 Hunderte von Schiffen ohne Probleme mit der Bildrate hinzufügen. Bei iOS 9, demselben Projekt, kann ich ungefähr 25 hinzufügen, bevor die Bildrate auf <30 abfällt.

iOS 8 auf iPad2:

iOS 9 iPhone 5:

In Bezug auf die Verwendung von Texturatlas kann ich, wie in meinem Kommentar, nicht garantieren, dass etwas aus demselben Atlas gezogen wird. Mein Spiel enthält benutzerdefinierte Charaktere mit Assets aus einer Reihe von Atlanten (von denen jeder ~ 100 Texturen enthält). Es können bis zu 9 Zeichen gleichzeitig auf dem Bildschirm angezeigt werden. Ich verstehe, dass dies in Bezug auf das Zeichnen nicht das effizienteste ist, aber ich hatte bis iOS9 nie ein Problem ...

Update 3

Ich habe Apple einen Fehler gemeldet, einschließlich meines Beispielprogramms. Ich habe auch eine meiner technischen Support-Anfragen aufgebraucht. Bisher nichts von Apple.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage