Python/Pygame:如何用KEYUP事件打断由KEYDOWN事件启动的while循环?
我正在开发一个应用程序,让用户可以对三个不同的变量(R、G、B)进行加减。这些变量的值会被处理,然后用来在屏幕上绘制出它们所代表的颜色的图像。
为了实现这个功能,我设置了六个不同的按键来处理这个操作:q、w、e 和 a、s、d。前面三个按键用来增加它们各自对应的变量的值,后面三个则用来减少这些变量的值。
我已经完成了这些功能,但我希望能实现一个循环,这样当按住某个按键时,它就会持续增加或减少值,而不是需要按最多255次才能达到最大值,松开按键后再停止。
相关的代码如下:
def main():
global keypressed
while True:
#Displays current coordinates of mouse
mouseText=str(pygame.mouse.get_pos())
mousecoordstext = font.render('(X,Y) - '+ mouseText + ' ', 1, (black), (gray5))
Surface.blit(mousecoordstext, (155,105))
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
keypressed = True #A key is being pressed, initiate loop after figuring out what key it was
if event.key == K_ESCAPE:
pygame.quit
sys.exit()
#Variable Explanations
#changeType: indicates either subtraction or addition to variable
#color: indicates what color is being changed
if event.key == K_q:
changeType = 1
color = 1
elif event.key == K_a:
changeType = 0
color = 1
elif event.key == K_w:
changeType = 1
color = 2
elif event.key == K_s:
changeType = 0
color = 2
elif event.key == K_e:
changeType = 1
color = 3
elif event.key == K_d:
changeType = 0
color = 3
if event.type == KEYUP:
keypressed = False #A key is no longer being pressed
#The loop in question is below
while keypressed:
if keypressed == False: #When a key is no longer being pressed
break
else:
Color_Update(changeType, color)#Calculate color changes
Color_Draw(red, green, blue)#Draw the new color
pygame.display.update()
main()
我怀疑我需要在我的循环中检查一下pygame的事件?但我不太确定该怎么做。
很抱歉可能问了一个类似的问题,但我看了很多这样的提问都没有找到答案,所以我决定自己问,因为我觉得我的情况有所不同。
1 个回答
0
你不需要再开一个循环来处理这个问题。在你的主循环里,只要检查一下keypressed这个变量是不是还是true,然后对你的变量进行相应的修改。颜色变化的效果应该一直重复,直到检测到一个KEYUP事件为止。
所以,你的主循环大概可以写成这样:
while True:
for event in pygame.event.get():
if event.type == KEYDOWN:
keypressed = True
#Set your changetype and color variables
if event.type == KEYUP:
keypressed = False;
if keypressed:
Color_Update(changeType, color)
Color_Draw(red, green, blue)
pygame.display.update()
像往常一样,确保你的帧率调整得当,这样效果才会以合理的速度进行。