Если вы хотите знать, когда была нажата клавиша, вам необходимо убедиться, что тип события (event.type
) равен KEYDOWN
, а ключевой атрибут объекта события (event.key
) является конкретной клавишей (K_ESCAPE
, K_UP
, ...):
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
elif event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
elif event.key == K_UP:
block_y -= 10
elif event.key == K_DOWN:
block_y += 10
elif event.key == K_LEFT:
block_x -= 10
elif event.key == K_RIGHT:
block_x += 10
См. также модуль pygame.event
и модуль pygame.key
.
.
События клавиатуры (см. модуль pygame.event) происходят только один раз при изменении состояния клавиши. Событие KEYDOWN
происходит один раз при каждом нажатии клавиши. KEYUP
возникает один раз при каждом отпускании клавиши. Используйте события клавиатуры для одного действия или пошагового движения.
Если вы хотите добиться непрерывного движения, вы должны использовать pygame.key.get_pressed()
. pygame.key.get_pressed()
возвращает список с состоянием каждой клавиши. Если клавиша удерживается нажатой, ее состояние равно True
, в противном случае False
. Используйте pygame.key.get_pressed()
, чтобы оценить текущее состояние кнопки и получить непрерывное движение:
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
elif event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
keys = pygame.key.get_pressed()
if keys[K_UP]:
block_y -= 1
if keys[K_DOWN]:
block_y += 1
if keys[K_LEFT]:
block_x -= 1
if keys[K_RIGHT]:
block_x += 1
Более того, вам нужно перерисовывать сцену в каждом кадре:
# Importing libraries and other stuff
import pygame
from pygame.locals import *
# defining the funtion for drawing the block
def draw_block():
surface.fill((232, 127, 7))
surface.blit(block,(block_x, block_y))
pygame.display.flip()
if __name__ == "__main__":
pygame.init()
surface = pygame.display.set_mode((500,500))
clock = pygame.time.Clock()
block = pygame.image.load("block_better_3.jpg").convert()
block_x = 100
block_y = 100
# application loop
running = True
while running:
# limit the frames per second
clock.tick(100)
# handle the events
for event in pygame.event.get():
if event.type == QUIT:
running = False
elif event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
# update the game states and positions of objects
keys = pygame.key.get_pressed()
block_x += (keys[K_RIGHT] - keys[K_LEFT]) * 2
block_y += (keys[K_DOWN] - keys[K_UP]) * 2
# clear the display; draw the scene; update the display
draw_block()
pygame.quit()
Типичный цикл приложения PyGame должен: