Основной раздел > Общие вопросы

Реалистичное передвижение курсора

<< < (2/12) > >>

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