Я не могу заставить клавиши модуля перемещения работать, я не могу их выбрать

#pygame

#pygame

Вопрос:

Я создаю модуль, чтобы упростить перемещение прямоугольников, но я не могу заставить его работать, я хочу иметь возможность называть ключи, которые он использует, но, похоже, я не могу заставить это работать, вот мой код:

 import pygame

#this is where i would have i find out what keys the user want's to use
#The k1,k2,k3,k4s
def move(rect, vel, k1,k2,k3,k4):
    keys = pygame.key.get_pressed()
    if keys[pygame.K_k1]:
        rect.x -= vel
    if keys[pygame.K_k2]:
        rect.x  = vel
    if keys[pygame.K_k3]:
        rect.y -= vel
    if keys[pygame.K_k4]:
        rect.y  = vel

screen= pygame.display.set_mode([500,500])

running =  True
red = pygame.Rect(225,225,50,50)
clock = pygame.time.Clock()
while running:
    screen.fill([255,255,255])
    pygame.draw.rect(screen,[255,0,0],red)
    pygame.display.flip()
    move(red,10,"a","d","w","s")
    #ADWS being the keys i want to use to move
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            running = False
  

Ответ №1:

get_pressed() Метод возвращает массив значений ascii для нажатых в данный момент клавиш. Поскольку это стандартный ascii, пользователь может вводить клавиши для left right up down, и скрипт может преобразовать их в ascii с помощью ord функции.

Попробуйте этот код:

 import pygame

keylst = input('Enter Keys to use (Left Right Up Down)').lower() # enter> a d w s

kLeft, kRight, kUp, kDown = (ord(k) for k in keylst.split())  # ascii codes, split on space

#this is where i would have i find out what keys the user want's to use
#The k1,k2,k3,k4s
def move(rect, vel):
    keys = pygame.key.get_pressed()
    if keys[kLeft]:
        rect.x -= vel
    if keys[kRight]:
        rect.x  = vel
    if keys[kUp]:
        rect.y -= vel
    if keys[kDown]:
        rect.y  = vel

screen= pygame.display.set_mode([500,500])

running =  True
red = pygame.Rect(225,225,50,50)
clock = pygame.time.Clock()
while running:
    screen.fill([255,255,255])
    pygame.draw.rect(screen,[255,0,0],red)
    pygame.display.flip()
    move(red,1)
    #ADWS being the keys i want to use to move
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            running = False