簡體   English   中英

Pygame中的鍵盤輸入無法正常工作

[英]Keyboard input in Pygame not working

我正在嘗試使用pygame和其他一些庫創建虛擬合成器。 可以通過兩種方式播放音符:單擊屏幕上的按鈕或按鍵盤上的按鍵。 單擊屏幕時,鍵盤輸入不起作用。

下面的代碼是Pygame循環,其中指定了兩個輸入類型。

for event in pygame.event.get():

    if event.type == pygame.QUIT:
        crashed = True

    if event.type == pygame.K_ESCAPE:
        crashed = True

    if pygame.mouse.get_pos()[0] in range(0, 50) and pygame.mouse.get_pos()[1] in range(400,
                                                                                        450) and event.type == pygame.MOUSEBUTTONDOWN:
        button(sineCod, (0, 255, 0))
        wave_1 = 0  # sine

    elif pygame.mouse.get_pos()[0] in range(100, 150) and pygame.mouse.get_pos()[1] in range(400,
                                                                                             450) and event.type == pygame.MOUSEBUTTONDOWN:
        button(sawCod, (0, 255, 0))
        wave_1 = 1  # saw
    elif pygame.mouse.get_pos()[0] in range(200, 250) and pygame.mouse.get_pos()[1] in range(400,
                                                                                             450) and event.type == pygame.MOUSEBUTTONDOWN:
        button(squareCod, (0, 255, 0))
        wave_1 = 2  # saw

    elif pygame.mouse.get_pos()[0] in range(300, 350) and pygame.mouse.get_pos()[1] in range(400,
                                                                                             450) and event.type == pygame.MOUSEBUTTONDOWN:
        button(triangleCod, (0, 255, 0))
        wave_1 = 3

    elif pygame.key.get_focused() is True:
        print("Receiving Keyboard Focus")
        if event.type == pygame.locals.KEYDOWN:
            if event.key == pygame.locals.K_w:  # C
                play(frequencies[0])

            if event.key == pygame.locals.K_2:  # C#
                play(frequencies[1])

            if event.key == pygame.K_w:  # D
                play(frequencies[2])

    if (pygame.mouse.get_pos()[0] in range(40) and pygame.mouse.get_pos()[1] in range(
            190)) or (pygame.mouse.get_pos()[0] in range(75) and pygame.mouse.get_pos()[1] in range(190,
                                                                                                    320)) and event.type == pygame.MOUSEBUTTONDOWN:  # C
        play(frequencies[0])

    elif pygame.mouse.get_pos()[0] in range(75, 150) and pygame.mouse.get_pos()[1] in range(
            320) and event.type == pygame.MOUSEBUTTONDOWN:  # D
        play(frequencies[2])

    elif pygame.mouse.get_pos()[0] in range(150, 225) and pygame.mouse.get_pos()[1] in range(
            320) and event.type == pygame.MOUSEBUTTONDOWN:  # E
        play(frequencies[4])

event.type不指定按下的鍵。 這是由event.key完成的

而不是這個:

if event.type == pygame.K_ESCAPE:

你應該做這個:

if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:

要么

pressed = pygame.key.get_pressed()
if pressed[pygame.K_ESCAPE]:

暫無
暫無

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

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