使用 key.get_pressed() 的键事件问题

我有一辆车,我想向左/向右/向上/向下移动,但也要沿对角线移动。前四个效果很好,但是当我让它沿对角线移动时,图像并没有改变。


keys = pg.key.get_pressed()


if keys[pg.K_LEFT] or keys[pg.K_q]:

    van.state = VAN_LEFT

    screen.acceleration.x = screen.vitesse


if keys[pg.K_UP] or keys[pg.K_z]:

    van.state = VAN_UP

    screen.acceleration.y = screen.vitesse



if (keys[pg.K_LEFT] or keys[pg.K_q]) and (keys[pg.K_UP] or keys[pg.K_z]):

    van.state = VAN_LEFT_UP

    screen.acceleration.x = screen.vitesse

    screen.acceleration.y = screen.vitesse

如果我在主循环中添加print(van.state),它永远不会是 van_left_up。


有谁知道我做错了什么?


侃侃无极
浏览 184回答 2
2回答

桃花长相依

我终于找到了如何让它工作。这可能不是最好的解决方案,但它完全符合我的要求。相反,或者只有if keys[pygame.K_UP]and if keys[pygame.K_LEFT],我这样写:if keys[pygame.K_UP] and not keys[pygame.K_LEFT]:    ...if keys[pygame.K_LEFT] and not keys[pygame.K_UP]:    ...if keys[pygame.K_LEFT] and keys[pygame.K_UP]:    ...所以它知道我当时按下了两个键。感谢那些试图帮助我的人!

PIPIONE

根据评论讨论,这段代码应该可以工作。首先检查是否按下了两个键,然后检查是否按下了各个键。keys = pg.key.get_pressed()if (keys[pg.K_LEFT] or keys[pg.K_q]) and (keys[pg.K_UP] or keys[pg.K_z]):    van.state = VAN_LEFT_UP    screen.acceleration.x = screen.vitesse    screen.acceleration.y = screen.vitesse    elif keys[pg.K_LEFT] or keys[pg.K_q]:    van.state = VAN_LEFT    screen.acceleration.x = screen.vitesseelif keys[pg.K_UP] or keys[pg.K_z]:    van.state = VAN_UP    screen.acceleration.y = screen.vitesse
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python