当前位置:  开发笔记 > 编程语言 > 正文

PyGame在同时按下3+键时不接收事件

如何解决《PyGame在同时按下3+键时不接收事件》经验,为你挑选了2个好方法。

我在PyGame开发一款简单的游戏......一架飞来飞去的火箭飞船.


问题:为什么pygame会在同时按下键时停止发出键盘事件?

关于密钥处理:该程序有许多变量,如KEYSTATE_FIRE, KEYSTATE_TURNLEFT等...

    当一个KEYDOWN事件被处理时,它设置对应的KEYSTATE_*变量为True.

    当一个KEYUP事件被处理,它设置相同的变量设置为false.

问题: 如果UP-ARROWLEFT-ARROW同时按下,pygame KEYDOWNSPACE按下时不会发出事件.此行为因密钥而异.当按下字母时,似乎在pygame停止发出KEYDOWN附加键的事件之前,我可以容纳其中的大约5个.

验证:在我的主循环中,我只是打印收到的每个事件以验证上述行为.

代码:作为参考,这里是处理关键事件的(粗略)方式:

while GAME_RUNNING:
    FRAME_NUMBER += 1
    CLOCK.tick(FRAME_PER_SECOND)

    #----------------------------------------------------------------------
    # Check for events
    for event in pygame.event.get():
        print event

        if event.type == pygame.QUIT:
            raise SystemExit()

        elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_UP:
            KEYSTATE_FORWARD = True
        elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_UP:
            KEYSTATE_FORWARD = False

        elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_DOWN:
            KEYSTATE_BACKWARD = True
        elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_DOWN:
            KEYSTATE_BACKWARD = False

        elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_LEFT:
            KEYSTATE_TURNLEFT = True
        elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_LEFT:
            KEYSTATE_TURNLEFT = False

        elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_RIGHT:
            KEYSTATE_TURNRIGHT = True
        elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_RIGHT:
            KEYSTATE_TURNRIGHT = False

        elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_SPACE:
            KEYSTATE_FIRE = True
        elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_SPACE:
            KEYSTATE_FIRE = False

    # remainder of game loop here...

按此顺序:

a (down)

s (down)

d (down)

f (down)

g (down)

h (down)

j (down)

k (down)

a (up)

s (up)

d (up)

f (up)

g (up)

h (up)

j (up)

k (up)

这是输出:


这是一个常见的问题吗?有解决方法吗?如果没有,使用pygame时处理多键控制问题的最佳方法是什么?



1> Dan Lew..:

这听起来像输入问题,而不是代码问题 - 你确定问题不是键盘本身吗?大多数键盘对可以同时按下的键数量有限制.通常情况下,您不能按压多个一起靠近的键.

要测试它,只需开始按住键盘上的字母并查看新字母何时停止显示.

我的建议是尝试将SPACE映射到其他地方的其他键,看看会发生什么.



2> technomalogi..:

正如其他人已经想到的那样,某些(特别是更便宜的,低端的)键盘具有低质量的键盘矩阵.使用这些键盘,某些键组合将导致您遇到的行为.另一个常见的副作用可能是"鬼键",其中额外的按键将出现在未实际按下的输入流中.

唯一的解决方案(如果问题与键盘矩阵有关)是更改键映射以使用矩阵的不同行/列上的键,或购买具有更好矩阵的键盘.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有