Erhöhen Sie die Bildrate von Pygame


10

Wenn ich mein Spiel profiliere, sehe ich, dass der überwiegende Teil der Ausführungszeit meines Hobbyspiels zwischen dem Blit und dem Flip Call liegt. Derzeit läuft es nur mit ca. 13fps. Meine Grafikkarte ist ziemlich anständig, daher schätze ich, dass Pygame sie nicht verwendet.

Kennt jemand irgendwelche Grafik- / Anzeigeoptionen, die ich im Pygame einstellen muss, um dies zu beschleunigen? Oder ist das nur etwas, mit dem ich leben muss, seit ich mich für Pygame entschieden habe?

Antworten:


12

Wenn Sie im Vollbildmodus arbeiten, können Sie das pygame.HWSURFACEFlag verwenden, wenn Sie die Anzeige initialisieren, um Pygame anzuweisen, eine Hardwareoberfläche zu verwenden. Ich glaube, wenn eine Hardware-Oberfläche nicht verwendet werden kann, wird Pygame stillschweigend eine Software-Oberfläche verwenden.

Wenn Sie keine Hardwareoberfläche verwenden, sollten Sie pygame.display.update(rectangle)eher als verwenden pygame.display.flip(). Dadurch wird nur das angegebene Rechteck und nicht die gesamte Anzeige aktualisiert. Dies kann Ihre Leistung erheblich steigern, es sei denn, Ihr Spiel muss tatsächlich die gesamte Anzeige aktualisieren.

Wenn Sie eine Hardware- oder OpenGL-Oberfläche verwenden, gibt es auch eine, pygame.DOUBLEBUFdie Hardware-Doppelpufferung verwendet. Dies bedeutet, dass Ihre Zeichenfunktionen in einen der beiden Puffer zeichnen und flip()den sichtbaren Puffer austauschen.


5

Ein Engpass im Pygame ist das Rendern von Schriftarten. Sie sollten denselben Text (mit derselben Schriftart / Farbe) nicht mehr als einmal rendern, sondern die gerenderten Oberflächen zwischenspeichern und wiederverwenden. Berücksichtigen Sie dies, wenn Sie häufig Font.render () verwenden.


4

Zusätzlich zu Talljoshs Antwort möchte ich noch ein paar Vorschläge einbringen:

Vermeiden Sie Rotationen und Skalierungen, wo immer Sie können. Solche Operationen werden ausschließlich auf der CPU ausgeführt und sind in der Regel sehr, sehr langsam.

Wenn Sie direkte Pixellesevorgänge / -änderungen vornehmen, verwenden Sie die Surface.get_buffer()Methode und arbeiten Sie damit, anstatt die Surface.set_at()/get_at()Methoden zu verwenden.


2

Kommentieren Sie alle Testkonsolenausgaben aus, die Sie haben. Dies kann die Framerate drastisch reduzieren, insbesondere wenn Sie zwischen Rotation und Skalierung ausgeben, wie Cody oben sagte.


2

Es ist richtig, dass Pygame die 3D-Beschleunigungsfunktionen Ihrer Grafikkarte nicht nutzt. Dies liegt daran, dass es auf SDL basiert, das dieselbe Einschränkung aufweist. Eine Alternative ist das Spiel in einem System wie neu zu schreiben Pyglet , die nicht nativen OpenGL unterstützen Sprites beschleunigt, um eine ähnliche Bibliothek für Grafiken zu finden nur, oder den OpenGL - Code selbst dafür zu schreiben.


Pyglet ist großartig.
Die kommunistische Ente

1

Eine unglaublich einfache Sache ist die Verwendung von Psyco . Ich weiß nicht, wie viel es helfen wird, aber da alles, was es erfordert, ist

 import psyco
 psyco.full()

Um loszulegen, können Sie es auch versuchen.


Psyco wird mit modernem idiomatischem Python-Code wirklich nicht viel helfen. Verwenden Sie PyPy, wenn Sie eine JIT möchten (nicht sicher, ob PyGame dort funktioniert).
Coderanger

Pygame funktioniert nicht unter PyPy, aber Pyglet macht es, los geht's.
Coderanger
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.