文字不会出现-pygame

问题描述

所以我之前曾问过这个问题,但是这次我没有犯同样的错误,即在使屏幕变蓝之前调用文本循环。

def win1():
    print('Level 1 completed')
    global levelcount,var1,var2,clr,score,alive
    myfont = pygame.font.SysFont('Comic Sans MS',100)
    textsurface = myfont.render('Level 1 completed',True,(0,0))
    screen.blit(textsurface,0))
    for sprite in enemies:
        sprite.kill()
    pygame.time.wait(2800)
    levelcount = 2
    var1 = 700
    var2 = 900
    clr = (10,85,135)
    myfont = pygame.font.SysFont('Comic Sans MS',100)
    textsurface = myfont.render('Level 2',0))
    alive = True
    score = 0

代码应该使它说“已完成1级”,但事实并非如此。这是我称之为的地方:

alive = True
while alive:
    for event in pygame.event.get():
        print(event)
        if event.type == pygame.QUIT:
            alive = False
        elif event.type == ADDENEMY:
            new_opponent = random.choice([Enemy(),Bomb(),Blimp()])
            enemies.add(new_opponent)
            all_sprites.add(new_opponent)

    pressed_keys = pygame.key.get_pressed()
    player.update(pressed_keys)

    enemies.update()

    screen.fill(clr)

    for entity in all_sprites:
        screen.blit(entity.surf,entity.rect)

    if pygame.sprite.spritecollideany(player,enemies):
        player.kill()
        alive = False
        death()

    if levelcount == 1: #I call it here
        if score > 100:
            alive = False
            win1()
    if levelcount == 2: #this is for if you beat level 2
        if score > 100:
            alive = False
            win2()

    screen.blit(player.surf,player.rect)

    pygame.display.flip()

    pygame.display.update()
    clock.tick(60)

我有一个死亡部分,它说“你死了”,并且可以工作,但是我在胜利部分使用了几乎相同的代码

解决方法

您必须在 pygame.time.wait(2800)之前用pygame.display.flip()更新显示并通过pygame.event.pump()处理事件:

def win1():
    # [...]

    pygame.display.flip()
    pygame.event.pump()
    pygame.time.wait(2800)

    # [...]

仅当使用pygame.display.update()pygame.display.flip()更新显示时,对显示 Ssurface 所做的更改才可见。
在某些系统上,必须通过pygame.event.pump()pygame.event.get()处理事件,以便处理显示的重绘。处理事件可确保程序可以与操作系统的其余部分进行内部交互。