簡體   English   中英

在pygame中管理keydown

[英]Manage keydown in pygame

我正在開發一個程序,它將顯示數組中的字母。 如果用戶按下向上箭頭,這將在陣列中移動,如果用戶按下向下箭頭。 問題是,當我按這些鍵中的任何一個時,字母移動都非常快,例如,如果我在A中,則程序會移動到D或類似的位置。 這是我的代碼

def HighScore(event):
    pygame.init()
    nameString=""
    nameStringFinal=""
    index=0
    ABC=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
    font=pygame.font.SysFont("Arial",30,True,False)
    screen=pygame.display.set_mode((700, 700))
    pygame.display.set_caption("New High Score" )
    font=pygame.image.load("imagenes/paisaje.jpg").convert()
    escape=False        
    while escape==False:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        screen.blit(fondo,(0,0))
        show=fuente.render(nombreString,0,(0,0,0))

        if event.type ==  pygame.KEYDOWN:
            if control==True:
                if event.key == pygame.K_UP:  
                    if index==25:
                        index=25
                    else:
                        index=index+1
                    nameString=ABC[index]
                elif event.key == pygame.K_DOWN:
                    if index==0:
                        index=0
                    else:
                        index=index-1
                    nameString=ABC[index]
                elif event.key == pygame.K_RETURN:
                    nameStringFinal=nameStringFinal+nameString
        screen.blit(despliegue,(200,200))
        pygame.display.flip()

您需要確保所有事件處理都正確縮進,因此這是for循環的一部分

您現在擁有的方式,最后的偶數將被反復處理,直到新事件到達

例如:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        sys.exit()

    if event.type ==  pygame.KEYDOWN:
        if event.key == pygame.K_UP:  
            if index==25:
                index=25
            else:
                index=index+1

            nameString=ABC[index]
        elif event.key == pygame.K_DOWN:
            if index==0:
                index=0
            else:
                index=index-1
            nameString=ABC[index]
        elif event.key == pygame.K_RETURN:
            nameStringFinal=nameStringFinal+nameString

screen.blit(fondo,(0,0))
show=fuente.render(nombreString,0,(0,0,0))
screen.blit(despliegue,(200,200))

在外殼程序中,您可以看到如何在空列表上進行for循環,只是將變量保留上一個循環的值

>>> for i in [1,2,3]:   # imagine this is the event list
...     if i == 4:
...         sys,exit()
... 
>>> if i == 3:
...     print "i==3"
... 
i==3
>>> for i in []:        # next time round the while loop, the event list is empty
...     if i == 4:
...         sys,exit()
... 
>>> if i == 3:          # but you're still processing this event again!
...     print "i==3"
... 
i==3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM