Как мне управлять мышью с помощью контроллера PS4?

#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 параметр по указателю и возвращает значение a BOOL для успеха/неудачи. Но модуль Python win32api обертывает этот API, чтобы вернуть кортеж, содержащий координаты.

5. Вероятно, вам следует стремиться к решению, которое считывает входные данные с использованием необработанных входных данных и вводит входные данные с помощью SendInput . Это и быстро, и надежно.