Umstellung des iOS-Multitasking-Switcher-Systems auf die Diskrepanz bei der Anwendungsabbildung

8

Es scheint mir, dass das System eine andere Bildschirmaufnahme macht, als die, die meine App an applicationWillResignActive annimmt.

Zu meiner Überraschung gibt es eine Verzögerung von etwa 0,6 Sekunden zwischen dem Bild des Systems (b) und dem Bild des Spiels (d) . Es macht Sinn, wenn das System die Bildschirmaufnahme vor applicationWillResignActive durchführen muss, aber für ein Spiel mit sich schnell bewegenden Objekten kann dies leicht vom Spieler bemerkt werden.

Wie kann ich dies umgehen?

Nachfolgend sind die Schritte, die der Spieler macht und wie er diese Diskrepanz verursacht:

(a) Der Spieler spielt die Home-Taste, wenn er spielt. (b) Die Bildschirmaufnahme des Systems wird übernommen. (c) Der Spieler tippt auf das Spielsymbol. (d) Das Spiel wird mit der Bildschirmaufnahme gestartet, die am applicationWillResignActive erstellt wurde. (e) Das Spiel wird angehalten und zeigt die Diskrepanz in einem sich schnell bewegenden Objekt.

    
rraallvv 08.07.2014, 15:12
quelle

1 Antwort

0

Ich glaube, das liegt daran, dass Ihr Spielrendering nicht im Hauptthread ist (sicherlich sollte es nicht im Hauptthread sein), wenn also applicationDidEnterBackground/applicationWillResignActive zurückgegeben wird, nimmt das System sofort einen Screenshot vom Grafikkartenpuffer.

Zu diesem Zeitpunkt läuft der Game-Loop-Thread noch, sodass einige Frames aktualisiert werden können, bevor sie pausiert werden.

Ich weiß nicht, wie Sie Ihre Spielschleife implementieren, aber Sie können das versuchen:

In applicationDidEnterBackground/applicationWillResignActive , setze einen globalen Semaphor ( dispatch_semaphore_t ) und blockiere den Haupt-Thread, beobachte den Semaphor und wenn es existiert, pausiere die Spielschleife und signalisiere den Semaphor.

Damit wird sichergestellt, dass der Screenshot aufgenommen wird, nachdem Ihr Spiel pausiert wurde.

Beachten Sie auch, dass nach applicationWillResignActive das System den Snapshot für den Taskwechsler erstellt und nach applicationDidEnterBackground das System einen Snapshot für das nächste Mal erstellt, wenn Sie den Vordergrund aufrufen.

Hoffe, das wird dir helfen.

    
CarmeloS 14.01.2015 13:59
quelle