繁体   English   中英

Pygame-为什么LSHIFT在按键重复模式下不响应

[英]Pygame - why LSHIFT does not respond in key repeat mode

我正在Pygame中制作3D引擎。 控件的元素包括使用WASD,LSHIFT和SPACE控制摄像机的XYZ坐标。 我已经使用pygame.key.set_repeat(1,10)使这些键生成多个pygame.KEYDOWN事件。 除了 LSHIFT 以外 ,以上每个键可以正常工作。

可以通过将以下代码插入IDLE来重现该行为:

def testKeys():
    import pygame
    screen = pygame.display.set_mode((100,100))
    pygame.key.set_repeat(1,100)
    done = False
    while not done:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE: print 'space'
                elif event.key == pygame.K_LSHIFT: print 'shift'
                elif event.key == pygame.ESCAPE: done = True

我得到的行为是SPACE键工作正常(生成多个事件):

space
space
space
space
space

但是LSHIFT键只生成一个事件:

shift

我正在使用Windows操作系统。 谁能解释为什么会这样,和/或提出一种与我现在所拥有的解决方案兼容(意味着相似的结构)的解决方案?

使用pygame.key.set_repeat (这只是SDL_EnableKeyRepeat的Python包装器)时,SDL似乎没有考虑MOD密钥。

您可以使用它来获得所需的行为:

def testKeys():
    import pygame
    from time import time
    screen = pygame.display.set_mode((100,100))
    pygame.key.set_repeat(1,100)
    ticks = 0
    done = False
    while not done:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE: print 'space'
                elif event.key == pygame.K_ESCAPE: done = True
        new_ticks = time()
        if new_ticks - ticks >= 0.1:
            ticks = new_ticks
            if pygame.key.get_pressed()[pygame.K_LSHIFT]:
                print 'shift'

由于SDL 2键事件的工作原理略有不同,因此捕获多个shift键按下事件没有问题(我已经对此进行了测试)。 看看围绕SDL 2的Pygame实现

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM