在 Pygame 中键入而不是实际键中的数字

Keys in Pygame instead of numbers in the actual key

我想创建一个菜单点,我可以在其中更改热键并显示使用的热键,但是当我将它们放入变量中时,输出为数字。我想在按如下键时设置变量:

if event.key == pygame.K_d:
    varibleright = d

我必须对所有键都这样做,有更好的方法吗?还是我应该对所有键都这样做?

KEYDOWNKEYUP 事件提供 unicode 属性(参见 pygame.event module). The unicode attribute provides the Unicode representation of the keyboard input. A user friendly name of a key can be get by pygame.key.name():

if event.type == pygame.KEYDOWN:
    print(event.unicode)
    print(pygame.key.name(event.key))

您可以使用函数将键与 unicode 字符或字符串进行比较:

if event.type == pygame.KEYDOWN:
    if event.unicode == 'a':
        print('a')
if event.type == pygame.KEYDOWN:
    if pygame.key.name(event.key) == 'd':
        print('d')
    if pygame.key.name(event.key) == 'right':
        print('right')

这允许您为键定义变量

key_up = 'up'
key_down = 'down'
if event.type == pygame.KEYDOWN:
    if pygame.key.name(event.key) == key_up:
        print('move up')
    if pygame.key.name(event.key) == key_down:
        print('move down')

最小示例:

import pygame

pygame.init()
window = pygame.display.set_mode((400, 400))
clock = pygame.time.Clock()

rect = pygame.Rect(190, 190, 20, 20)
key_left = 'left'
key_right = 'right'
key_up = 'up'
key_down = 'down'

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False 
        if event.type == pygame.KEYDOWN:
            if event.type == pygame.KEYDOWN:
                if pygame.key.name(event.key) == key_left:
                    rect.x -= 20
                if pygame.key.name(event.key) == key_right:
                    rect.x += 20
                if pygame.key.name(event.key) == key_up:
                    rect.y -= 20
                if pygame.key.name(event.key) == key_down:
                    rect.y += 20

    window.fill(0)
    pygame.draw.rect(window, 'red', rect)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
exit()