2

我正在制作一个简单的游戏,其中敌人在屏幕上四处移动,我们需要射击他们。我想模块化我的代码,所以我想用一个函数替换游戏循环逻辑。但是一旦我这样做,就会有一个下降以 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降低而开始滞后。为什么会发生这种情况?

4

1 回答 1

2

看起来你搞砸了你的缩进。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()
于 2021-01-12T11:29:58.977 回答