我希望pygame设置自己的“沙箱”,这样很难检测窗口外部的输入。您之前的问题表明您也在使用win32api
模块。我们可以使用它来检测全局按键。
在全局范围内检测按键的正确方法是使用SetWindowsHookEx设置键盘挂钩。不幸的是,win32api没有公开该方法,所以我们不得不使用效率较低的方法。
GetKeyState方法可用于确定密钥是关闭还是关闭。您可以连续检查某个键的状态,以查看用户是否最近按下或释放了该键。
import win32api
import time
def keyWasUnPressed():
print "enabling joystick..."
#enable joystick here
def keyWasPressed():
print "disabling joystick..."
#disable joystick here
def isKeyPressed(key):
#"if the high-order bit is 1, the key is down; otherwise, it is up."
return (win32api.GetKeyState(key) & (1 << 7)) != 0
key = ord('A')
wasKeyPressedTheLastTimeWeChecked = False
while True:
keyIsPressed = isKeyPressed(key)
if keyIsPressed and not wasKeyPressedTheLastTimeWeChecked:
keyWasPressed()
if not keyIsPressed and wasKeyPressedTheLastTimeWeChecked:
keyWasUnPressed()
wasKeyPressedTheLastTimeWeChecked = keyIsPressed
time.sleep(0.01)
警告:与任何“而真正的睡眠,然后检查”循环,这种方法可能会使用更多的CPU周期比相当于“设置回调并等待”的方法。您可以延长sleep
时间段的长度以改善此情况,但关键检测将花费更长时间。例如,如果您睡了一整秒,则在按下某个键和禁用游戏杆之间可能需要一秒钟的时间。