#python #pygame #keydown
#python #pygame #нажатие клавиши
Вопрос:
Я пытаюсь создать простую стрелялку с помощью pygame, но мне любопытно. Нажатие клавиши направления привело к перемещению фигуры. Здесь, если вы сначала нажмете клавишу правого направления, а затем клавишу левого направления, как вы можете двигаться вправо с меньшей скоростью, чем клавиша правого направления? вот мой исходный код
while True:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
pressed=pygame.key.get_pressed()
if pressed[pygame.K_LEFT]:
player_left=1
pos_x -=6
if player_left==1 and pressed[pygame.K_RIGHT]:
player_left=0
pos_x-=3
Ответ №1:
Добавьте состояния для последней клавиши направления, которая была нажата ( last_direction_key
) . Задайте состояния в KEYDOWN
событии (см. pygame.event
Модуль). Если LEFTнажата только, затем переместитесь влево. Если RIGHTнажата только, затем переместитесь вправо. Если нажаты оба LEFTи RIGHT, медленно перемещайтесь в направлении, которое не было нажато последним, в зависимости от состояния last_direction_key
:
last_direction_key = None
while True:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
if pressed[pygame.K_LEFT] or pressed[pygame.K_RIGHT]:
last_direction_key = event.key
pressed=pygame.key.get_pressed()
if pressed[pygame.K_LEFT] and pressed[pygame.K_RIGHT]:
if last_direction_key == pygame.K_LEFT:
pos_x = 3
else:
pos_x -= 3
elif pressed[pygame.K_LEFT]:
pos_x -= 6
elif pressed[pygame.K_RIGHT]:
pos_x = 6
Комментарии:
1. Большое вам спасибо за ваш ответ. Я сделал то, что вы мне сказали, и когда я впервые нажал правую клавишу и нажал левую клавишу, все сработало так, как я хотел. Однако, когда я нажал левую клавишу более двух раз, все еще удерживая правую клавишу, это сработало не так, как в первый раз. Спасибо за ваш ответ. Не могли бы вы помочь мне еще раз?
2. То, что я пытаюсь создать, — это игра, в которой враги приходят к моим персонажам, и я могу стрелять пулями, избегая их. Я собираюсь сделать возможным стрелять пулями в направлении, в котором смотрит мой персонаж, и для этого я хотел бы заставить моего персонажа двигаться вправо, но смотреть на путь влево. Я думаю, что должен быть некоторый риск для такой безопасной атаки, поэтому я подумал о способе замедления.
3. Я хочу сначала нажать клавишу, чтобы выбрать направление движения, а затем клавишу, чтобы посмотреть направление стрельбы. Например, чтобы медленно двигаться вправо, сначала нажмите ПРАВУЮ клавишу, удерживайте ПРАВУЮ клавишу нажатой и стреляйте во врагов, приближающихся слева. При нажатии ЛЕВОЙ клавиши мой персонаж перемещается вправо, но я хочу сделать так, чтобы он смотрел влево. Я всегда хочу установить нормальную скорость, если одновременно не нажимаю левую или правую клавиши. Большое спасибо за вашу помощь. Если вы не поняли мой ответ, пожалуйста, продолжайте спрашивать.
4. Большое вам спасибо. 😉
5. Это сработало!!! OMG Большое вам спасибо, я буду больше учиться и стараться расти!!!