Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/Pygame:如何用KEYUP事件打破KEYDOWN事件启动的while循环?_Python_Loops_User Interface_Colors_Pygame - Fatal编程技术网

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

Python/Pygame:如何用KEYUP事件打破KEYDOWN事件启动的while循环?,python,loops,user-interface,colors,pygame,Python,Loops,User Interface,Colors,Pygame,我正在开发一个应用程序,它允许用户从3个不同的变量(R、G、B)中进行加减。然后,这些变量的值将被处理并用于在屏幕上绘制它们所代表的各自颜色的图片 为了实现这一点,我实现了六个不同的键来处理这个操作:q、w、e和a、s、d。前三个用于向分配的变量中添加,后三个用于从相同的分配变量中减去 我已经成功地完成了这一点,但我不想按一个键最多255次以获得最大值,而是想实现某种循环,只要按下一个键,循环就会继续,然后在不再按下一个键时停止 有关守则如下: def main(): global ke

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


很抱歉,我可能会问一个类似的问题,但是看了很多像这样的问题对我来说都没有结果,所以我决定自己问,因为我觉得这与我的情况不同。

你不需要为此开始第二个循环。在主循环中,只需检查keypressed是否仍然为true,并将更改应用于变量。颜色变化效果应一次又一次地重复,直到记录了按键事件。
因此,您的主循环如下所示:

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()
一如既往,请确保调整帧速率,以便以合理的速度进行此操作。

非常感谢我不敢相信我的问题有这么简单的答案。我真的想得太多了。再次感谢!