PYGAME : 为什么在游戏循环内调用游戏循环内的函数会使我的游戏延迟?

PYGAME : Why does calling a function inside the game loop inside Game loop make my game lag?

我正在制作一个简单的游戏,敌人在屏幕上四处移动,我们需要射击 them.I 想要模块化我的代码,所以我想用 function.But 替换游戏循环逻辑一旦我这样做,fps 就会下降。在 while 循环中调用函数会降低 fps 吗?

不使用函数,我的游戏循环是:

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            crosshair.shoot()
    
        pygame.display.update()
        #blit bg
        displaysurf.blit(background,(0,0))
        #render group of sprites
        target_group.draw(displaysurf)
        crosshair_group.draw(displaysurf)
        #call the update methods
        crosshair_group.update()
        target_group.update()
        #display fps
        #print(clock.get_fps())
        #restrict to 60frames drawing per second
        clock.tick(60)

具有函数:

def first_level():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            crosshair.shoot()
    
        pygame.display.update()
        #blit bg
        displaysurf.blit(background,(0,0))
        #render group of sprites
        target_group.draw(displaysurf)
        crosshair_group.draw(displaysurf)
        #call the update methods
        crosshair_group.update()
        target_group.update()
        #display fps
        #print(clock.get_fps())
        #restrict to 60frames drawing per second
        clock.tick(60)
while True: 
        first_level()

但是在我添加此功能的那一刻,我的游戏开始由于减少 FPS.Why 而出现延迟,这会发生吗?

你的缩进好像搞砸了。 pygame.display.update() 之后的所有内容都不应该成为 for event ... 循环的一部分。

def first_level():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            crosshair.shoot()
    
    pygame.display.update()
    #blit bg
    displaysurf.blit(background,(0,0))
    #render group of sprites
    target_group.draw(displaysurf)
    crosshair_group.draw(displaysurf)
    #call the update methods
    crosshair_group.update()
    target_group.update()
    #display fps
    #print(clock.get_fps())
    #restrict to 60frames drawing per second
    clock.tick(60)

while True: 
    first_level()