Python Pygame-为什么LSHIFT在按键重复模式下不响应
我正在用Pygame制作一个3D引擎。控件的一个元素涉及使用WASD、LSHIFT和SPACE来控制相机的XYZ坐标。我使用了Python Pygame-为什么LSHIFT在按键重复模式下不响应,python,keyboard,pygame,Python,Keyboard,Pygame,我正在用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
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
我得到的行为是空格键工作正常(生成多个事件):
但LSHIFT键只生成一个事件:
shift
我正在使用Windows操作系统。有人能解释为什么会发生这种情况,和/或提出一个与我现在拥有的兼容(意思是类似的结构)的解决方案吗?在使用
pygame.key.set\u repeat
时,SDL似乎没有考虑MOD键(这只是SDL\u EnableKeyRepeat
)的Python包装器
您可以使用此选项来获得所需的行为:
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'
由于SDL2按键事件的工作原理稍有不同,所以在捕获多个shift键按下事件时没有问题(我刚刚测试了这个)。看看这个
希望能有所帮助。@sloth这正是我所观察到的,不管这是否属实。由于cdonts有一个有效的解决方案和解释,我认为这个问题已经得到了回答,我不会试图解决这个次要问题。
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'