Frage

Ich arbeite an einem 2D-Shooter-Spiel mit vielen Objekte auf dem Bildschirm (Kugeln etc.) zu bewegen.

Ich benutze BitmapData.copyPixels (...) gesamten Bildschirm in einen Puffer zu machen: BitmapData-. Dann habe ich „copypixels“ von „Puffer“ zu Bildschirm: BitmapData-. Die Framerate ist 60.

private var bitmap:Bitmap = new Bitmap();
private var buffer:Bitmap = new Bitmap();

private function start():void {
    addChild(bitmap);
}

private function onEnterFrame():void {
    // render into "buffer"
    // copy "buffer" -> "bitmap"
}

Das Problem ist, dass das Sprites zerreißt: ein Teil eines Sprites horizontal wurde verschoben.

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

Hat jemand dieses Problem lösen?

UPDATE:. die Frage nicht über die Leistung, sondern um das Loswerden von Tearing

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

War es hilfreich?

Lösung

Ich fühle deinen Schmerz, als ich zur Zeit in den Gräben mein eigenes Spiel zu entwickeln. Bei den Standardeinstellungen erzeugt der Flash-Renderer schreckliche Tearing / v-sync Probleme, unabhängig davon, welche Code, den Sie erzeugen.

Aus diesem Grunde war ich erfreuen, die einfachste, elegante Antwort gefunden zu haben, das war nicht neu Factoring-Code (der nicht ein einziges Bit hilft, das Problem ist der Flash-Player, nicht-Code).

Aktivieren Sie einfach Hardwarebeschleunigung in Ihrer Veröffentlichungseinstellungen . Es gibt zwei verschiedene Möglichkeiten:

Stufe 1: Direkt ; und Stufe 2:. GPU

Lesen Sie mehr dazu in der offiziellen Dokumentation: Festlegen der Veröffentlichungseinstellungen für SWF-Dateien und entscheiden, welche Option am besten für Ihr Spiel ist.

Zielmarkt hat einen Faktor hier spielen, wenn es ein ernstes Spiel für Spieler ist, brauchen Sie nicht über mögliche Performance-Probleme kümmern, da die meisten Spieler GPU haben.

Diese Artikel lieferte mich nicht mit der Lösung, die speziell, aber führe ich in der richtigen Richtung. Aber, wenn Sie Ihr Spiel in einem Browser-Fenster sein wird, könnten Sie die gleiche Technik der Einstellung wmode direkten oder gpu auch verwenden.

Andere Tipps

Das erste, was Sie vielleicht zu tun ist, stoppen Sie den Flash Player Behandlung wie es DOS ist. Der Flash Player ist ein hoch optimierte 2D-Spiele-Engine, wie es ist und ich nicht wirklich verstehen, warum Sie versuchen, das Rad neu zu erfinden, indem um viele Bitmap-Scheiben zu kopieren. Natürlich werden Sie Performance-Probleme haben.

Der Flash Player läßt Sie nicht auf jeden vertikalen oder horizontalen leer synchronisieren, da der Flash Player nicht einfach kein Konzept dafür hat.

Ich persönlich denke, dass Sie überdenken sollen Sie nähern, wenn Sie ‚glatte‘ Animation wollen. Der Flash Player ist sicherlich dazu in der Lage, Sie nur den falschen Ansatz versuchen.

nicht speichern Dinge BitmapData-, die, absolut töten Ihre App wird töten. Bitmap-Daten sind nicht sehr performant.

Machen Sie alle Ihre Spielelemente in Flash, wie Sprites (oder Movieclips, wenn Sie müssen), und dann arbeiten, wie Flash zu arbeiten gemeint war, als Vektor-Animation-Plattform. Es wurde nie für 2D-Bitmap-Grafiken optimiert. 2D-Vektor-Grafiken funktionieren gut, und selbst wenn Sie Bitmaps importieren werden sie besser funktionieren bewegen, dann werden sie zu einem Bitmapdata-Objekt gemacht wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top