首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从python中的循环外部结束循环

如何从python中的循环外部结束循环
EN

Stack Overflow用户
提问于 2020-05-25 21:13:50
回答 4查看 117关注 0票数 2

我用python 3.8.3制作了一个pygame游戏,在我的游戏中我有一个开始屏幕,它在while循环中:

代码语言:javascript
运行
复制
def game_intro(): 
    intro = True 
    mixer.music.load("musicIntro.mp3")
    mixer.music.set_volume(0.02) 
    mixer.music.play(-1) 
    while intro:
        for event in pygame.event.get():
            if event.type == pygame.QUIT: 
                pygame.quit()
                quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    intro = False
        screen.blit(startscherm_img, bordrect) 
        clock.tick(30)
        button("Start",302,517,94,44,donkerOranje,lichtOranje,"start")
        button("Music",553,517,94,44,donkerOranje,lichtOranje,"toggleMusic")
        button("Quit",803,517,94,44,donkerOranje,lichtOranje,"quit")
        pygame.display.flip() 
game_intro()

我调用上面定义的按钮函数:

代码语言:javascript
运行
复制
def button(msg,x,y,w,h,ic,ac,action=None): 
    mousePos = pygame.mouse.get_pos() 
    click = pygame.mouse.get_pressed() 
    if x+w > mousePos[0] > x and y+h > mousePos[1] > y: 
        pygame.draw.rect(screen, ac, (x,y,w,h)) 
        if click[0] == 1 and action != None: 
            if action == "toggleMusic": 
                PAUSE.toggle()
                time.sleep(0.3)
            elif action == "quit": 
                pygame.quit()
                time.sleep(0.3)
            elif action == "start": 
                time.sleep(0.3)
                intro = False
    else:
        pygame.draw.rect(screen, ic, (x,y,w,h)) 

    smallText = pygame.font.SysFont("Bauhaus 93",30)
    textSurf, textRect = text_objecten(msg, smallText)
    textRect.center = ( (x+(w/2)), (y+(h/2)) )
    screen.blit(textSurf, textRect)

它基本上只是检查鼠标在某个区域内的点击,如果它检测到它执行代码。

现在在我的启动屏幕上,我有一个按钮start,我想让它结束game_intro()循环,但是尝试intro = False不会产生任何结果。尝试break不起作用,因为它必须在循环本身中。

所以我的问题是:如何让这个start按钮真正结束game_intro()循环?

附言:我是Python的新手

EN

Stack Overflow用户

发布于 2020-05-25 21:29:24

你可以做一些OOP。尝试在类中创建它,如下所示:

代码语言:javascript
运行
复制
class Intro:

  def __init__(self):
    self.intro = True

  def game_intro(self): 
    mixer.music.load("musicIntro.mp3")
    mixer.music.set_volume(0.02) 
    mixer.music.play(-1) 
    while self.intro:
        for event in pygame.event.get():
            if event.type == pygame.QUIT: 
                pygame.quit()
                quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    self.intro = False
        screen.blit(startscherm_img, bordrect) 
        clock.tick(30)
        button("Start",302,517,94,44,donkerOranje,lichtOranje,"start")
        button("Music",553,517,94,44,donkerOranje,lichtOranje,"toggleMusic")
        button("Quit",803,517,94,44,donkerOranje,lichtOranje,"quit")
        pygame.display.flip() 

  def button(self, msg,x,y,w,h,ic,ac,action=None): 
    mousePos = pygame.mouse.get_pos() 
    click = pygame.mouse.get_pressed() 
    if x+w > mousePos[0] > x and y+h > mousePos[1] > y: 
        pygame.draw.rect(screen, ac, (x,y,w,h)) 
        if click[0] == 1 and action != None: 
            if action == "toggleMusic": 
                PAUSE.toggle()
                time.sleep(0.3)
            elif action == "quit": 
                pygame.quit()
                time.sleep(0.3)
            elif action == "start": 
                time.sleep(0.3)
                self.intro = False


obj = Intro()
start = obj.gameintro()

intro是使用self在实例中定义的,因此可以在类中的任何位置调用它。

票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62003167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档