清除屏幕文本并添加新文本

0 投票
1 回答
681 浏览
提问于 2025-04-17 21:13

我一直在学习pygame这个库,想要掌握它。我做了一个“按钮”,如果你愿意的话可以这么称呼我做的这个东西。我有一个main()函数,它负责显示主菜单。接着是pick_level()函数,它让你选择想玩的关卡。我的问题是,当执行pick_level()后,main()显示的文字没有从屏幕上消失。下面是我的代码。不知道为什么它没有正确地处理这个问题……

#import games
import pygame
from pygame.locals import *
import sys


pygame.init()


DISPLAYSURF = pygame.display.set_mode((1024, 720), 0, 32)
pygame.display.set_caption('The End')

#Set color of main menu
BLUE = (0, 0, 255)
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
DISPLAYSURF.fill(BLUE)

# Set up text to show.
myfont = pygame.font.SysFont("curier new", 45)
gameFont = pygame.font.SysFont("times new roman", 20)

def main():
""" Main Program """
# render text
lbltheEnd = myfont.render("The End", 1, WHITE)
lblchooseLevel = gameFont.render("Choose Level", 1, WHITE)
lblCredits = gameFont.render("Credits", 1, WHITE)
lblexit = gameFont.render("Exit", 1, WHITE)

DISPLAYSURF.blit(lbltheEnd, (100, 100))

#rectangle for button click
global btnChooseLevel
btnChooseLevel = pygame.draw.rect(DISPLAYSURF, BLACK, (98, 150, 111, 25))
DISPLAYSURF.blit(lblchooseLevel, (100, 150))


def pick_level():
""" Show pick Level """
lblLevel = myfont.render("Level 1", 1, WHITE)
DISPLAYSURF.blit(lblLevel, (100, 100))


# Run the program
main()
while True:
for event in pygame.event.get():
    if event.type == QUIT:
        pygame.quit()
        sys.exit()

    # Clicks for make shift buttons
    if event.type == MOUSEBUTTONUP:
        print(str(event.pos[0]) + " " + str(event.pos[1]))

        if(btnChooseLevel.collidepoint(event.pos)):
            print("Choose Level Clicked")
            pick_level()


    pygame.display.update()

1 个回答

1

最快的办法就是把整个屏幕清空,然后重新绘制你想要的所有内容。比如在 pick_level() 这个函数里,你可以加上:

DISPLAYSURF.fill(BLUE) #if BLUE is your background color or whatever background color you want

然后再写你 pick_level() 的其他代码。

为了让事情更简单,你应该有一个叫 draw_background() 的方法,这个方法负责绘制每个菜单的基本背景,然后你可以在这个背景上绘制你特定的文字或图片。

撰写回答