Ваш код почти правильный, он просто проверяет события неправильно. Вам нужно проверить, что event.key
равно коду ключа вашей проверки.
Существующий код просто говорит что-то вроде:
if pygame.K_LEFT:
Но pygame.K_LEFT
это просто число, как говоря if 27:
что всегда верно.
Просто добавьте туда event.key
, чтобы исправить это:
if event.key == pygame.K_LEFT:
Также не забудьте использовать elif
(иначе, если) , так как это более эффективно. Если ключевое событие, скажем, ВЛЕВО, оно не может тоже быть ПРАВЫМ, поэтому нет необходимости проверять другие коды. Вы можете пропустить их проверку с помощью if .. elif
.
. Применение этих исправлений к вашему основному l oop заставляет игрока двигаться нормально:
for event in pygame.event.get():
#here i check if the button is pressed
if event.type == KEYDOWN:
if event.key == pygame.K_LEFT:
left = True
elif event.key == pygame.K_RIGHT:
right = True
elif event.key == pygame.K_UP:
up = True
elif event.key == pygame.K_DOWN:
down = True
#Here I check if a button is not pressed
elif event.type == KEYUP:
if event.key == pygame.K_LEFT:
left = False
elif event.key == pygame.K_RIGHT:
right = False
elif event.key == pygame.K_UP:
up = False
elif event.key == pygame.K_DOWN:
down = False
#Checks for quiting the app
elif event.type == QUIT:
pygame.quit()
sys.exit()