Похоже, что строка keys = pygame.key.get_pressed()
и следующие строки находятся в вашем цикле событий, и это означает, что они выполняются только один раз для каждого события в очереди событий.На самом деле они должны находиться во внешнем цикле while, поэтому просто выделите следующие строки:
while not crashed:
for event in pygame.event.get():
if event.type == pygame.QUIT:
crashed = True
keys = pygame.key.get_pressed()
if keys[pygame.K_w] and keys[pygame.K_d]:
x_change = 3
# etc.
Вы также можете немного сократить свой код:
x_change = 3
y_change = 3
crashed = False
while not crashed:
for event in pygame.event.get():
if event.type == pygame.QUIT:
crashed = True
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
x += -x_change
elif keys[pygame.K_d]:
x += x_change
if keys[pygame.K_w]:
y += -y_change
elif keys[pygame.K_s]:
y += y_change
Другой альтернативой будет удалениеkey.get_pressed
строк и просто установите x_change
и y_change
в цикле событий:
for event in pygame.event.get():
if event.type == pygame.QUIT:
crashed = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_d:
x_change = 3
# etc.
elif event.type == pygame.KEYUP:
if event.key == pygame.K_d and x_change > 0:
x_change = 0
# etc.