为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃无极 2023-04-11 15:29:45
我有一辆车,我想向左/向右/向上/向下移动,但也要沿对角线移动。前四个效果很好,但是当我让它沿对角线移动时,图像并没有改变。keys = pg.key.get_pressed()if keys[pg.K_LEFT] or keys[pg.K_q]:    van.state = VAN_LEFT    screen.acceleration.x = screen.vitesseif keys[pg.K_UP] or keys[pg.K_z]:    van.state = VAN_UP    screen.acceleration.y = screen.vitesseif (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。有谁知道我做错了什么?
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

我终于找到了如何让它工作。这可能不是最好的解决方案,但它完全符合我的要求。相反,或者只有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]:

    ...

所以它知道我当时按下了两个键。感谢那些试图帮助我的人!


查看完整回答
反对 回复 2023-04-11
?
PIPIONE

TA贡献1829条经验 获得超9个赞

根据评论讨论,这段代码应该可以工作。首先检查是否按下了两个键,然后检查是否按下了各个键。


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.vitesse


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

    van.state = VAN_UP

    screen.acceleration.y = screen.vitesse


查看完整回答
反对 回复 2023-04-11
  • 2 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信