Python / Pygame:如何使用KEYUP事件打破由KEYDOWN事件启动的while循环?

时间:2014-07-30 01:39:26

标签: python loops user-interface colors pygame

我正在开发一个应用程序,允许用户在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事件?我不知道如何实现这一点。

我为可能提出类似的问题而道歉,但是看了很多这样的问题对我来说没有任何结果,所以我决定自己问一下,根据我的情况,我觉得它有所不同。

1 个答案:

答案 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()

与往常一样,请确保调整帧速率,以便以合理的速度进行。