微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何区分pygame中的键是按住还是按下?

如何解决如何区分pygame中的键是按住还是按下?

我正在尝试实现一个功能,通过按住 WASD 键,我的角色在屏幕上可以移动,而按空格键应该会导致我的角色攻击。用户不能按住空格键进行攻击,同时可以按住 WASD 键移动。这个实现会导致攻击的预期行为,但它会导致移动也被按下一个键激活,因此无法按住 WASD 移动:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        sys.exit()
    pressed = pygame.key.get_pressed()
    if pressed[pygame.K_w]:
        pos_y += speed                   //change y-position by the value of speed
    if pressed[pygame.K_a]:
        pos_x -= speed
    if pressed[pygame.K_s]:
        pos_y -= speed
    if pressed[pygame.K_d]:
        pos_x += speed

    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_SPACE:
            attack()                    //execute attack logic - irrelevant for this example

有没有办法区分按键是按住还是刚刚按下?

解决方法

pygame.key.get_pressed() 返回一个包含每个键状态的序列。如果某个键被按下,则该键的状态为 True,否则为 False。使用 pygame.key.get_pressed() 评估按钮的当前状态。您必须在应用程序循环而不是事件循环中调用 pygame.key.get_pressed()

# application loop
while True:

    #event loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                attack() 

    pressed = pygame.key.get_pressed()
    if pressed[pygame.K_w]:
        pos_y += speed      
    if pressed[pygame.K_a]:
        pos_x -= speed
    if pressed[pygame.K_s]:
        pos_y -= speed
    if pressed[pygame.K_d]:
        pos_x += speed

    # [...]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。