Заставить курсор мыши перемещаться в позицию?

Я знаю, как заставить курсор перемещаться в положение, используя следующее:

Cursor.Position = New Point(XPosition, YPosition)

Но, делая именно это, он мгновенно перемещается туда, и я хотел бы, чтобы он перемещался из текущей позиции в новую позицию с заданной скоростью.

Скорость будет определяться двумя факторами:

1 - Расстояние между текущей и новой позицией - EG. Переход от 0X до 500X со скоростью 5px/ с по сравнению с 0X до 1000X со скоростью 10px/ с).

2 - ограниченный период времени, чтобы добраться до целевой позиции.

Я знаю только грязный способ сделать это, что-то вроде:

If Cursor.Position.X < XPosition Then 
    Dim Speed as Integer = XPosition - Cursor.Position.X
    While Cursor.Position.X < XPosition
        Cursor.Position = New Point(Cursor.Position.X + Speed, Blah..)
    End While
End If
'Etc..

Для этого потребуется несколько операторов If, проверяющих, находятся ли текущие позиции X/Y над / под целевыми позициями X/Y.

Можно ли как-нибудь сделать код, чтобы сделать это намного чище?

1 ответ

Решение

Похоже, вам нужно параметрическое уравнение для линии:

x = x1 + (x2-x1)*t

где
x1 = начало х,
x2 = конец х и
t = время между 0 и 1.

так что если вы хотите, чтобы курсор двигался от x1(10,20) в x2(30,60) более 10 секунд...

1 секунда в:
x = 10 + (30-10)*.1 ; x = 12
y = 20 + (60-20)*.1 ; y = 24
2 секунды:
x = 10 + (30-10)*.2 ; x = 14
y = 20 + (60-20)*.2 ; y = 28
3 секунды:
x = 10 + (30-10)*.3 ; x = 16
y = 20 + (60-20)*.3 ; y = 32
и т.п.

Редактировать:
Идея этого в действии (не используйте VB часто, так что это не идеально)
http://ideone.com/c9iLTA

Другие вопросы по тегам