我一直在努力使用补间来使鼠标在Python中的移动更流畅,我目前正在尝试使一些重复性任务自动化。
我尝试使用补间功能消除了一些不应用平滑处理而出现的粗糙度,但是,在我的所有dy
和dx
值都除以number
我剩下了余数。不幸的是,这可以通过在两个值上都获得greatest common factor
来解决(因为dx
和dy
都需要用相同的number
分开),不幸的是,这导致GCD太小。
由于鼠标无法在屏幕上移动像素的其余部分,所以最终会导致准确性明显下降。
问题:如何在不影响准确性的情况下对鼠标移动进行补间?
import pytweening
import win32api
from time import sleep
dy = [50, 46, 42, 38, 33, 29, 24, 20, 15, 10, 10]
dx = [-35, 6, -55, -43, 0, 17, 29, 38, 42, 42, 38]
while True:
count = 0
values = [(pytweening.getPointOnLine(0, 0, x, y, 0.20)) for x, y in zip(dx, dy)]
while win32api.GetAsyncKeyState(0x02) and win32api.GetAsyncKeyState(0x01):
if count < len(dx):
for _ in range(5):
win32api.mouse_event(1, int(values[count][0]), int(values[count][1]), 0, 0)
sleep(0.134 / 5)
count += 1
问题:补间,而不会失去准确性?
参考:
getLinePoint()
x, y = getLinePoint(startPoint x, startPoint y, endPoint x, endPoint y, intervall)
函数在提供的直线上找到一个点。
将您的列表getLinePoint()
和dx
放到dy
的列表中
tuple(x, y)
输出:
dx = [-35, 6, -55, -43, 0, 17, 29, 38, 42, 42, 38] dy = [50, 46, 42, 38, 33, 29, 24, 20, 15, 10, 10] points = list(zip(dx, dy)) print(points)
在双[(-35, 50), (6, 46), (-55, 42), (-43, 38), (0, 33), (17, 29), (29, 24), (38, 20), (42, 15), (42, 10), (38, 10)]
循环中处理points
的此列表。
for
输出:始终达到端点!
import pytweening for startPoint in points: for endPoint in points: x, y = pytweening.getPointOnLine(startPoint[0], startPoint[1], endPoint[0], endPoint[1], 0.20) x, y = int(x), int(y) print('{}, '.format((x, y)), end='') # win32api.mouse_event(1, x, y, 0, 0) # sleep(0.134)
使用Python测试:3.6-pytweening:1.0.3