Python-Pygame-Learning被按下
我在学习python和pygame。我正努力在代码中找到问题。当我按住一个键同时按下另一个键,然后按相同的顺序放开它们时,有时会使我的小角色朝相反的方向向后移动 以下是我正在努力解决的代码:Python-Pygame-Learning被按下,python,object,keyboard,pygame,Python,Object,Keyboard,Pygame,我在学习python和pygame。我正努力在代码中找到问题。当我按住一个键同时按下另一个键,然后按相同的顺序放开它们时,有时会使我的小角色朝相反的方向向后移动 以下是我正在努力解决的代码: while running: for event in pygame.event.get(): if event.type == KEYDOWN: keystate = pygame.key.get_pressed() if event.type == pygame.QUIT
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`
运行时:
对于pygame.event.get()中的事件:
如果event.type==KEYDOWN:
keystate=pygame.key.get_pressed()
if event.type==pygame.QUIT:#如果用户单击关闭
running=False#标记完成以退出此循环
#所有游戏逻辑/控件都应位于此注释下方
elif event.type==KEYDOWN:
如果键状态[K_空格]:
打印('按空格')
player.move_up=True
elif keystate[K_RIGHT]:
打印('右按')
player.move_right=真
elif keystate[K_LEFT]:
打印('按左')
player.move_left=真
elif event.type==KEYUP:
如果键状态[K_空格]:
打印(‘释放空间’)
player.move_up=False
elif keystate[K_RIGHT]:
打印('右侧发布')
player.move_right=错误
elif keystate[K_LEFT]:
打印('左侧发布')
player.move_left=错误
如果player.move_向上移动:
player.pos[1]=3
如果player.move_up==False:
如果玩家位置[1]<地平面:
player.pos[1]+=3
如果player.move_向右移动:
player.pos[0]+=5
如果player.move_向左移动:
player.pos[0]=5`
到目前为止,我还没有任何实际的物理知识,他只是四处飞来飞去。但没关系,我只想解决我已经遇到的问题。在
KEYUP
事件中,您永远不会更新keystate
的值。因此,每当上次触发KEYDOWN
事件时,它仍然具有它所具有的任何值
要修复此问题,请更改此
if event.type == KEYDOWN:
keystate = pygame.key.get_pressed()
为此:
if event.type in (KEYDOWN, KEYUP):
keystate = pygame.key.get_pressed()
若要添加,请为键输入选择[1]基于事件的键向下/向上或[2]getstate。-如果需要WASD类型的移动,请使用getstate。如果您想按/单击,请使用事件。