2017-03-19 2 views
0

Ich habe gesehen, dass wenn du ein .png Bild zu deinem pygame Display blitzen willst, der FPS von 60 auf 20 fällt, gibt es einen Weg um dies zu umgehen, oder ich habe etwas falsch in meinem Code gemacht ?.png make pygame laggy

EDIT: Ich habe versucht, .convert_alpha(), und es geht um die 40 FPS jetzt

menu = pygame.image.load("Ecran titre\\principal\\menu.png") 
clock = pygame.time.Clock() 

gameExit = False 

while not gameExit : 

    for event in pygame.event.get(): 
     if (event.type == pygame.QUIT): 
      gameExit = True 

    #gameDisplay.fill(0) 

    gameDisplay.blit(background,(0,0)) # background is a jpeg image with .convert() 

    gameDisplay.blit(menu,(0,0)) 
    pygame.display.update() 
    clock.tick(60) 
    pygame.display.set_caption("fps: " + str(clock.get_fps())) 

Antwort

2

convert_alpha() ist ein guter erster Schritt in Bildern innerhalb pygame verwalten. Es ist auch wichtig zu wissen, dass das Blitzen eines Bildes auf die Oberfläche viel langsamer ist als das Blitzen einer Oberfläche auf eine Oberfläche. Ich würde alle Bilder, die Sie planen, auf ihre eigenen Oberflächen vorzeichnen. Dann würde ich diese Oberflächen auf den Bildschirm blitzen. zum Beispiel geschieht die folgenden Code außerhalb das Spiel Schleife:

img_rect = get_image("my_image.png").get_rect() 
img_surface = pygame.Surface((img_rect.width, img_rect.height), pygame.SRCALPHA) 
img_surface.fill((0, 0, 0, 0)) 
img_surface.blit(get_image("my_image.png"), img_rect) 

Dann in die Spielschleife:

gameDisplay.blit(img_surface, (x, y)) 

Im Allgemeinen Sie so viel wie möglich herausnehmen möchten, können der Spielschleife. In diesem Fall werden das Bild vorverarbeitet und eine schnellere Oberflächen-zu-Oberfläche-Blit ausgeführt.

In Zukunft sollten Sie cProfile für Python verwenden. Es wird Ihnen wirklich helfen, herauszufinden, was genau Sie Code träge macht. Hier sind einige gute Informationen über sie:

Python getting meaningful results from cProfile

0

Zunächst einmal sollten Sie .convert_alpha() verwenden, wie „The4thIceman“ in einer früheren Antwort angegeben. Das kann Ihren Code wirklich beschleunigen und sollte für alle geladenen Bilder verwendet werden.

Zweitens sollten Sie Multithreading verwenden. Multithreading ist die Kunst, Ihre Programme mehrere Dinge gleichzeitig ausführen zu lassen. Python hat eine eingebaute "thread" -Bibliothek (obwohl ich denke, dass es "_thread" in Python 3 ist), die es Ihnen leicht macht, dies zu tun.

Siehe https://docs.python.org/3/library/_thread.html