问题描述
我正在尝试实现一个功能,通过按住 WASD 键,我的角色在屏幕上可以移动,而按空格键应该会导致我的角色攻击。用户不能按住空格键进行攻击,同时可以按住 WASD 键移动。这个实现会导致攻击的预期行为,但它会导致移动也被按下一个键激活,因此无法按住 WASD 移动:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
pressed = pygame.key.get_pressed()
if pressed[pygame.K_w]:
pos_y += speed //change y-position by the value of speed
if pressed[pygame.K_a]:
pos_x -= speed
if pressed[pygame.K_s]:
pos_y -= speed
if pressed[pygame.K_d]:
pos_x += speed
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
attack() //execute attack logic - irrelevant for this example
有没有办法区分按键是按住还是刚刚按下?
解决方法
pygame.key.get_pressed()
返回一个包含每个键状态的序列。如果某个键被按下,则该键的状态为 True
,否则为 False
。使用 pygame.key.get_pressed()
评估按钮的当前状态。您必须在应用程序循环而不是事件循环中调用 pygame.key.get_pressed()
:
# application loop
while True:
#event loop
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
attack()
pressed = pygame.key.get_pressed()
if pressed[pygame.K_w]:
pos_y += speed
if pressed[pygame.K_a]:
pos_x -= speed
if pressed[pygame.K_s]:
pos_y -= speed
if pressed[pygame.K_d]:
pos_x += speed
# [...]