Основной раздел > Общие вопросы
Реалистичное передвижение курсора
dramster:
ABS() :o :-\? такого в справке нету. всегда приходилось проверять условиями и присваивать значение другим переменным. может я еще чегото не знаю??
WHOIM:
dramster, Vint, благодарю за помощь. Взял скрипт dramster. Vint, скрипт который ты отправил хорош, но чересчур нереалистичный. Прикреплю скрин из пеинта, дабы показать разницу.
--- Code: ---LDOWN(185,197)
MOVE(165,391)
WAITMS(500)
MOVE(506,770)
LUP($_xmouse,$_ymouse)
WAIT(1)
LDOWN(385,197)
MOVE_SLOW(365,391)
WAITMS(500)
MOVE_SLOW(706,770)
LUP($_xmouse,$_ymouse)
WAIT(1)
LDOWN(585,197)
m-move2(565,391)
WAITMS(500)
m-move2(906,770)
LUP($_xmouse,$_ymouse)
HALT
--- End code ---
Повторил код около 5 раз в разных цветах. Кружками обвел начало и конец линий. 1 линия скрипт MOVE. 2 линия скрипт dramster. 3 линия скрипт Vint. А в идеале должно быть как на 4 линии. Ее я нарисовал сам :)
Oraven:
Все оказалось куда проще ;D Нужно просто добавить рандом в момент перемещения курсора.
Вот что вышло, надеюсь это реалистично?!
--- Code: (clickermann) ---// подпрограмма обязательно выше вызова
SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
$MOVE_SPEED = 1 // множитель скорости
$MOVE_Start_X = $_xmouse
$MOVE_Start_Y = $_ymouse
$MOVE_X = $MOVE_Start_X
$MOVE_Y = $MOVE_Start_Y
$dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
$MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
IF($MOVE_SPEEDVAR < 1)
$MOVE_SPEEDVAR = 1
END_IF
$MOVE_step=($dist-1)/$MOVE_SPEEDVAR
$MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
$MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
$MOVE_X = $MOVE_X + $MOVE_X_step
$MOVE_Y = $MOVE_Y + $MOVE_Y_step
MOVE(ROUND($MOVE_X,0)+RND(-5,5), ROUND($MOVE_Y,0)+RND(-5,5)) // добавляем рандом
WAITMS(1)
END_CYC
MOVE($MOVE_END_X, $MOVE_END_Y) //Передвинуть окончательно в заданную точку
END_SUB
// образец строки MOVE
MOVE(520,380) // точка 1
LDOWN(520,380) // рисуем
mouse_move(523,602) // точка 2
mouse_move(637,834) // точка 3
LUP(637,834) // отпускаем
HALT // стоп
--- End code ---
Вот еще вариант с промежуточной случайно отклоняющейся точкой
--- Code: (clickermann) ---// подпрограмма обязательно выше вызова
SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
$MOVE_SPEED = 1 // множитель скорости
$MOVE_Start_X = $_xmouse
$MOVE_Start_Y = $_ymouse
$MOVE_X = $MOVE_Start_X
$MOVE_Y = $MOVE_Start_Y
$dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
$MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
IF($MOVE_SPEEDVAR < 1)
$MOVE_SPEEDVAR = 1
END_IF
$MOVE_step=($dist-1)/$MOVE_SPEEDVAR
$MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
$MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
$MOVE_X = $MOVE_X + $MOVE_X_step
$MOVE_Y = $MOVE_Y + $MOVE_Y_step
MOVE(ROUND($MOVE_X,0)+RND(-2,2), ROUND($MOVE_Y,0)+RND(-2,2)) // добавляем рандом
WAITMS(1)
END_CYC
END_SUB
SUB(m_move,$M_X,$M_Y)
$MOVE_MID_X = ($_xmouse+$M_X)/2
$MOVE_MID_Y = ($_ymouse+$M_Y)/2
mouse_move($MOVE_MID_X+RND(-30,30),$MOVE_MID_Y+RND(-30,30))
mouse_move($M_X,$M_Y)
MOVE($M_X,$M_Y) //Передвинуть окончательно в заданную точку
END_SUB
// образец строки MOVE
MOVE(520,380) // точка 1
LDOWN(520,380) // рисуем
m_move(637,834) // передвигаем
LUP(637,834) // отпускаем
HALT // стоп
--- End code ---
dramster:
да, такие рандомные отклонения будут хорошо себя вести на максимальной скорости, где шаг перемещения 40-60пикс. но если поставить скорость на минимум, то курсор будет отклоняться не только со стороны в сторону, но и в зад в перед.
я себе еще ломал немного голову чтобы при перемещении по диагонали, смещятся также и по диагонали перпендикулярно нашему движению, чтобы не было перескоков через пиксели :D, но подумал, что это будет слишком.
хотя, пока писал этот пост, подумал что не так уж это и сложно. мы знаем катеты - корень из суммы квадратов $MOVE_X_step и Y_step это один катет(он у нас будет постоянным на все передвижение), второй это =1, узнаем гипотенузу, и както находим координаты точки в плоскости. и тогда при минимальной скорости передвижения, перескоков через пиксели не должно быть. но наверно это будет лишним.
Oraven:
--- Quote from: dramster on September 09, 2015, 10:39:32 AM ---да, такие рандомные отклонения будут хорошо себя вести на максимальной скорости, где шаг перемещения 40-60пикс. но если поставить скорость на минимум, то курсор будет отклоняться не только со стороны в сторону, но и в зад в перед.
--- End quote ---
В том и смысл рандома! Все что нужно это добиться чтоб курсор ездил не как по линейке а немного коряво. Кроме того нужна именно высокая скорость, потому что ты там все коробки (в дарк орбит) пропустишь пока доведешь курсор куда нужно.
Navigation
[0] Message Index
[#] Next page
[*] Previous page
Go to full version