Ihre Hauptspielschleife ist falsch, was zu Fehlfunktionen Ihrer Pygame-Anwendung führt. Hier ist eine Aufschlüsselung der Probleme:
Falsche Blitting-Reihenfolge:
In Ihrem Code versuchen Sie, die zu blitten Bewegen Sie den Hintergrund an der Position eines Objekts und verschieben Sie das Objekt, bevor Sie es an seiner neuen Position blottingen. Das ist unnötig. Der Hintergrund sollte einmal am Anfang jedes Frames gezeichnet werden, und Objekte sollten darüber geblitzt werden, ohne die vorherige Position zu löschen.
Hier ist eine korrigierte Version von Ihnen Hauptanwendungsschleife:
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)
Das obige ist der detaillierte Inhalt vonWarum ist meine Pygame-Spielschleife ineffizient und verursacht falsches Blitting?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!