我正在学习python和pygame。我正在努力寻找我的代码中的问题。当我按住一个键的同时按下另一个键,然后以我按下的相同顺序松开它们,有时会使我的小角色向相反的方向移动。
下面是我正在苦苦挣扎的代码:
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
keystate = pygame.key.get_pressed()
if event.type == pygame.QUIT: # if user clicked close
running = False # flag done to exit this loop
# all game logic / controls should go below this comment
elif event.type == KEYDOWN:
if keystate[K_SPACE]:
print ('pressed space')
player.move_up = True
elif keystate[K_RIGHT]:
print ('pressed right')
player.move_right = True
elif keystate[K_LEFT]:
print ('pressed left')
player.move_left = True
elif event.type == KEYUP:
if keystate[K_SPACE]:
print ('released space')
player.move_up = False
elif keystate[K_RIGHT]:
print ('released right')
player.move_right = False
elif keystate[K_LEFT]:
print ('released left')
player.move_left = False
if player.move_up:
player.pos[1] -= 3
if player.move_up == False:
if player.pos[1] < ground_level:
player.pos[1] +=3
if player.move_right:
player.pos[0] += 5
if player.move_left:
player.pos[0] -= 5`
到目前为止,我没有任何实际的物理知识,而他只是到处飞来飞去。但这没关系,我只是想解决我已经有的问题。
发布于 2013-01-07 14:53:46
您永远不会在KEYUP
事件上更新keystate
的值,因此,它仍然具有上次触发KEYDOWN
事件时的值。
要修复此问题,请更改此设置...
if event.type == KEYDOWN:
keystate = pygame.key.get_pressed()
要这样做:
if event.type in (KEYDOWN, KEYUP):
keystate = pygame.key.get_pressed()
https://stackoverflow.com/questions/14189488
复制相似问题