英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论