您的主游戏循环不正确,这导致您的 Pygame 应用程序出现故障。以下是问题的详细说明:
不正确的位图传送顺序:
在您的代码中,您尝试位图传送背景,然后移动该对象,然后将其传输到新位置。这是不必要的。背景应在每帧开始时绘制一次,并且对象应在其顶部进行位块传输,而不擦除先前的位置。
这是您的修正版本主应用程序循环:
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)
以上是为什么我的 Pygame 游戏循环效率低下并导致错误的位块传输?的详细内容。更多信息请关注PHP中文网其他相关文章!