Python
Перемещение мыши с абсолютной оси в относительную
на языке python столкнулся с проблемой в играх при применении библиотек для автоматизации мыши. Некоторые не работают, работают лишь две библиотеки это pydirectinput и win32. Проблема в том, что перемещение в играх персонажа происходит с относительными координатами. Нужна помощь в написании алгоритма или ссылку на источник решения проблемы. Благодарю Заранее
А зачем использовать библиотеки, когда есть winapi mouse_event функция, например. Вот псевдокод рабочий на ahk.
F1::
CoordMode,Mouse,Screen
DllCall("mouse_event", "UInt", 0x8001, "UInt", 25535, "UInt", 25535)
Return
Нужно самому переводить координаты между нужными системами
допустим, загнали окно игры в самый верх экрана
x_init=0
y_init=32 (заголовок окна)
допустим, игра - сетка 16 х 12 из элементов по 10 пикселей
тогда относительные координаты в абсолютные переводятся легко
def setcoords(X,Y):
global x,y
x=X*10+x_init
y=Y*10+y_init
на входе - координаты сетки (0:15 и 0:11), на выходе (x,y) - целевые координаты курсора
но, насколько я понял, нужно не относительное переставление курсора, а его перемещение (скорее всего, еще и с зажатой ЛКМ). Это можно сделать точно также, только вместо "нулевых" координат окна нужно взять предыдущие координаты курсора:
def relcoords(X,Y):
global x,y
x+=X*10
y+=Y*10
в этом случае число ячеек может быть не только положительным (вправо и вниз), но и отрицательным - это движение вверх и влево
(Внимание! дальше ПСЕВДОКОД) я не работал с этими библиотеками, поэтому не знаю, какие функции используются там на самом деле, но пример привести нужно.
Пример - перетаскивание из ячейки (3,5) на 1 вправо и 3 вверх:
x=x_init=0
y=y_init=32
def relcoords(X,Y):
global x,y
x+=X*10
y+=Y*10
relcoords(3,5)
mouse.move(x,y) #заменить на настоящую функцию перемещения курсора
relcoords(1,-3)
mouse.down() #заменить на настоящую функцию "зажать кнопку"
mouse.move(x,y) #заменить на настоящую функцию перемещения курсора
mouse.up() #заменить на настоящую функцию "отпустить кнопку"
как-то так
допустим, загнали окно игры в самый верх экрана
x_init=0
y_init=32 (заголовок окна)
допустим, игра - сетка 16 х 12 из элементов по 10 пикселей
тогда относительные координаты в абсолютные переводятся легко
def setcoords(X,Y):
global x,y
x=X*10+x_init
y=Y*10+y_init
на входе - координаты сетки (0:15 и 0:11), на выходе (x,y) - целевые координаты курсора
но, насколько я понял, нужно не относительное переставление курсора, а его перемещение (скорее всего, еще и с зажатой ЛКМ). Это можно сделать точно также, только вместо "нулевых" координат окна нужно взять предыдущие координаты курсора:
def relcoords(X,Y):
global x,y
x+=X*10
y+=Y*10
в этом случае число ячеек может быть не только положительным (вправо и вниз), но и отрицательным - это движение вверх и влево
(Внимание! дальше ПСЕВДОКОД) я не работал с этими библиотеками, поэтому не знаю, какие функции используются там на самом деле, но пример привести нужно.
Пример - перетаскивание из ячейки (3,5) на 1 вправо и 3 вверх:
x=x_init=0
y=y_init=32
def relcoords(X,Y):
global x,y
x+=X*10
y+=Y*10
relcoords(3,5)
mouse.move(x,y) #заменить на настоящую функцию перемещения курсора
relcoords(1,-3)
mouse.down() #заменить на настоящую функцию "зажать кнопку"
mouse.move(x,y) #заменить на настоящую функцию перемещения курсора
mouse.up() #заменить на настоящую функцию "отпустить кнопку"
как-то так
Бенько Анатолий
Спасибо, вчера 13 часов мучился.Значит я правильную формулу использовал. Только не доводил до конца. Сделаю сегодня значит
Похожие вопросы
- В каждом абсолютном есть доля относительного, а в каждом относительном есть доля абсолютного?
- Смерть - абсолютный закон или относительный?...
- как расчитать абсолютную влажность ЧЕРЕЗ относительную?
- В чем разница между абсолютной истиной и относительной истиной?
- Правда - это абсолютное понятие или относительное?
- что такое абсолютная истина и относительная истина
- Дебил - это абсолютное понятие, или относительное?
- Истина абсолютна или истина относительна?
- Законы природы выглядят абсолютными. Мы многих относительных взаимоотношений явлений друг между другом, возможно
- Сатана это абсолютное зло или относительное?
0x0002 то пишешь так в абсолютных координатах и т.д. 0x8002 - левая кнопка нажата 0x8004 - левая кнопка отпущена и т.д.
DllCall("mouse_event", uint, 1, int, -11, int, -22, uint, 0, int, 0)