Python 3.x Pygame“;“太空入侵者”;同时单击左键和右键时取消移动的键控

Python 3.x Pygame“;“太空入侵者”;同时单击左键和右键时取消移动的键控,python-3.x,pygame,Python 3.x,Pygame,首先,这是我第一次问关于堆栈溢出的问题,所以如果我把事情搞砸了或者问了一个重复的问题,我表示歉意。我通常会在提问之前先查找问题,老实说,这个bug是youtube教程的一部分,所以我希望以前有人问过它,但我很难用一种在搜索查询中有意义的方式来表达它,而且我所搜索的内容并没有给我带来任何实质性的答案。 对于这段代码,我想将速度设置为一定的数值,并在释放时将其降为0,这样玩家就可以按住键继续移动,直到释放为止 if event.type == pygame.KEYDOWN: if event

首先,这是我第一次问关于堆栈溢出的问题,所以如果我把事情搞砸了或者问了一个重复的问题,我表示歉意。我通常会在提问之前先查找问题,老实说,这个bug是youtube教程的一部分,所以我希望以前有人问过它,但我很难用一种在搜索查询中有意义的方式来表达它,而且我所搜索的内容并没有给我带来任何实质性的答案。 对于这段代码,我想将速度设置为一定的数值,并在释放时将其降为0,这样玩家就可以按住键继续移动,直到释放为止

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_LEFT:
        playerXchange = -0.3
    if event.key == pygame.K_RIGHT:
        playerXchange = 0.3
if event.type == pygame.KEYUP:
    if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
        playerXchange = 0
正常情况下,这是可行的,但如果您先单击左键,然后单击右键,而不先释放左键,一旦释放左键,但仍按下右键,它将停止移动,因为从技术上讲,即使仍按下右键,也已检测到KEPUP事件。当然,这是有道理的,它做的正是它应该做的,但我想修复它,让它继续移动。 我曾想过查看事件,看看是否仍在运行任何按键,只有在未检测到按键时,才将playerXchange降至0,但我想不出一种方法。 如果有人问过这样的问题,我再次表示歉意,我希望能有一个链接。

使用pygame.key.get_pressed()。这将返回一个列表,其中每个键按下时都有一个1,未按下的键都有一个0,并使用pygame.K_LEFT和pygame.K_RIGHT常量编制索引

playerXchange = 0

pressed = pygame.key.get_pressed()

if pressed[pygame.K_LEFT]:
    playerXchange = -0.3
elif pressed[pygamse.K_RIGHT]:
    playerXchange = 0.3
`当你这样做的时候

如果按下[pygame.K_LEFT]:
playerXchange=-0.3
elif按下[pygamse.K_RIGHT]:
playerXchange=0.3
只有在释放
时才能向右移动。如果按住
left
并按
right
,您仍在向左移动

如果要根据上次按下的键移动,则必须在
KEYUP
中使用不同的逻辑。仅当释放当前方向的方向键时,才设置
playerXchange=0

如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
playerXchange=-0.3
如果event.key==pygame.K_RIGHT:
playerXchange=0.3
如果event.type==pygame.KEYUP:
#如果向左移动,K_向左释放
如果event.key==pygame.K_左且playerXchange<0:
playerXchange=0
#如果向右移动并释放K_向右:
如果event.key==pygame.K_RIGHT且playerXchange>0:
playerXchange=0

很酷,很高兴能帮上忙!请单击答案旁边的勾号,以便将其设置为so系统中的答案,其他人也可以找到它。