我设法让我的工作与 Noelkd 的建议一起工作,但我遇到了 Ryan Haining 描述的类似问题
起初我有类似的东西,但它不起作用,因为它在所有退出和初始化时都失去了对游戏手柄动作的跟踪。这最初用于检查控制器是否已插入,但不能在运行时有效检查
我也有这个问题。我认为你是对的,调用quit
太频繁并没有给键盘足够的时间来重新初始化——至少在我的电脑上是这样。我发现如果您将呼叫限制为每秒,它会起作用。
它可能会导致玩家输入暂时断开连接,因此任何对 a 的调用joystick
都不起作用。
如果您检测到有一段时间没有输入(比如 5 秒或其他时间),最好只运行此代码。这样你就不会quit
在用户实际使用设备时
import pygame
import time
INACTIVITY_RECONNECT_TIME = 5
RECONNECT_TIMEOUT = 1
class ControllerInput():
def __init__(self):
pygame.joystick.init()
self.lastTime = 0
self.lastActive = 0
def getButtons(self, joystickId):
joystick = pygame.joystick.Joystick(joystickId)
joystick.init()
buttons = {}
for i in range(joystick.get_numbuttons()):
buttons[i] = joystick.get_button(i)
if buttons[i]:
self.lastActive = time.time()
return buttons
def hasController(self):
now = time.time()
if now - self.lastActive > INACTIVITY_RECONNECT_TIME and now - self.lastTime > RECONNECT_TIMEOUT:
self.lastTime = now
pygame.joystick.quit()
pygame.joystick.init()
return pygame.joystick.get_count() > 0
用法
# ... some constructor
controller = ControllerInput()
# ... game loop
if not controller.hasController():
# handle disconnect
print('reconnect')
return
buttons = controller.getButtons(0)
if buttons[0]:
# buttons[0] was pressed!