Vsync in Flex / Flash / AS3?

9

Ich arbeite an einem 2D-Shooter-Spiel mit vielen beweglichen Objekten auf dem Bildschirm (Kugeln usw.).

Ich verwende BitmapData.copyPixels (...), um den gesamten Bildschirm in einen Puffer zu rendern: BitmapData. Dann "kopiere ich" von "buffer" auf den Bildschirm: BitmapData. Die Framerate ist 60.

%Vor%

Das Problem ist, dass die Sprites auseinander reißen: ein Teil eines Sprites wurde horizontal verschoben.

Es sieht aus wie ein PC-Spiel mit VSYNC ausgeschaltet.

Hat jemand dieses Problem gelöst?

UPDATE: Bei der Frage geht es nicht um die Leistung, sondern darum, screen tearing loszuwerden.

[!] UPDATE: Ich habe eine andere Frage und hier können Sie beide Implementierungen versuchen: mit Flash-Weg oder BitmapData + copyPixels ()

    
oshyshko 12.06.2009, 23:13
quelle

3 Antworten

7

Ich fühle deinen Schmerz, während ich gerade in den Schützengräben bin und mein eigenes Spiel entwickle. Bei den Standardeinstellungen erzeugt der Flash-Renderer schreckliche Probleme mit der Bildschirmtrennung / V-Synchronisierung, unabhängig davon, welchen Code Sie erstellen.

Aus diesem Grund habe ich mich gefreut, die einfachste und eleganteste Antwort gefunden zu haben, nämlich nicht den Code neu zu faktorisieren (was nicht ein einziges Bit hilft, das Problem ist der Flash Player, kein Code).

Aktivieren Sie einfach die Hardwarebeschleunigung in Ihren Veröffentlichungseinstellungen . Es gibt zwei verschiedene Optionen:

Stufe 1: Direkt ; und Level 2: GPU .

Lesen Sie mehr dazu in der offiziellen Dokumentation: Veröffentlichungseinstellungen für SWF-Dateien angeben und entscheide, welche Option für dein Spiel am besten geeignet ist.

Der Zielmarkt spielt hier eine Rolle. Wenn es ein ernstes Spiel für Spieler ist, müssen Sie sich keine Gedanken über mögliche Leistungsprobleme machen, da die meisten Spieler GPUs haben.

Dieser Artikel habe mir die Lösung nicht speziell zur Verfügung gestellt, sondern mich in die richtige Richtung geführt. ABER, wenn sich Ihr Spiel in einem Browserfenster befindet, müssen Sie möglicherweise die gleiche Technik verwenden, um wmode auch auf direct oder gpu zu setzen.

    
Daniel Carvalho 14.03.2010, 22:42
quelle
-4

Als erstes sollten Sie aufhören, den Flash Player wie DOS zu behandeln. Der Flash Player ist eine hoch optimierte 2D-Spiel-Engine, und ich verstehe nicht wirklich, warum Sie das Rad neu erfinden wollen, indem Sie viele Bitmap-Slices kopieren. Natürlich werden Sie Leistungsprobleme haben.

Der Flash Player lässt Sie nicht mit einer vertikalen oder horizontalen Leerstelle synchronisieren, da der Flash Player dafür einfach kein Konzept hat.

Ich persönlich denke, dass Sie überdenken sollten, wenn Sie eine "glattere" Animation wünschen. Der Flash Player ist dazu in der Lage, Sie versuchen nur den falschen Ansatz.

    
Luke 12.06.2009 23:21
quelle
-5

Speichern Sie keine Dinge in BitmapData, die Ihre App töten würden. Bitmap-Daten sind nicht sehr performant.

Machen Sie alle Ihre Spielelemente in Flash, als Sprites (oder MovieClips, wenn Sie müssen), und arbeiten Sie dann, wie Flash als Vektor-Animationsplattform funktionieren sollte. Es wurde nie für 2D-Bitmap-Grafiken optimiert. 2D-Vektorgrafiken funktionieren gut, und selbst wenn Sie Bitmaps importieren, werden sie sich besser bewegen, dann werden sie zu einem BitmapData-Objekt gerendert.

    
Kekoa 12.06.2009 23:25
quelle

Tags und Links