Python 为什么循环的布尔值一直被设置回True?

Python 为什么循环的布尔值一直被设置回True?,python,class,pygame,boolean,Python,Class,Pygame,Boolean,所以我正在编写一个游戏,这是我第一次使用类。我有一个类,它为背景的不同方面提供了不同的字段,为不同的背景提供了对象。 对于开始屏幕,我有一个while循环。但是,当我点击play时,它会被设置为start为False并停止循环,但当我按下它时,它会被设置为False一次,然后直接返回True,从而继续循环。我一直使用print来查看布尔值是什么 我在代码顶部定义start=True import pygame import sys pygame.init() start = True

所以我正在编写一个游戏,这是我第一次使用类。我有一个类,它为背景的不同方面提供了不同的字段,为不同的背景提供了对象。 对于开始屏幕,我有一个while循环。但是,当我点击play时,它会被设置为start为False并停止循环,但当我按下它时,它会被设置为False一次,然后直接返回True,从而继续循环。我一直使用print来查看布尔值是什么

我在代码顶部定义start=True

import pygame
import sys

pygame.init()

start = True



screen_width = 900
screen_height = 507
center_x = screen_width/2
center_y = screen_height/2

screen = pygame.display.set_mode((screen_width, screen_height))


clock = pygame.time.Clock()
FPS = 100

WHITE = (255,255,255)

bgx = 0
bgx2 = screen_width




main_bg = pygame.image.load("mainmenu.jpg")
main_bg2 = pygame.image.load("mainmenu.jpg")
first_bg = pygame.image.load("firstlvl.png")
first_bg2 = pygame.image.load("firstlvl.png")
second_bg = pygame.image.load("secondlvl.jpg")
second_bg2 = pygame.image.load("secondlvl.jpg")
third_bg = pygame.image.load("thirdlvl.jpg")
third_bg2 = pygame.image.load("thirdlvl.jpg")

#for i in range(1,7):
    #pygame.mixer.music.load("music"+str(i)+".mp3")


class layout:

#""" This class makes the layout of each screen (including buttons, music and background)"""       
    def __init__(self, background, background2, back_button, pause_button, play_button):
        self.bg = background
        self.bg2 = background2
        self.backbut = back_button
        self.pausebut = pause_button
        self.playbut = play_button

    def create_screen(self):
        screen.fill(WHITE)
        global bgx, bgx2
        bgx -= 3
        bgx2 -= 3
        screen.blit(self.bg, [bgx,0])
        screen.blit(self.bg2, [bgx2,0])

        if bgx + screen_width == 0:
            bgx = screen_width
        elif bgx2 + screen_width == 0:
            bgx2 = screen_width

        if self.playbut == True:
            butimg = pygame.image.load("playbutton.png")
            butrect = pygame.Rect(center_x-(358/2),center_y-(146/2),358,146)
            for event in pygame.event.get():
                if event.type == pygame.MOUSEBUTTONDOWN:
                    if butrect.collidepoint(event.pos):
                        start = False
                        print (start)

            screen.blit(butimg,butrect)

        if self.backbut == True:
            butimg2 = pygame.image.load("backbut.png")
            butimg2 = pygame.transform.scale(butimg2, (62, 62))
            butrect2 = pygame.Rect(10,screen_height-72,62,62)
            for event in pygame.event.get():
                if event.type == pygame.MOUSEBUTTONDOWN:
                    if butrect2.collidepoint(event.pos):
                        pass
            screen.blit(butimg2,butrect2)
        if self.pausebut == True:
            pass

        pygame.display.flip() 

main_screen = layout(main_bg, main_bg2, False, False, True)
icon_select = layout(main_bg, main_bg2, True, False, False)
lvl_select = layout(main_bg, main_bg2, True, False, True)
lvl_1 = layout(first_bg, first_bg2, False, True, False)
lvl_2 = layout(second_bg, second_bg2, False, True, False)
lvl_3 = layout(third_bg, third_bg2, False, True, False)


while start:
    print (start)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            start = False
            pygame.quit()
            sys.exit()

    main_screen.create_screen()
    clock.tick(FPS)




pygame.quit()
sys.exit


enter code here

在函数create_screen()中,需要添加一行,表示
global start
,以告知python解释器变量是在不同的范围内定义的

谢谢你的快速回答,让我试试!