Schneller Tipp Beheben von V-Sync-Problemen (Tearing) in Flash

In dem heutigen (sehr) schnellen Tipp erfahren Sie, wie Sie das häufig auftretende Problem des Flimmerns oder Zerreißens lösen. Dies ist ein schrecklicher Effekt in Flash, bei dem Bitmaps flackern, wenn sie aktualisiert werden oder in zwei Bilder scheinen (wie in der Miniaturansicht)..


Welche Ursachen haben diese Probleme??

Kurz gesagt: Das Zerreißen tritt auf, wenn Flash Informationen aus zwei verschiedenen Bildern gleichzeitig auf den Bildschirm zieht. In der Miniaturansicht oben können Sie sehen, wie dies aussehen könnte, wenn Sie über ein Bild eines Turms schwenken. Der untere Teil des Bildes stammt von einem Bild, während die obere Hälfte vom nächsten Teil stammt. Wenn Sie dies in Bewegung sehen, sehen Sie es immer nur für einen Bruchteil einer Sekunde, aber es ist immer noch auffällig.

Dies wird normalerweise durch "V-Sync" (vertikale Synchronisation) gelöst, wodurch die Grafikkarte bis zum nächsten Aktualisierungszyklus des Bildschirms nichts mehr auf den Bildschirm zieht. Flash unterstützt V-Sync jedoch nur schlecht, da sich die Framerate von Flash Player von der vertikalen Bildwiederholfrequenz des Desktops unterscheidet. Dies bedeutet, dass Objekte mit einer großen Höhe durch Zerreißen hart getroffen werden. Dies gilt auch dann, wenn die Bildrate von Flash der vertikalen Bildwiederholfrequenz des Desktops entspricht, da sie immer noch nicht synchronisiert sind.

Jetzt fragen Sie sich vielleicht: Warum behebt Adobe dieses Problem nicht? Der Grund dafür ist, dass Flash eine Zeitleiste verwendet. Durch das Ändern der Bildrate ändert sich folglich die Wiedergabegeschwindigkeit. Wenn Sie ein Spiel oder eine Bildergalerie mit 60 Bildern pro Sekunde erstellt haben und die vertikale Bildwiederholfrequenz des Desktops mehr als 60 Bilder pro Sekunde betrug, haben Sie entweder ein leichtes Ruckeln (wenn Sie den Film mit 60 Bildern pro Sekunde verlassen haben), oder müssen die Wiedergabe starten Film schneller wieder mit dem Desktop synchronisieren. Für die meisten Inhalte wäre dies überhaupt nicht zu empfehlen!

Dies ist ein Problem, das die Entwickler seit langem von Adobe verlangen, dass es behoben wird. Es ist jedoch offensichtlich, dass Probleme dabei auftreten. Im Moment müssen wir Entwickler kreative Wege finden, um dieses Problem selbst zu lösen. Es gibt keine einfache Möglichkeit, das Problem auf allen Computern zu beheben. Da die meisten Bildschirme jedoch eine Aktualisierungsrate von 59,9 oder 60 aufweisen, können Sie die Framerate auf 60 setzen, um die meisten Benutzer zu lösen. Dies erfordert jedoch mehr Rechenleistung und kann Ihre Anwendung verlangsamen.

Der beste Weg, dies im Moment zu lösen, ist ziemlich einfach und leicht zu bewerkstelligen. Es behebt die zugrunde liegende Ursache nicht, aber es verringert die Menge des Reißens so weit wie möglich.


Wie kann ich das Reißen reduzieren??

Hardwarebeschleunigungsstufe 1: Direkt ist der Schlüssel zur Lösung des Reißproblems. Sie können dies festlegen, indem Sie die HTML-Datei öffnen, in die Ihre SWF-Datei eingebettet ist, und die Parameter für das Flash-Objekt bearbeiten.

Das Flag, das Sie setzen möchten, ist wmode: "direkt". Diese Zeile befindet sich im Abschnitt "params" Ihres HTML-Codes. Das ist es, das sollte helfen, das Reißen drastisch zu reduzieren. Wenn Sie wissen wollen, warum, schauen Sie sich die Adobe-Seite zur Hardwarebeschleunigung an. Es erklärt etwas über beide Ebenen der Hardwarebeschleunigung. Weitere Informationen finden Sie in diesem ausführlichen Artikel.


Noch etwas?

Ja; zu erwähnen ist auch, dass je mehr Objekte Sie auf dem Bildschirm haben, desto deutlicher wird das Reißen. Kleinere Objekte sind normalerweise nicht von V-Sync-Problemen betroffen. Große Elemente auf dem Bildschirm machen dies jedoch sehr deutlich. Daher ist es eine gute Idee, die Anzahl der großen Objekte auf ein Minimum zu beschränken.

Auch mit bitmapData.lock () und bitmapData.unlock () ist empfohlen und hat einigen Leuten bei diesem Problem geholfen. Durch das Sperren eines BitmapData-Objekts wird das Neuzeichnen von Bitmaps bis zum Entsperren verhindert. Dies ist eine gute Idee, wenn Sie mehrere Änderungen zwischen Frames vornehmen müssen. Weitere Informationen finden Sie in diesem Blogbeitrag.


Fazit

Sie können einige Maßnahmen ergreifen, um das Reißen zu verringern, aber Sie können es nicht vollständig beseitigen. Anzahl der großen Objekte reduzieren, einstellen wmode: "direkt" Die Verwendung von Bitmap-Sperren ist die beste Methode, um das Zerreißen zu reduzieren.