我希望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
時間段的長度以改善此情況,但關鍵檢測將花費更長時間。例如,如果您睡了一整秒,則在按下某個鍵和禁用遊戲杆之間可能需要一秒鐘的時間。