Ich kenne mich mit dem iPhone nicht besonders aus, aber vielleicht kann ich trotzdem helfen: Anstatt einfach eine feste Verzögerung am Ende der Schleife einzubauen, können Sie folgendes verwenden:
- Legen Sie ein Aktualisierungsintervall fest, mit dem Sie zufrieden sind und das größer ist als ein einziger Durchlauf durch Ihre Hauptschleife.
- Nehmen Sie zu Beginn der Schleife einen aktuellen Zeitstempel in der Ihnen zur Verfügung stehenden Auflösung und speichern Sie ihn.
- Am Ende der Schleife nehmen Sie einen weiteren Zeitstempel und ermitteln die seit dem letzten Zeitstempel verstrichene Zeit (initialisieren Sie dies vor der Schleife).
- sleep/delay für die Differenz zwischen Ihrer idealen Frame-Zeit und der bereits verstrichenen Zeit für den Frame.
- Beim nächsten Bild können Sie sogar versuchen, Ungenauigkeiten im Schlafintervall durch einen Vergleich mit dem Zeitstempel zu Beginn der vorherigen Schleife auszugleichen. Speichern Sie die Differenz und addieren/subtrahieren Sie sie vom Schlafintervall am Ende dieser Schleife (Schlaf/Verzögerung kann zu lang ODER zu kurz werden).
Vielleicht sollten Sie einen Warnmechanismus einrichten, der Sie darauf hinweist, wenn Ihr Timing zu knapp bemessen ist (d.h. wenn Ihre Schlafzeit nach dem Kompensieren weniger als 0 beträgt, was bedeuten würde, dass Sie mehr Zeit für die Verarbeitung benötigen, als Ihre Framerate erlaubt). Die Folge ist, dass sich Ihr Spiel verlangsamt. Wenn Sie dies feststellen, sollten Sie das Rendering eine Zeit lang vereinfachen, bis Sie wieder genügend freie Kapazitäten haben.