当我运行我的代码时,我的 pygame 代码冻结了



每当我运行代码时,整个事情都会冻结,我不确定为什么,它应该只显示所有内容(它确实如此(,但是当我单击鼠标时,它应该打印"yeet">

我不知道它是否与while循环有关

我删除了它,但后来它没有更新游戏

这是整个代码

import pygame
import time
pygame.init()
screen = pygame.display.set_mode((1200, 800))
done = False
pygame.font.get_fonts()
fourty = pygame.font.SysFont('Comic Sans MS', 40)
ten = pygame.font.SysFont('Comic Sans MS', 10)
twenty = pygame.font.SysFont('Comic Sans MS', 20)
thirty = pygame.font.SysFont('Comic Sans MS', 30)
sixty = pygame.font.SysFont('Comic Sans MS', 60)
fifty = pygame.font.SysFont('Comic Sans MS', 50)
clock = pygame.time.Clock()
WHITE = pygame.Color("#ffffff")
BLACK = pygame.Color("#000000")
RED = pygame.Color("#e6000d")
BLUE = pygame.Color("#0b5dff")
YELLOW = pygame.Color("#d8fb06")
GREEN = pygame.Color("#00e600")
screen.fill(WHITE)
play=bool()
play = False

def refresh():
pygame.display.update()
pygame.display.flip()
clock.tick(60)
def main():
global play
hangman = fourty.render("WELCOME TO HANGMAN", True, (BLACK))
screen.blit(hangman, [360, 200])                
go = thirty.render("CLICK ANYWHERE TO START", True, (BLACK))
screen.blit(go, [551,445])
clock.tick(100)
while True:   
refresh()
if play == True:
play()        

def play():
print ("yeet")

main()


while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.MOUSEBUTTONDOWN:
if play == False:
play == True
clock.tick(60)

pygame.display.flip()

有一个无限循环,main中没有任何事件处理。你根本不需要那个循环。使用主应用程序循环。 此外,play是函数的名称,因此声明游戏状态的变量的名称应该具有不同的名称(例如playgame(:

def refresh():
pygame.display.flip()
clock.tick(60)
def main():
hangman = fourty.render("WELCOME TO HANGMAN", True, (BLACK))
screen.blit(hangman, [360, 200])                
go = thirty.render("CLICK ANYWHERE TO START", True, (BLACK))
screen.blit(go, [551,445])
def play():
print ("yeet")
playgame = False
done = False
while not done:
# handle events
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.MOUSEBUTTONDOWN:
if playgame == False:
playgame = True
# clear display
screen.fill(WHITE)
# draw scene dependent on game state `playgame` 
if playgame:
play()
else:
main()
# update dispaly
refresh()

最新更新