Author Topic: Нахождение персонажа на экране и поиск в области вокруг него картинок  (Read 2021 times)

0 Members and 1 Guest are viewing this topic.

gippi

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Здравствуйте. Помогите пожалуйста. Надо находить персонажа на экране и в области вокруг него искать картинки и кликать по ним.
                                      Getscreen
                                 IF_PICTURE_IN(0,0, $_xmax, $_ymax "персонаж.bmp")    \\ нахожу персонажа
                                  дальше не знаю как искать в области от этого изображения
                                  IF_PICTURE_IN(................................................, "1.bmp")
                                    LCLICK($_return1, $_return2)
                                     WAITMS(100)
                                      END_IF
                                  IF_PICTURE_IN(................................................, "2.bmp")
                                      LCLICK($_return1, $_return2)
                                        WAITMS(100)
                                         END_IF

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Записываем координату картинки в переменные и отнимая и прибавляя значения к ним устанавливаем область поиска.
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax, $_ymax "персонаж.bmp", -1, 100)
   $sx = $_return1
   $sy = $_return2
   
   IF_PICTURE_IN ($sx-50,$sy-50, $sx+50,$sy+50, "1.bmp", -1, 100) // Ищем в зоне +-50 пикселов от картинки персонаж.bmp
      LCLICK($_return1, $_return2)
      WAITMS(100)
   END_IF
   
   IF_PICTURE_IN ($sx-50,$sy-50, $sx+50,$sy+50, "2.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
   END_IF   
   
END_IF

WAITMS(50)

gippi

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Спасибо! только работает не совсем так как надо. Картинок персонажа может быть несколько. Когда находится имеющаяся на данный момент картинка персонажа происходит поиск картинок вокруг него и клик по ним, после клика картинка персонажа меняется и её уже нет в скрипте. По идее после getscreen персонаж обнаруживается кликаются картинки рядом по одному разу и всё далее опять getscreen а имеющейся картинки уже нет и цикл останавливается.

Если написать отдельно для одного положения персонажа, то так всё и происходит:
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax, $_ymax, "pers5.bmp", -1, 100)
   $sx = $_return1
   $sy = $_return2
   
   IF_PICTURE_IN ($sx-300,$sy-300, $sx+300,$sy+300, "r1.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
   END_IF
   
   IF_PICTURE_IN ($sx-300,$sy-300, $sx+300,$sy+300, "r2.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
   END_IF
   
   IF_PICTURE_IN ($sx-300,$sy-300, $sx+300,$sy+300, "r3.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
   END_IF
   
   IF_PICTURE_IN ($sx-300,$sy-300, $sx+300,$sy+300, "r4.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
   END_IF
   
   IF_PICTURE_IN ($sx-300,$sy-300, $sx+300,$sy+300, "r5.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
   END_IF
   
   IF_PICTURE_IN ($sx-300,$sy-300, $sx+300,$sy+300, "r6.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
   END_IF
   
END_IF
WAITMS(50)

Но если добавить несколько положений персонажа, то он начинает кликать по картинке не переставая с определённым промежутком :
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax, $_ymax, "pers1.bmp", -1, 100)
   $sx = $_return1
   $sy = $_return2
   
   IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r1.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
   END_IF
   
   IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r2.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
   END_IF
   
   IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r3.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
   END_IF
   
   IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r4.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
   END_IF
   
   IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r5.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
   END_IF
   
   IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r6.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
   END_IF
   
   IF_PICTURE_IN (0,0, $_xmax, $_ymax, "pers2.bmp", -1, 100)
      $sx = $_return1
      $sy = $_return2
     
      IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r1.bmp", -1, 100)
         LCLICK($_return1, $_return2)
         WAITMS(50)
      END_IF
     
      IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r2.bmp", -1, 100)
         LCLICK($_return1, $_return2)
         WAITMS(50)
      END_IF
     
      IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r3.bmp", -1, 100)
         LCLICK($_return1, $_return2)
         WAITMS(50)
      END_IF
     
      IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r4.bmp", -1, 100)
         LCLICK($_return1, $_return2)
         WAITMS(50)
      END_IF
     
      IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r5.bmp", -1, 100)
         LCLICK($_return1, $_return2)
         WAITMS(50)
      END_IF
     
      IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r6.bmp", -1, 100)
         LCLICK($_return1, $_return2)
         WAITMS(50)
      END_IF
     
      IF_PICTURE_IN (0,0, $_xmax, $_ymax, "pers3.bmp", -1, 100)
         $sx = $_return1
         $sy = $_return2
         
         IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r1.bmp", -1, 100)
            LCLICK($_return1, $_return2)
            WAITMS(50)
         END_IF
         
         IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r2.bmp", -1, 100)
            LCLICK($_return1, $_return2)
            WAITMS(50)
         END_IF
         
         IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r3.bmp", -1, 100)
            LCLICK($_return1, $_return2)
            WAITMS(50)
         END_IF
         
         IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r4.bmp", -1, 100)
            LCLICK($_return1, $_return2)
            WAITMS(50)
         END_IF
         
         IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r5.bmp", -1, 100)
            LCLICK($_return1, $_return2)
            WAITMS(50)
         END_IF
         
         IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, "r6.bmp", -1, 100)
            LCLICK($_return1, $_return2)
            WAITMS(50)
         END_IF
      END_IF
     
      WAITMS(50)


 Помогите разобраться пожалуйста                         
« Last Edit: July 03, 2017, 09:28:21 PM by Oraven »

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Помогите разобраться пожалуйста                       
В твоем примере не хватает нескольких END_IF
Code: (clickermann) [Select]
FOR($_pers=1,$_pers<4)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax, $_ymax, STRCONCAT("pers",$_pers,".bmp"), -1, 100)
      $sx = $_return1
      $sy = $_return2
      FOR($_r=1,$_r<7)
         IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, STRCONCAT("r",$_r,".bmp"), -1, 100)
            LCLICK($_return1, $_return2)
            WAITMS(50)
         END_IF
      END_CYC
   END_IF
END_CYC
WAITMS(50)
« Last Edit: July 03, 2017, 09:28:15 PM by open_78 »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Дополню
Code: (clickermann) [Select]
FOR($_pers=1,$_pers<4) // от "pers1.bmp" до "pers3.bmp"
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax, $_ymax, STRCONCAT("pers",$_pers,".bmp"), -1, 100)
      $sx = $_return1
      $sy = $_return2
      FOR($_r=1,$_r<7) // от "r1.bmp" до "r6.bmp"
         IF_PICTURE_IN ($sx-150,$sy-150, $sx+150,$sy+150, STRCONCAT("r",$_r,".bmp"), -1, 100)
            LCLICK($_return1, $_return2)
            WAITMS(50)
            $_r=999 // если найдено прерываем цикл
         END_IF
      END_CYC
   END_IF
END_CYC
WAITMS(50)

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Зачем прерывать? Я понял что их все надо прокликать.
« Last Edit: July 03, 2017, 09:52:36 PM by open_78 »