Форум сайта python.su
Я сделал связку vJoy и FreePIE, это эмулятор джойстика и программатор контроллеров.
FreePIE работает на python, но не поддерживает OSD, как в стиме, чтобы показывать положение виртуального джойстика.
Посоветуйте пожалуйста, как можно отобразить виртуальный джойстик?
В скрипте используются какие-то библиотеки python, можно ли подключить скомпилированные - честно говоря не знаю.
from System import Int16 from ctypes import windll, Structure, c_ulong, byref class POINT(Structure): _fields_ = [("x", c_ulong), ("y", c_ulong)] if starting: vJoy0_stat = False # данный флаг используется для включения передачи данных на джойстик Caps_Enabled = False # данный флаг используется для временного отключения джойстика vJoy[0].x = 0 mouse_x = 0 # координаты мыши mouse_y = 0 screen_x = windll.user32.GetSystemMetrics(0) # размер экрана screen_y = windll.user32.GetSystemMetrics(1) pt = POINT() preci = 100 # уточнитель задает точность измерений до сотых, используется, для сохранения дробной части в умножителе multipler_y = preci * 32768 / screen_y # умножитель определяет, насколько нужно увеличить значение положения курсора, чтобы джойстик корректно отклонялся от центра экрана # enable/disable mouse vJoy X/Y control by pressing CapsLock if keyboard.getPressed(Key.CapsLock): if vJoy0_stat: vJoy0_stat = False Caps_Enabled = False vJoy[0].x = 0 vJoy[0].y = 0 else: vJoy0_stat = True Caps_Enabled = True #mouse.middleButton - средняя кнопка мыши #mouse.rightButton .leftButton - правая или левая кнопка мыши и т.п. # деактивация джойстика, если нажата средняя кнопка мыши и включен капслок if mouse.middleButton and Caps_Enabled: vJoy0_stat = False # активация джойстика, если отпущена средняя кнопка мыши и включен капслок if not mouse.middleButton and Caps_Enabled: vJoy0_stat = True if vJoy0_stat: windll.user32.GetCursorPos(byref(pt)) if pt.x > 65536: mouse_x = 0 # добавлено, так как при выходе значения за пределы int, происходил вылет скрипта else: mouse_x = pt.x if pt.y > 65536: mouse_y = 0 # добавлено, так как при выходе значения за пределы int, происходил вылет скрипта else: mouse_y = pt.y # положение джойстика определяется как положение мыши на экране - половина ширина экрана умноженная на увеличитель и разделенная на уточнитель vJoy[0].x = (mouse_x - (screen_x / 2)) * multipler_y / preci vJoy[0].y = (mouse_y - (screen_y / 2)) * multipler_y / preci #диагностическая часть скрипта diagnostics.watch(vJoy0_stat) diagnostics.watch(Caps_Enabled) diagnostics.watch(mouse.middleButton)
Отредактировано Awasaky (Май 16, 2015 20:17:48)
Офлайн