Es wurde wahrscheinlich schon einmal gefragt, aber ich kann es nirgends finden ...
Im Videoland sind 24 fps und alles darüber flüssig. Cocos2d scheint zu sein glätten Sie nur, wenn es 60 fps oder vielleicht ein bisschen weniger ist. Irgendetwas dazwischen 30 und 50 ist sicherlich nicht glatt, der fps-Zähler scheint nicht genau zu sein ...
Warum ist das? Oder habe ich nur diese Situation?
Es gibt tatsächlich mehrere Gründe für dieses Verhalten, und es ist nicht nur cocos2d, sondern ein Effekt, der in jeder Spielengine in Umgebungen mit zu sehen ist vertikale Synchronisation (VSYNC) aktiviert. Auf iOS ist VSYNC immer eingeschaltet, auf PCs haben Sie normalerweise die Möglichkeit, sie auszuschalten, um die Bildwiederholrate zu verbessern, wenn sie ständig unter der Monitor-Rate liegen, auf Kosten von Bildschirmrisse . Typischerweise aktualisieren LCDs wie iOS-Geräte ihre Anzeige bei 60 Hz, was maximal 60 fps erlaubt.
Cocos2D 1.x verwendet standardmäßig CADisplayLink Klasse für Updates, Cocos2D 2.x verwendet ausschließlich CADisplayLink. CADisplayLink bewirkt, dass Updates mit der Bildschirmaktualisierungsrate synchronisiert werden. Das bedeutet, dass eine Benachrichtigung gesendet wird, wenn der Bildschirm seinen Inhalt fertig gezeichnet hat.
Wenn Sie 60 fps bekommen, ist alles in Ordnung. Wenn es dem Spiel jedoch nicht gelingt, einen Frame rechtzeitig zum Rendern von 60 fps zu rendern, wird die nächste Aktualisierung erst nach Abschluss der nächsten Bildschirmaktualisierung angezeigt. Dies halbiert effektiv die Framerate, sobald die Framerate knapp unter 60 fps fällt - oder anders gesagt, sobald Ihr Update & amp; Der Renderzyklus dauert länger als 16.666 Millisekunden. Dies bedeutet, dass Sie nur diskrete Framerates von 60, 30, 20 und 15 fps (60 geteilt durch 1, 2, 3 und 4) auf iOS mit CADisplayLink Updates haben können.
Der Effekt ist ziemlich auffällig, weil eine Framerate, die zwischen 60, 30, 20 und 15 fps schwankt - auch nur für den Bruchteil einer Sekunde - nicht glatt ist, weil sie so unruhig ist - die Unstetigkeit ist das, was wir bemerken "Nicht weich". Wenn Ihr Spiel davon betroffen ist, stellen Sie vielleicht fest, dass die Begrenzung der Framerate auf 30 fps das Spiel glatter erscheinen lässt. Sie haben auch mehr Zeit zum Aktualisieren & amp; Rendern zwischen Frames.
Es ist die Stetigkeit der 24-fps-Filmframerate, die als "flüssig" konzipiert ist, aber auch Filmregisseure haben gelernt, Szenen zu vermeiden, in denen die beschränkte Framerate zu offensichtlich wird. Sie vermeiden zum Beispiel höllisch, was Spiele sehr oft tun: seitlich scrollen, dh Seitwärtsbewegungen der Kamera oder Seitwärtsbewegungen von Objekten, die an der Kamera vorbeigehen.
Sie werden überrascht sein, wie viel glattere Filme Sie sehen können, wenn Sie The Hobbit sehen - es ist der erste Blockbuster-Film, der mit 48 fps läuft. Sie werden sofort bemerken, wie viel "echter" und "lebensechter" die Charaktere im Film sind. Um einen Eindruck zu bekommen, schauen Sie sich diese inoffizielle 48 fps Der Hobbit-Trailer .
Was cocos2d als fps anzeigt, ist keine genaue Darstellung des Switches von 60 auf 30 bis 20 und 15 fps, sondern die durchschnittliche Framerate über mehrere Frames. Wenn cocos2d also "45 fps" ausgibt, bedeutet dies, dass die Hälfte der Zeit für 30 fps und die andere Hälfte für 60 fps in den letzten paar Frames angezeigt wurde.
Zwei Hauptprobleme.
Erstens passt die Bildwiederholfrequenz des Displays an - alles andere und Sie erhalten eine unregelmäßige Bewegung, die das Auge / Gehirn gut erkennen kann. Sei wenigstens ein Vielfaches davon.
Zweitens ist Bewegungsunschärfe. Film / Video neigt dazu, Bewegungsunschärfe zu haben, was den Betrachter dazu bringt, kontinuierliche Bewegung zu sehen.
Tags und Links cocos2d-iphone frame-rate smooth