如何在pygame中获得同时键盘输入

问题描述 投票:0回答:1

我正在使用 pygame 开发节奏游戏,并且我一直致力于同时获得键盘输入。
当在游戏中按下按键时,应该在屏幕上看到键光束。
但是,如果我同时按下多个键,光束不会立即出现。它们滞后并单独出现。
我该怎么做才能解决这个问题?

我的代码:

import pygame

pygame.init()


WIDTH = 1280
HEIGHT = 720
FPS = 60

SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Rhythmetric')
pygame.event.set_allowed([pygame.QUIT, pygame.KEYDOWN, pygame.KEYUP, pygame.MOUSEBUTTONDOWN])

clock = pygame.time.Clock()


pink_keybeam = pygame.image.load('img/pink_keybeam.png').convert_alpha()


is_running = True

while is_running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            is_running = False
        
    SCREEN.fill((0, 0, 0))
    if pygame.key.get_pressed()[pygame.K_d]:
        SCREEN.blit(pink_keybeam, (440, 0))
    if pygame.key.get_pressed()[pygame.K_f]:
        SCREEN.blit(pink_keybeam, (540, 0))
    if pygame.key.get_pressed()[pygame.K_j]:
        SCREEN.blit(pink_keybeam, (640, 0))
    if pygame.key.get_pressed()[pygame.K_k]:
        SCREEN.blit(pink_keybeam, (740, 0))


    pygame.display.update() 
    clock.tick(FPS)


pygame.quit()
python pygame game-development
1个回答
0
投票

根据一些 pygame 文档示例,他们声明了一个

main
函数来运行游戏循环。

您的问题的可能解决方案可能如下所示:

import os

import pygame

MAIN_DIR = os.path.split(os.path.abspath(__file__))[0]
WIDTH = 1280
HEIGHT = 720
FPS = 60


def load_image(name):
    path = os.path.join(MAIN_DIR, "img", name)
    return pygame.image.load(path).convert_alpha()


def main():
    pygame.init()
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    pygame.display.set_caption('Rhythmetric')
    pygame.event.set_allowed([pygame.QUIT, pygame.KEYDOWN, pygame.KEYUP, pygame.MOUSEBUTTONDOWN])

    clock = pygame.time.Clock()

    pink_keybeam = load_image("pink_keybeam.png")

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return

        screen.fill((0, 0, 0))

        keys = pygame.key.get_pressed()

        if keys[pygame.K_d]:
            screen.blit(pink_keybeam, (440, 0))
        if keys[pygame.K_f]:
            screen.blit(pink_keybeam, (540, 0))
        if keys[pygame.K_j]:
            screen.blit(pink_keybeam, (640, 0))
        if keys[pygame.K_k]:
            screen.blit(pink_keybeam, (740, 0))

        clock.tick(FPS)
        pygame.display.update()


if __name__ == '__main__':
    main()
    pygame.quit()

我测试了这段代码,它运行良好,您可以在下面的屏幕截图中看到:

  • 同时按下两个键:

最后,我建议您检查是否根据您的操作系统安装了 pygame 的系统依赖项。您可以在此处找到更多相关信息。

© www.soinside.com 2019 - 2024. All rights reserved.