2017-09-22 1 views
0

Ich frage mich, ob dies eine Einschränkung von Pygame ist oder wenn ich es falsch mache. Wenn ich ein Bild über den Bildschirm bewege, ist die Bildrate variabel und langsam. Ich würde es wirklich gerne glatt machen. Mein Code ist:Jerky Framerate beim Querformat Bild

screen = pygame.display.set_mode((1280, 720), pygame.FULLSCREEN) 
 

 
pygame.key.set_repeat(1, 1) 
 
map = pygame.image.load('test_2000x1333.jpg') 
 

 
camera_x = -320 
 
camera_y = -250 
 

 
clock = pygame.time.Clock() 
 
game_running = True 
 

 
while game_running: 
 
    for event in pygame.event.get(): 
 
     key_pressed = pygame.key.get_pressed() 
 

 
     if key_pressed[pygame.K_w]: 
 
      if camera_y < 0: 
 
       camera_y += 2 
 
     if key_pressed[pygame.K_s]: 
 
      if camera_y > -550: 
 
       camera_y -= 2 
 
     if key_pressed[pygame.K_a]: 
 
      if camera_x < 0: 
 
       camera_x += 2 
 
     if key_pressed[pygame.K_d]: 
 
      if camera_x > -630: 
 
       camera_x -= 2 
 

 
     if event.type == pygame.KEYDOWN: 
 
      if pygame.key.get_mods() & pygame.KMOD_ALT: 
 
       if event.key == pygame.K_F4: 
 
        game_running = False 
 

 
    screen.blit(map, (camera_x, camera_y)) 
 

 
    pygame.display.flip() 
 
    clock.tick(60) 
 

 
pygame.quit()

Ich habe versucht, Hinzufügen von ‚pygame.DOUBLEBUF | pygame.HWSURFACE 'zum display.set_mode-Flag, aber es scheint nicht zu helfen.

+1

Geladene Bilder sollten normalerweise mit den Methoden ['convert'] (http://www.pygame.org/docs/ref/surface.html#pygame.Surface.convert) oder' convert_alpha' konvertiert werden, um die Leistung zu verbessern : 'map = pygame.image.load ('test_2000x1333.jpg'). convert()'. Lass mich wissen, ob das geholfen hat. – skrx

Antwort

0

Mit dieser Bildgröße vermute ich, dass Sie versuchen, dies auf einem Raspberry Pi, Android oder einem anderen Gerät zu tun, das nicht von PyGame beschleunigt wird. Zum Angebot:

Der Raspberry Pi ist eine langsame CPU mit einer sehr leistungsfähigen GPU. Pygame nutzt die GPU nicht nativ, was zu einer schlechten Leistung führt. Um die GPU zu nutzen, müssen Sie eine Bibliothek für Ihre Programmiersprache finden, die mit OpenGLES, OpenVG, etc. funktioniert. Zum Glück gibt es einige Bibliotheken, die das stark vereinfachen - hier einige Beispiele: pi3D und Simple2D. Es gibt andere, abhängig davon, welche Sprache Sie verwenden möchten. Auch die Graphics Programming Forum on the Raspberry Pi Forums ist ziemlich hilfreich zu lernen, wie die Raspberry Pi GPU die meiste Leistung zu bekommen. Wenn Sie ein Gefühl der will, wie stark die GPU ist, überprüfen Sie die hello_video Reihe von Demos aus, die mit Raspbian enthalten sind - Raspberry Pi Demo Programs

Es ist nichts falsch mit Ihrem Code.

+0

Ich bin auf Windows 10 mit einem 1920x1080 Display, Core i5-4430 und GTX 760. Ich habe versucht map = pygame.image.load ('test_2000x1333.jpg'). Convert() und .convert_alpha(), aber ich don ' t sehen eine Leistungsverbesserung. – mendlo

+0

Ja, mit dem, was du geschrieben hast, stimmt wirklich nichts. PyGame wird in 2D nicht wesentlich beschleunigt und du machst die langsamste Operation hier, was ein Vollbild-Neuzeichnen ist. Es könnte ein degeneriertes Setup für Sie sein, wenn Sie Anaconda oder etwas verwenden, ich spekuliere nur. Natürlich mit einem schnellen Computer sollte es keine Probleme geben. Am besten verwenden Sie ein anderes Python-Spielekit, das nicht auf pyGame basiert. – DoctorPangloss