且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

pygame键被按下

更新时间:2023-12-03 10:12:52

事件KEYDOWN表示键的状态从UP变为DOWN"-并不意味着键一直处于按下状态"

Event KEYDOWN means "key changed state from UP to DOWN" - it doesn't means "key is held pressed all time"

当您开始按下键时-会生成事件KEYDOWN,而pygame.event.get()返回的列表不会为空-并且for循环可以执行if pygame.event.get()

When you start pressing key - it generate event KEYDOWN and pygame.event.get() returns not empty list - and for loop can execute if pygame.event.get()

按住键时-它不会生成事件KEYDOWN-并且pygame.event.get()返回空列表-并且for循环不会执行if pygame.event.get()

When you hold key pressed - it doesn't generate event KEYDOWN - and pygame.event.get() returns empty list - and for loop doesn't execute if pygame.event.get()

您的代码应类似于

running = True
while running:
    # check events 
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == pygame.K_q:
               running = False

    # do it outside of `for event` loop
    # it is executed many times 
    if pygame.key.get_pressed()[pygame.K_a]: 
        print "Key is hold pressed..."

    pygame.display.update()

或-当您只需要执行一次操作

or - when you need to execute something only once

key_A_pressed = False

running = True
while running:
    # check events 
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == pygame.K_q:
               running = False

            elif event.key == pygame.K_a:
               key_A_pressed = True

               # it is executed only once
               print "Key A - start pressing"

        if event.type == KEYUP:
            if event.key == pygame.K_a:
               key_A_pressed = False

               # it is executed only once
               print "Key A - stop pressing"

    # do it only once - outside of `for event` loop
    # it is executed many times 
    #if pygame.key.get_pressed()[pygame.K_a]: 
    # or
    if key_A_pressed:
        print "Key A is held pressed..."

    pygame.display.update()