How can I make a sprite move when a key is held down?
Как я могу заставить спрайт двигаться, когда нажата клавиша?
В настоящее время спрайт перемещается только на один пиксель при каждом нажатии клавиши. Как я могу заставить спрайт plumber постоянно перемещаться при нажатой левой или правой клавише?
while running: setup_background() spriteimg = plumberright
while running: keys = pygame.key.get_pressed() # Checking pressed keys if keys[pygame.K_UP]: y1 -= 1 if keys[pygame.K_DOWN]: y1 += 1
Ответ 2
События клавиатуры (см. Модуль pygame.event) происходят только один раз при изменении состояния клавиши. KEYDOWN Событие происходит один раз при каждом нажатии клавиши. KEYUP происходит один раз при каждом отпускании клавиши. Используйте события клавиатуры для одиночного действия или пошагового перемещения.
Если вы хотите добиться непрерывного перемещения, вы должны использовать pygame.key.get_pressed(). pygame.key.get_pressed() возвращает список с состоянием каждой клавиши. Если клавиша нажата, состояние клавиши равно True, в противном случае False. Это снимок клавиш, в этот самый момент новое состояние клавиш должно непрерывно восстанавливаться в каждом кадре. Используйте pygame.key.get_pressed() для оценки текущего состояния кнопки и получения непрерывного движения:
while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False
keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: x1 -= 1 if keys[pygame.K_RIGHT]: x1 += 1 if keys[pygame.K_UP]: y1 -= 1 if keys[pygame.K_DOWN]: y1 += 1
rect = pygame.Rect(0, 0, 20, 20) rect.center = window.get_rect().center vel = 5
run = True while run: clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False if event.type == pygame.KEYDOWN: print(pygame.key.name(event.key))
keys = pygame.key.get_pressed()
rect.x += (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * vel rect.y += (keys[pygame.K_DOWN] - keys[pygame.K_UP]) * vel
Событие KEYDOWN для установки флага перемещения. Событие KEYUP для снятия флага. В процессе перемещения просто проверяйте флаг в каждом кадре. Если установлен, перемещайте, а если не установлен, то не перемещайте.