我试图在我的游戏中添加跳跃物理,但在玩家跳跃之后,跳跃键必须被禁用,直到玩家再次落地。现在,重力没有任何问题,但是如果玩家继续按住K_UP,他可以永远飞行,他可以像他应该的那样穿着抛物线飞行,所以我需要禁用跳跃,直到角色落地,跳跃循环像预期的那样循环。我尝试了pygame.event.set_blocked(pygame.K_UP)
,但是当我跳转时,窗口崩溃了,并且有一个错误代码:"pygame.event.set_blocked(pygame.K_UP) ValueError: event type out of range“。
因为我找不到关于这个命令的任何东西,除了它存在之外,我可能在使用.block()的游戏循环中犯了一个错误。这就是游戏循环
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
#player1 buttons
if event.type == pygame.KEYDOWN:
#move
if event.key == pygame.K_LEFT:
playerX_change = -1
if event.key == pygame.K_RIGHT:
playerX_change = 1
#Jump
if event.key == pygame.K_UP:
playerY_change = -3
player_jump = True
pygame.event.set_blocked(pygame.K_UP)
if player_jump == True:
playerY_change += gravity
# for X player 1
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
playerX_change = 0
#for Y player 1
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
if playerY == 900:
playerY_change = 0
player_jump = False
pygame.event.set_allowed(pygame.K_UP)
我是Pygame (和一般编程)的新手,经历了很多事情,这就是我的结果,所以可能我也有不必要的代码在里面。我的问题是pygame.event.set_blocked
和pygame.event.set_allowed
的部分,我不知道如何使用它们。
发布于 2021-04-10 07:24:28
pygame.event.set_blocked
不能阻止密钥,它只能阻止KEYDOWN
或KEYUP
之类的事件。
无论如何,你不需要“阻止”任何东西。改用布尔状态变量player_jump
:
if not player_jump and event.key == pygame.K_UP:
playerY_change = -3
player_jump = True
playerY_change += gravity
https://stackoverflow.com/questions/67031751
复制相似问题