为什么我的Pygame程序中”Screen Fill”没有移除”Blit”?

huangapple go评论83阅读模式
英文:

Why does Screen Fill not Remove Blit in my Pygame Program?

问题

我正在开发一个使用 Pygame 的 Python 程序。我无法完全清空屏幕,因为使用 screen.fill 仍然会导致文本残留。我的代码如下:

while True:
    scene0()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            screen.fill("White")
            pygame.display.flip()

scene0() 代码如下:

def scene0():
    into_font = pygame.font.Font(None, 200)
    intro_surf = into_font.render('游戏名称', False, '黑色').convert()
    intro_rect = intro_surf.get_rect(center=(600, 300))
    txt_font = pygame.font.Font(None, 90)
    text_surf = txt_font.render('按空格键开始', False, "黑色").convert()
    text_rect = text_surf.get_rect(center=(600,420))

    screen.blit(intro_surf, intro_rect)
    screen.blit(text_surf, text_rect)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

        if exit_button.draw(screen):
            run = exit()

场景 0:
Scene 0

使用 screen.fill 后:
After screen fill

英文:

I am developing a Python program which uses Pygame. I cannot clear the screen entirely as using screen.fill still results in lingering text. My code:

while True:
    scene0()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            screen.fill("White")
            pygame.display.flip()

The scene0() code:

def scene0():
        into_font = pygame.font.Font(None, 200)
        intro_surf = into_font.render('Game Name', False, 'Black').convert()
        intro_rect = intro_surf.get_rect(center=(600, 300))
        txt_font = pygame.font.Font(None, 90)
        text_surf = txt_font.render('Press Space to Start', False, "Black").convert()
        text_rect = text_surf.get_rect(center=(600,420))

        screen.blit(intro_surf, intro_rect)
        screen.blit(text_surf, text_rect)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit()

            if exit_button.draw(screen):
                run = exit()

The scene 0:
Scene 0

After using screen fill:
After screen fill

答案1

得分: 1

Your code isn't working because screen.fill() 清空了屏幕,但在下一个 while 循环迭代中,scene0() 函数会再次在屏幕上绘制一切。您可以创建一个条件,然后调用 scene0() 函数。示例代码:

screen_status = "active"

while True:
    if screen_status == "active":
        scene0()
    elif screen_status == "blank":
        screen.fill("White")
        pygame.display.flip()    

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            screen_status = "blank";

在上面的代码中,最初将 screen_status 变量设置为 active,因此调用 scene0() 函数。然而,当按下空格键时,screen_status 被设置为 blank。因此,屏幕被清空。

如果您希望再次绘制所有内容,可以再次将 screen_status 设置为 active

英文:

Your code isn't working because, screen.fill() clears the screen, but, in the next iteration of the while loop, the scene0() function blits everything on the screen again. You can create a condition and then call the scene0() function. Example code:

screen_status = "active"

while True:
    if screen_status == "active":
        scene0()
    elif screen_status == "blank":
        screen.fill("White")
        pygame.display.flip()    

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            screen_status = "blank"

In the above code, initially the screen_status variable is set to active, so the scene0() function is called. However, when the spacebar is pressed, screen_status is set to blank. So, the screen is cleared.

If you want to blit everything again, you can set screen_status to active again.

huangapple
  • 本文由 发表于 2023年6月15日 16:39:57
  • 转载请务必保留本文链接:https://go.coder-hub.com/76480660.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定