2017-03-19 2 views
0

J'ai vu que quand vous voulez copier une image .png sur votre écran pygame, le FPS passe de 60 à 20, est-ce qu'il y a moyen de contourner cela, ou peut-être que j'ai fait quelque chose de mal dans mon code ?.png make pygame laggy

EDIT: Je viens d'essayer .convert_alpha(), et il va maintenant environ 40 FPS

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())) 

Répondre

2

convert_alpha() est une bonne première étape dans la gestion des images dans pygame. Il est également important de savoir que le fait de mélanger une image à la surface est beaucoup plus lent que de mélanger une surface à une surface. Je pré-dessiner toutes les images que vous prévoyez d'utiliser sur leurs propres surfaces. Ensuite, je bleach ces surfaces à l'écran. par exemple, le code ci-dessous se en dehors la boucle de jeu:

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) 

Puis dans la boucle de jeu:

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

En général, vous voulez prendre autant que vous le pouvez sur de la boucle de jeu. Dans ce cas, vous prétraitez l'image et effectuez un blit surface-surface plus rapide. À l'avenir, envisagez d'utiliser cProfile pour python. Cela vous aidera vraiment à déterminer ce qui vous rend le code léthargique. Voici quelques bonnes infos sur ce:

Python getting meaningful results from cProfile

0

Tout d'abord, vous devez utiliser .convert_alpha(), comme « The4thIceman », a déclaré dans une réponse précédente. Cela peut vraiment accélérer votre code, et il devrait être utilisé sur toutes les images chargées. En second lieu, vous devez utiliser le multithreading. Le multithreading est l'art de faire en sorte que vos programmes exécutent plusieurs choses en même temps. Python a une bibliothèque "thread" intégrée (bien que je pense que c'est "_thread" dans Python 3) qui vous permet de le faire facilement.

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