慕姐8265434
每个场景都应该有自己的loop,当你按下按钮时,你应该去新的loop。如果您想在一个循环中更改元素,则将旧元素放入某个函数(即draw_intro),并将新元素放入其他函数(即draw_other) - 在开始时draw_intro在循环中使用,当您按下按钮时,将此函数替换为draw_other在 Python 中,您可以将函数名称(不带())分配给变量show = print然后使用此名称(使用())show("Hello World")你可以用draw_intro,做同样的事情draw_other。在游戏循环内(之前while)您可以设置global drawdraw = draw_intro 并在里面使用它 whiledraw()当您按下按钮时,它应该替换功能draw = draw_other这是完整的工作代码 - 我只删除了所有代码blit(image)以便在没有图像的情况下轻松运行它。import pygameblack = (0,0,0)white = (255,255,255)gray = (128,128,128)red = (255,0,0)pygame.init()gameDisplay = pygame.display.set_mode( (800,600))clock = pygame.time.Clock()def button(msg,x,y,w,h,ic,ac,action=None): mouse = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() if x+w > mouse[0] > x and y+h > mouse[1] > y: pygame.draw.rect(gameDisplay, ac, (x,y,w,h)) if click[0] == 1 and action != None: action() else: pygame.draw.rect(gameDisplay, ic, (x,y,w,h)) smallText = pygame.font.SysFont("comicsansms",20) textSurf = smallText.render(msg, True, red) textRect = textSurf.get_rect() textRect.center = ( (x+(w/2)), (y+(h/2)) ) gameDisplay.blit(textSurf, textRect)def change_draw(new_draw): global draw draw = new_drawdef draw_BE01(): gameDisplay.fill(white) #gameDisplay.blit(BE01Img,(0,0)) button("BACK",350,450,100,50,black,gray,lambda:change_draw(draw_intro))def draw_intro(): gameDisplay.fill(white) #gameDisplay.blit(introImg,(0,0)) button("START",350,450,100,50,black,gray,lambda:change_draw(draw_other))def draw_other(): gameDisplay.fill(white) #gameDisplay.blit(scene01Img,(0,0)) button("1",200,450,100,50,black,gray,lambda:change_draw(draw_BE01))def quitgame(): pygame.quit() quit() def game_loop(): global draw draw = draw_intro gameExit = False while not gameExit: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() draw() pygame.display.update() clock.tick(60)game_loop()pygame.quit()quit()编辑:如果您之前没有使用lamda过,那么您可以不使用它,lambda但是您将需要change_draw_to_intro, change_draw_to_other,change_draw_to_BE01而不是单个change_drawimport pygameblack = (0,0,0)white = (255,255,255)gray = (128,128,128)red = (255,0,0)pygame.init()gameDisplay = pygame.display.set_mode( (800,600))clock = pygame.time.Clock()def button(msg,x,y,w,h,ic,ac,action=None): mouse = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() if x+w > mouse[0] > x and y+h > mouse[1] > y: pygame.draw.rect(gameDisplay, ac, (x,y,w,h)) if click[0] == 1 and action != None: action() else: pygame.draw.rect(gameDisplay, ic, (x,y,w,h)) smallText = pygame.font.SysFont("comicsansms",20) textSurf = smallText.render(msg, True, red) textRect = textSurf.get_rect() textRect.center = ( (x+(w/2)), (y+(h/2)) ) gameDisplay.blit(textSurf, textRect)def change_draw_to_intro(): global draw draw = draw_introdef change_draw_to_other(): global draw draw = draw_otherdef change_draw_to_BE01(): global draw draw = draw_BE01def draw_BE01(): gameDisplay.fill(white) #gameDisplay.blit(BE01Img,(0,0)) button("BACK",350,450,100,50,black,gray,change_draw_to_intro)def draw_intro(): gameDisplay.fill(white) #gameDisplay.blit(introImg,(0,0)) button("START",350,450,100,50,black,gray,change_draw_to_other)def draw_other(): gameDisplay.fill(white) #gameDisplay.blit(scene01Img,(0,0)) button("1",200,450,100,50,black,gray,change_draw_to_BE01)def quitgame(): pygame.quit() quit() def game_loop(): global draw draw = draw_intro gameExit = False while not gameExit: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() draw() pygame.display.update() clock.tick(60)game_loop()pygame.quit()quit()