我正在开发一个应用程序,允许用户在3个不同的变量(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()
我怀疑我需要以某种方式检查我的while循环中的pygame事件?我不知道如何实现这一点。
我为可能提出类似的问题而道歉,但是看了很多这样的问题对我来说没有任何结果,所以我决定自己问一下,根据我的情况,我觉得它有所不同。
答案 0 :(得分: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()
与往常一样,请确保调整帧速率,以便以合理的速度进行。