Maison >développement back-end >Tutoriel Python >Pourquoi ma boucle de jeu Pygame est-elle inefficace et provoque-t-elle un blitting incorrect ?
Votre boucle de jeu principale est incorrecte, ce qui entraîne un dysfonctionnement de votre application Pygame. Voici une répartition des problèmes :
Ordre de blitting incorrect :
Dans votre code, vous tentez de blitter le arrière-plan à la position d'un objet, puis déplacez l'objet avant de le blitter à sa nouvelle position. C'est inutile. L'arrière-plan doit être dessiné une fois au début de chaque image et les objets doivent être superposés dessus sans effacer la position précédente.
Voici une version corrigée de votre boucle d'application principale :
while True: # Handle events for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() # Update objects (based on input and frames) keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: screen.blit(background, objects[0].pos, objects[0].pos) objects[0].move_left() screen.blit(objects[0].image, objects[0].pos) # Blit object at new position if keys[pygame.K_RIGHT]: screen.blit(background, objects[0].pos, objects[0].pos) objects[0].move_right() screen.blit(objects[0].image, objects[0].pos) # Blit object at new position if keys[pygame.K_UP]: screen.blit(background, objects[0].pos, objects[0].pos) objects[0].move_up() screen.blit(objects[0].image, objects[0].pos) # Blit object at new position if keys[pygame.K_DOWN]: screen.blit(background, objects[0].pos, objects[0].pos) objects[0].move_down() screen.blit(objects[0].image, objects[0].pos) # Blit object at new position for num in range(num_objects - 1): objects[num + 1].rand_move() # Draw background screen.blit(background, (0, 0)) # Draw scene for o in objects: screen.blit(o.image, o.pos) # Update display pygame.display.update() pygame.time.delay(100)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!