Python 只要我';我拿着一个按钮,一旦松开按钮,就会恢复正常

Python 只要我';我拿着一个按钮,一旦松开按钮,就会恢复正常,python,pygame,Python,Pygame,我正在制作我的第一个游戏。我正在使用Python和PyGame。到目前为止,一切进展顺利,但我遇到了一个似乎无法解决的问题: 我希望我的角色只要按下一个按钮就做一个特定的动作。 通常,当你想让你的角色移动时,我会这样做 if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: 这样,当你按下空格键时,角色会做一些事情,但如果你按住空格键,角色只会做一次。 我想我会这么做的 if event.type == pyg

我正在制作我的第一个游戏。我正在使用Python和PyGame。到目前为止,一切进展顺利,但我遇到了一个似乎无法解决的问题:

我希望我的角色只要按下一个按钮就做一个特定的动作。 通常,当你想让你的角色移动时,我会这样做

if event.type == pygame.KEYDOWN:

    if event.key == pygame.K_SPACE:
这样,当你按下空格键时,角色会做一些事情,但如果你按住空格键,角色只会做一次。 我想我会这么做的

if event.type == pygame.KEYDOWN:

    while event.key = pygame.K_SPACE
但当我运行这个程序并按下空格键时,程序阻塞了,我得到了“程序没有反应”的结果

最后一次。我想让我的角色在我保持空间的时候做点什么,当我放手的时候,我想让它回到原来的样子。 例如:默认情况下,我的角色正在行走。当我保持空间时,我希望它爬行的时间和我保持空间的时间一样长。最后,一旦我放开空间,我希望它能回到正常的行走状态

这是可能的吗?

如果在接收到
向下键
事件时按下空格键,则设置状态(
spacePressed
)。如果释放空格并接收到
KEYUP
,则重置状态并静止字符位置。根据主应用程序循环中按下的
空格移动字符,例如:

spacePressed=False
运行时:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_空间:
spacePressed=True
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_空间:
spacePressed=False
#重置字符
# [...]
如果按空格键:
#移动字符
# [...] 

另一个选项是,如果接收到
KEYUP
事件,则用于在主应用程序循环中获取按下的键并重置字符的位置:

运行时:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_空间:
#重置字符
# [...]
keys=pygame.key.get_pressed()
如果键[pygame.K_SPACE]:
#移动字符
# [...] 
如果在接收到
向下键
事件时按下空格,则设置状态(
spacePressed
)。如果释放空格并接收到
KEYUP
,则重置状态并静止字符位置。根据主应用程序循环中按下的
空格移动字符,例如:

spacePressed=False
运行时:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_空间:
spacePressed=True
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_空间:
spacePressed=False
#重置字符
# [...]
如果按空格键:
#移动字符
# [...] 

另一个选项是,如果接收到
KEYUP
事件,则用于在主应用程序循环中获取按下的键并重置字符的位置:

运行时:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_空间:
#重置字符
# [...]
keys=pygame.key.get_pressed()
如果键[pygame.K_SPACE]:
#移动字符
# [...] 

也许您只需在while循环中添加一个
时间。sleep(0.1)
不要在while
中使用
while。如果在按下键事件中报告了空间,则设置标志,并在释放空间时将其重置。然后在主循环中检查该标志。难道你不能只监听
KEYUP
事件吗?也许你只是在while循环中添加了一个
时间。sleep(0.1)
在while循环中不要使用
while
。如果在按下键事件中报告了空间,则设置标志,并在释放空间时将其重置。然后在主循环中检查该标志。您不能只监听
KEYUP
事件吗?