Pygame'in kare hızını daha hızlı hale getirin


10

Oyunumu profilleyerek, hobi oyunumun yürütme süresinin büyük çoğunluğunun blit ve flip call arasında olduğunu görüyorum. Şu anda, sadece 13 fps civarında çalışıyor. Ekran kartım oldukça iyi, bu yüzden tahminim pygame tarafından kullanılmıyor.

Bunu daha hızlı hale getirmek için pygame'de ayarlamam gereken grafik / görüntü seçeneklerini bilen var mı? Yoksa bu sadece pygame'i seçtiğimden beri yaşamam gereken bir şey mi?

Yanıtlar:


12

Tam ekran modunda çalışıyorsanız, pygame.HWSURFACEpygame'e bir donanım yüzeyi kullanmayı denemesini bildirmek için ekranı başlattığınızda bayrağı kullanabilirsiniz. Bir donanım yüzeyi kullanılamazsa pygame'in sessizce bir yazılım yüzeyi kullanacağına inanıyorum.

Bir donanım yüzeyi kullanmıyorsanız, kullanmayı düşünün pygame.display.update(rectangle)yerine pygame.display.flip(). Bu, tüm ekran yerine yalnızca verilen dikdörtgeni güncelleyecektir; bu, oyununuzun tüm ekranı güncellemesi gerekmedikçe performansınızı biraz artırabilir.

Bir donanım veya OpenGL yüzeyi pygame.DOUBLEBUFkullanıyorsanız, donanım çift arabelleğini kullanan da vardır , yani çizim işlevleriniz iki flip()tampondan birine çekilir ve hangi arabelleğin görünür olduğunu değiştirir.


5

Pygame'deki bir darboğaz aslında yazı tipi oluşturmadır. Aynı metni (aynı yazı tipi / renkle) bir kereden fazla oluşturmamalı, daha sonra oluşturulduktan sonra yüzeyleri önbelleğe almalı ve tekrar kullanmalısınız. Font.render () öğesini çok kullanıyorsanız bunu dikkate alın.


4

Talljosh'un cevabına ek olarak, birkaç öneride daha bulunmak istiyorum:

Mümkün olan her yerde rotasyon ve ölçeklemeden kaçının. Bu tür işlemler yalnızca CPU üzerinde yapılır ve çok, çok yavaş olma eğilimindedir.

Doğrudan piksel okumaları / modifikasyonları yapıyorsanız, Surface.get_buffer()yöntemleri kullanmak yerine yöntemi kullanın ve bununla çalışın Surface.set_at()/get_at().


2

Sahip olduğunuz tüm test konsolu çıktılarını yorumlayın. Bu, özellikle Cody'nin dediği gibi, özellikle dönme ve ölçekleme arasında çıkış yapıyorsanız, kare hızını büyük ölçüde azaltabilir.


2

Pygame'in video kartınızın 3D hızlandırma özelliklerini kullanmaması doğrudur. Bunun nedeni, aynı sınırlamaya sahip SDL'yi temel almasıdır. Bir alternatif gibi bir sistemde oyununuzu yeniden yazmak olduğunu pyglet yok sadece grafikler için de benzer bir kitaplık bulmak için, ya bunun için OpenGL kodu kendiniz yazmak için, doğal olarak OpenGL sprite hızlandırılmış destekler.


Pyglet harika.
Komünist Ördek

1

Yapılması gereken inanılmaz basit bir şey, psikopat kullanmaktır . Ne kadar yardımcı olacağını bilmiyorum, ama tüm gereken

 import psyco
 psyco.full()

yayınlanmaya başlamak için bir deneme yapabilirsiniz.


Psyco gerçekten modern deyimsel Python koduyla pek yardımcı olmaz. Bir JIT istiyorsanız PyPy kullanın (PyGame'in orada çalışıp çalışmadığından emin değilsiniz).
coderanger

Pygame, PyPy altında çalışmaz, ancak Pyglet bunu yapar.
coderanger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.