Author Topic: не срабатывает перетаскивание между двух окон  (Read 2286 times)

0 Members and 1 Guest are viewing this topic.

термех

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Всем доброго!
Подскажите начинающему по перетаскиванию предметов.
   Имеем два окна: инвентарь игрока и хранилище. Надо перетянуть определенные предметы из одного окна в другое.
   Простые клики, нажатия клавиш работают без проблем, поиск предметов тоже проходит отлично, курсор последовательно указывает на найденные предметы, и на место, в которое эти предметы необходимо перетащить. Но вот само перетаскивание не происходит.
   Пробовал выставлять задержку от 50ms, до 1500ms. Пробовал передвигать курсор через "move" пошагово, от точки к точке. Пробовал без поиска предметов записать перетаскивание из окна в окно, и потом повторить, тоже не помогло.
   При привязке к окну, дополнительно открытые окна никак не выделяются, они имеют ту же привязку, что и основное окно( хотя это может для других и очевидно, но я проверил, на всякий случай)
Code: [Select]
// RECORDED SCRIPT 25.01.2019
// waitms correction
#ps2_mouse
#ps2_keyboard

  keyDown(70)
  keyUp(70)
waitms(1527)
  lDown(941,675)
  lUp(941,675)
waitms(801)

GETSCREEN(1262,366,1513,682)

scanpicture($var,1257,336,1533,722,"pic.bmp",-1,80)
  while(arrsize($var)>0)
   $y=arrpop($var)
   $x=arrpop($var)
waitms(130)   
ldown($x+30,$y+30)
waitms(50)
   lup(578,759)
end_cyc
   halt

  Единственное, что еще может направить: однажды нажал паузу в скрипте между кликом DOWN и UP, и предмет "зажало", но так, что отпустить я его уже не смог. Помогла только перезагрузка игры.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Ну вот почему зона снимка не сходится с зоной поиска? Не знаешь что это лучше вообще не пиши.

Тебе нужна подпрограмма плавного перемещения мыши.
Множителем скорости можно настроить количество генерируемых точек по которым будет двигаться курсор. Допустимы числа с точкой, например 0.1 - очень мало 100 - очень много
Задержкой между перемещениями можно отрегулировать скорость с которой курсор будет двигаться по точкам.

Code: (clickermann) [Select]
#ps2_mouse
#ps2_keyboard

SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
   $MOVE_SPEED = 10  // множитель скорости   
   $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), ROUND($MOVE_Y,0))
      WAITMS(1) // задержка между перемещениями
   END_CYC   
   MOVE($MOVE_END_X, $MOVE_END_Y)
END_SUB

//=============================================

KEYPRESS(#F)
waitms(1527)

LCLICK(941,675)
waitms(801)

GETSCREEN
SCANPICTURE($ARR_SCAN, 1257,336,1533,722, "pic.bmp",-1,80)
FOR($i=0,$i<ARRSIZE($ARR_SCAN),2)
   LDOWN($ARR_SCAN[$i]+30, $ARR_SCAN[$i+1]+30)
   mouse_move(578,759)
   LUP(578,759)
   WAITMS(50)
END_CYC
UNDEFINE($ARR_SCAN)
HALT


термех

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Большое спасибо за быстрый ответ. Вечером опробую, по результату отпишусь.
 По поводу соответствия размеров скриншота и зоны поиска - просто описка  при выкладывании скрипта, вариантов сделал несколько, где то одна ошибка, где то другая. Проверял именно передвижения курсора, а зоны поиска не проверил, ибо там все работает.
 Если этим Вас огорчил, приношу свои извинения, впредь буду внимательнее.

термех

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
 Не получилось. Значения менял, задержку до 10, множитель скорости до 1000. В разных вариантах. пробовал очень много раз, ни один раз не сработало.
 Если вручную перетаскиваешь предмет, сразу видно, что он тянется за курсором, в случае с кликером, никаких изменений, предмет никак не передвигается. Как будто левый клик не проходит.


термех

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Обязательно попробую, спасибо. Но в данном случае, при открывании окон, начинает работать курсор, а не поворот головы. Возможно проблема в прозрачности, или чем то подобном. Что-то подобное читал, сейчас не могу найти где.

термех

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Нет, проблема явно не в движении мыши. Экспериментально установил, что предмет вообще не захватывается. Даже при передвижении в соседнюю клетку. Никакие задержки ситуацию не исправили. Mover так же не помог.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Может дело в Ps2 режиме?

термех

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Тут уже моя фантазия заканчивается. #ps2_mouse и #ps2_keyboard прописал, мышь и клавиатура ps2, не через переходник., где еще может быть проблема?

4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Никогда такого небыло, и вот опять...  :-\
http://crapware.aidf.org/forum/index.php?topic=1300.msg6182#msg6182
А вдруг поможет?

sektant23tm

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
У меня была похожая проблема.2 внутриигровых она,все координаты известны,,но с перетаскиванием беда.Казалось бы берешь LDOWN ,делаешь MOVE и отпускаешь на нужных координатах через LUP.Все работает прекрасно,до тех пор пока не включаешьрежим привязки.В режиме привязки почему-то работать отказывается и все тут.После нескольких неудачных попыток я заметил,что если именно записать через сам кликер перетаскивание предметов,то оно будет работать даже в оконном режиме.Я понятия не имею с чем это связано,но каким-то непостижимым образом это заработало,хотя там все то же самое по сути в коде.Мне помогло : я выкинул весь лишний код,вставил переменные какие мне нужны вместо точечных значений и скрипт заработал как я хотел. + подключил плавное движение мыши

Code: [Select]
move($x_mod+20,$y_mod-28) //ставишь мышь на позицию "откуда надо тянуть"
waitms(42)
lDown($x_mod+20,$y_mod-28)
waitms(42)



MOVE_SLOW($x_gila,$y_gila) //Куда надо тянуть

waitms(42)
lUp($x_gila,$y_gila) //отпускаем

Прекрасно работает в режиме привязки.Тянет с одного окна на другое будь здоров.

А вот вам и подпрограмма для плавного движения мыши.Скорее всего работать будет и без нее,но с ней покрасивше

Code: [Select]

SUB(MOVE_SLOW, $MOVE_END_X, $MOVE_END_Y)   
   $MOVE_SPEED = 15 // множитель скорости в попугаях меньше-быстрее. Можно дробный
   $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), ROUND($MOVE_Y,0))
      WAITMS(1)
   END_CYC
 
   MOVE($MOVE_END_X, $MOVE_END_Y)
END_SUB


Рекомендую выкинуть ее в отдельный файл и подключить где-то в самом начале.
« Last Edit: January 30, 2019, 10:43:20 PM by sektant23tm »