Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-Pygame-Learning被按下_Python_Object_Keyboard_Pygame - Fatal编程技术网

Python-Pygame-Learning被按下

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

我在学习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`
运行时:
对于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。如果您想按/单击,请使用事件。