pygame - 如果不是语法,键输入不起作用

时间:2015-07-07 19:22:18

标签: pygame keydown

所以最近我一直在用pygame开展一个项目,我开始研究你可以控制的角色。玩家可以使用箭头键移动,但在没有按下按键时无法停止。我对pygame的解决方案是测试用户是不是向左,向右,向上或向下按,然后玩家速度将变为零。但由于某种原因,当我没有按下按键时,玩家的速度仍然没有停止。我想知道我的if语句有什么问题。感谢您阅读本文并提供帮助!

if语句代码是这样的:

            if event.key != K_LEFT and event.key != K_RIGHT and event.key != K_DOWN and event.key != K_UP:
                playerSpeed = 0

这是movment的完整代码:

            #Keypress-player movement  

        elif event.type == KEYDOWN:
            if event.key != K_LEFT and event.key != K_RIGHT and event.key != K_DOWN and event.key != K_UP:
                playerSpeed = 0
            if event.key == K_LEFT:
                direction = LEFT
                playerSpeed = .2
            elif event.key == K_RIGHT:
                direction = RIGHT
                playerSpeed = .2
            elif event.key == K_DOWN:
                direction = DOWN
                playerSpeed = .2
            elif event.key == K_UP:
                playerSpeed = .2
                direction = UP

    if direction == UP:
        if canMoveUp == 'true':
            newPlayer = {'x':coords[0]['x'], 'y':coords[0]['y']-playerSpeed}
    elif direction == DOWN:
        if canMoveDown == 'true':
            newPlayer = {'x':coords[0]['x'], 'y':coords[0]['y']+playerSpeed}
    elif direction == LEFT:
        if canMoveLeft == 'true':
            newPlayer = {'x':coords[0]['x']-playerSpeed, 'y':coords[0]['y']}
    elif direction == RIGHT:
        if canMoveRight == 'true':
            newPlayer = {'x':coords[0]['x']+playerSpeed, 'y':coords[0]['y']}

1 个答案:

答案 0 :(得分:1)

您需要彻底重新思考自己的方法。有两种很好的方法可以进行基于密钥的输入。

1)为每个键设置一个标志,将其设置为KEYDOWN,并在KEYUP上取消设置。

2)使用Pygame提供的当前按下的密钥字典。

然后你可以说“if keys [”UP“]:”。这允许您一次使用多个键,并使逻辑更简单。