Python游戏退出问题
我试图让我的程序退出时,ESC键被按下,但也如果windows退出按钮被单击 目前我有以下代码:Python游戏退出问题,python,pygame,Python,Pygame,我试图让我的程序退出时,ESC键被按下,但也如果windows退出按钮被单击 目前我有以下代码: done = False while not done: for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: done = True break
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
done = True
break # break out of the for loop
elif event.type == pygame.QUIT:
done = True
break # break out of the for loop
if done:
break # to break out of the while loop
# your game stuff
for dict_containing_value in holdList:
i = dict_containing_value['value']
#pygame.event.pump
if (i=="("):
drawBracketBox(bracketColor, x, y)
label = myfont.render(str(i), 1, (0,0,0))
screen.blit(label, ((x+x)*50+25,(y+y+y)*50+25))
x=x+1
elif (i==")"):
drawBracketBox(bracketColor, x, y)
label = myfont.render(str(i), 1, (0,0,0))
screen.blit(label, ((x+x)*50+31,(y+y+y)*50+25))
x=x+1
elif (i=="IF"):
drawFunctionBox(functionColor, x, y)
label = myfont.render(str(i), 1, (0,0,0))
screen.blit(label, ((x+x)*50+21,(y+y+y)*50+22))
x=x+1
elif (i=="sum"):
drawFunctionBox(functionColor, x, y)
label = myfont.render((i), 1, (0,0,0))
screen.blit(label, ((x+x)*50+14,(y+y+y)*50+22))
x=x+1
elif (i=="+"):
drawOperatorCircle(opColor, x, y)
label = myfont.render(str(i), 1, (0,0,0))
screen.blit(label, ((x+x)*50+31,(y+y+y)*50+22))
x=x+1
elif (i=="-"):
drawOperatorCircle(opColor, x, y)
label = myfont.render(str(i), 1, (0,0,0))
screen.blit(label, ((x+x)*50+32,(y+y+y)*50+22))
x=x+1
elif (i=="*"):
drawOperatorCircle(opColor, x, y)
label = myfont.render(str(i), 1, (0,0,0))
screen.blit(label, ((x+x)*50+31,(y+y+y)*50+26))
x=x+1
elif (i=="/"):
drawOperatorCircle(opColor, x, y)
label = myfont.render(str(i), 1, (0,0,0))
screen.blit(label, ((x+x)*50+32,(y+y+y)*50+22))
x=x+1
else:
drawConstantBox(constColor, x, y)
label = myfont.render(str(i), 1, (0,0,0))
screen.blit(label, ((x+x)*50+14,(y+y+y)*50+22))
x=x+1
pygame.display.update()
当前输出是持续循环my for dict_,其中包含holdList:loop中的_值,这意味着它会多次打印输出-这不是我想要的结果
请看下面的图片顶部的图片是我目前的结果,按钮是我想要的结果
您可以创建一个终止函数:
def terminate():
pygame.quit()
sys.exit()
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.quit()
sys.exit()
elif event.type == pygame.QUIT:
pygame.quit()
sys.exit()
当按下/释放退出键或/和调用退出事件时,调用和终止
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
done = True
elif event.type == pygame.QUIT:
done = True
if done:
terminate()
或
或者,您可以只调用pygame.quit和sys.exit,而不使用函数:
def terminate():
pygame.quit()
sys.exit()
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.quit()
sys.exit()
elif event.type == pygame.QUIT:
pygame.quit()
sys.exit()
测试是否在按下键之前退出,而不是在按下键之后退出,因为ESC也是一个按下键事件x设置的初始值在哪里?一般来说,您希望循环运行不止一次,对吗?否则,为什么要编写循环?随着时间的推移,你认为x的值会发生什么变化?为什么?@KarlKnechtel它们的定义就在我开始复制的地方。很抱歉错过了。它们只是声明为x=1,y=1请发布完整的代码;holdList是在哪里定义的?此外,当while循环不断检查用户输入时,它也会进行反复的操作。将睡眠放在那里可能只有10毫秒,但它会阻止您的CPU阻塞。@Arond在定义holdList的地方发布需要发布我的大部分代码-我知道我的for循环可以工作,因为它显示了我所附图片下半部分中显示的内容-但是问题是,当我运行程序时,窗口立即停止响应-因此我认为这是因为它需要知道何时退出?事件检查代码似乎是正确的。如果你有一个双缓冲的表面,你应该清除和翻转它的每一个循环,以避免覆盖问题,你似乎有。另外,由于x值是在循环之外定义的,所以在whilenotdone代码的下一次迭代中,它永远不会设置为1。您的答案应该有很多信息,以便任何人都能理解,这应该是一条注释