我正在制作一款马里奥风格的游戏。我已经实现了碰撞和跳跃,但是有一个问题。如果我一直按住空格键,角色就会不断跳跃。我不希望这种情况发生。我希望玩家必须松开空格键,然后再次按下空格键,才能再次跳跃。而不是仅仅按住空格键来继续跳跃。换句话说,一旦玩家跳跃并落地,即使按住空格键,玩家也不应该跳跃。
我该如何以简单的方式做到这一点?这是有问题的代码部分:
if keys[pygame.K_w] and not in_air and collided:
in_air = True
y_velocity += jump_acceleration
collisions = False
我尝试实现一个“last_jumped_time”变量,让玩家只能每 1 秒跳跃一次。然而,这并没有真正完全回答我的问题。我认为我必须在某个地方使用 pygame.KEYUP 函数来等待向上键被释放。
事实证明,您可以通过实际侦听 KEYDOWN 事件而不是 KEYUP 事件来做到这一点,因为只有在尚未按下某个键时才能按下该键。这是一个简单的示例,按下 W 键时会短暂更改窗口的颜色,然后在释放 W 键并再次按下之前不会再次更改:
import pygame
width = height = 500
screen = pygame.display.set_mode((width, height))
run = True
while run:
screen.fill((255, 255, 255))
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
screen.fill((255, 0, 0))
pygame.display.update()