我在pygame和python中制作一个游戏,我的移动代码设置为yp像这样
if (pygame.key.get_pressed() [pygame.K_a] != 0):
moving = True
xPos_change = -3
xPos += xPos_change
if (pygame.key.get_pressed() [pygame.K_d] != 0):
moving = True
xPos_change = 3
xPos += xPos_change
然后,当布尔移动=真时,它播放动画我不想同时按两个同时使你的角色停止,如果你按两个。例如,如果我向左移动,我然后按a向右移动,而我按下然后d覆盖它并移动到右eben如果我持有一个因为d是最后一个按键。基本上我想要最后一个按下的键来覆盖最后按下的键。但是我该怎么做?
P.S我希望我的问题很清楚,我有一个不能正确陈述我的问题并且我得到很多反弹的倾向
答案 0 :(得分:0)
普通解决方案只是使用elif
代替if
进行第二次测试,但是a
键始终优先于d
键,而不是{理想的任何一个。
更好的解决方案是将输入处理与物理模拟进一步分离。因此,您不必直接对密钥进行xPos更改,而是首先处理所有输入以确定用户按下的方向,然后将该方向应用于操作:
# process input
direction = 0
if (pygame.key.get_pressed() [pygame.K_a] != 0):
direction -= 1
if (pygame.key.get_pressed() [pygame.K_d] != 0):
direction += 1
# process physics
if direction == -1:
moving = True
xPos_change = -3
xPos += xPos_change
elif direction == 1:
moving = True
xPos_change = 3
xPos += xPos_change
如果用户现在按下两个键,则他们互相取消,direction
为0。