#python #winapi #mouse #joystick #ps4
Вопрос:
Я хотел переместить курсор мыши с помощью контроллера ps4, поэтому использовал pygame и win32api
Я придумал это решение проблемы, но оно работает не так, как я предполагал, потому что оно крайне запаздывает
for event in pygame.event.get():
if event.type == pygame.JOYAXISMOTION:
if event.value > self.threshold :
if event.axis == 2:
win32api.SetCursorPos([win32api.GetCursorPos()[0] self.sensitivity, win32api.GetCursorPos()[1]])
if event.axis == 3:
win32api.SetCursorPos([win32api.GetCursorPos()[0], win32api.GetCursorPos()[1] self.sensitivity])
if event.value < -self.threshold :
if event.axis == 2:
win32api.SetCursorPos([win32api.GetCursorPos()[0] - self.sensitivity, win32api.GetCursorPos()[1]])
if event.axis == 3:
win32api.SetCursorPos([win32api.GetCursorPos()[0], win32api.GetCursorPos()[1] - self.sensitivity])
это просто проверяет, находится ли джойстик в движении, а затем преобразует это движение в курсор с заданной чувствительностью, добавляя то же значение в текущую позицию:
win32api.SetCursorPos([win32api.GetCursorPos()[0] self.sensitivity, win32api.GetCursorPos()[1]])
Есть ли какое-либо другое эффективное решение, которое не будет отставать от моего компьютера?
Комментарии:
1. GetCursorPos не возвращает массив.
2. @NorbertWillhelm Он не возвращает массив, он возвращает кортеж с текущими позициями x и y, но я не понимаю, что вы имеете в виду.
3. GetCursorPos возвращает BOOL, и вы обрабатываете возвращаемое значение GetCursorPos как массив.
4. @NorbertWillhelm вы имеете в виду базовый Win32 API
GetCursorPos()
, который действительно выводитPOINT
параметр по указателю и возвращает значение aBOOL
для успеха/неудачи. Но модуль Pythonwin32api
обертывает этот API, чтобы вернуть кортеж, содержащий координаты.5. Вероятно, вам следует стремиться к решению, которое считывает входные данные с использованием необработанных входных данных и вводит входные данные с помощью SendInput . Это и быстро, и надежно.